專利名稱:具有腳本代碼的標(biāo)記內(nèi)容的快速呈現(xiàn)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通過(guò)用于減少與基于腳本代碼動(dòng)態(tài)生成可執(zhí)行代碼相關(guān)聯(lián)的代碼準(zhǔn)備的各階段(Stage)的傳統(tǒng)延遲的各種技術(shù),快速呈現(xiàn)具有腳本代碼的標(biāo)記內(nèi)容。
背景技術(shù):
隨著web瀏覽體驗(yàn)從用最小的交互性平面地呈現(xiàn)信息向在客戶端側(cè)具有大量交互性的更豐富的應(yīng)用(application)或小程序(applet)體驗(yàn)(或一般地信息顯示畫(huà)面和與顯示畫(huà)面上的對(duì)象的更豐富的交互性的混合)不斷地發(fā)展,基于原本主要為基于客戶端上的本機(jī)代碼的平面信息呈現(xiàn)的舊文檔對(duì)象模型(DOM)向流動(dòng)地處理腳本代碼(諸如JavaScript對(duì)象)的體驗(yàn)的發(fā)展存在各種挑戰(zhàn)。例如,加速用戶體驗(yàn)仍然是一項(xiàng)挑戰(zhàn)。
例如,使用過(guò)去的飛出菜單,web體驗(yàn)基于與服務(wù)器的通信對(duì)延遲進(jìn)行閃爍。腳本使得小的程序能夠在進(jìn)行中(on the fly)修改DOM而無(wú)需返回到服務(wù)器來(lái)獲得額外的幫助,例如異步JavaScript和可擴(kuò)展標(biāo)記語(yǔ)言(Ajax)。由于開(kāi)發(fā)者和消費(fèi)者可能想要在不返回到服務(wù)器的情況下在進(jìn)行中做更多事情,使腳本代碼在客戶端側(cè)上快速執(zhí)行已成為挑戰(zhàn)。因?yàn)橛脩趔w驗(yàn)集中于使DOM腳本化(scripting),所以緩慢地改變DOM帶來(lái)不好的交互響應(yīng)。在過(guò)去,由于對(duì)包括使任何對(duì)象可腳本化的一組接口(iDispatch、iActiveScript等)的OLE自動(dòng)化的使用,腳本引擎和DOM的本機(jī)類之間的通信是不良的。此外,如今各種組件對(duì)象模型(COM)對(duì)象可被無(wú)區(qū)別地創(chuàng)建,但這可能是不必要的,減慢了性能。通過(guò)避免與服務(wù)器的一次或多次往返通信,客戶端側(cè)腳本化能夠使網(wǎng)頁(yè)對(duì)一旦在客戶端瀏覽器上做出的用戶輸入更具響應(yīng)性,客戶端側(cè)腳本化一般是指web上在客戶端側(cè)通過(guò)用戶的web瀏覽器執(zhí)行而不是在服務(wù)器側(cè)(在web服務(wù)器上)執(zhí)行的那類計(jì)算機(jī)程序。作為示例,客戶端側(cè)腳本化是動(dòng)態(tài)超文本標(biāo)記語(yǔ)言(動(dòng)態(tài)HTML或DHTML)的一部分,使得網(wǎng)頁(yè)能夠被按照腳本化語(yǔ)言(諸如JavaScript (客戶端側(cè)JavaScript)和VBScript)腳本化,以取決于用戶輸入、環(huán)境條件(諸如在一天中的時(shí)間)或其他變量而具有不同且不斷變化的內(nèi)容。嵌入標(biāo)記文檔內(nèi)的客戶端側(cè)腳本有時(shí)被稱為“嵌入式腳本”,而包含在分開(kāi)的文件(這些文件被使用該文件的文檔所引用)中的腳本有時(shí)被稱為“外部腳本”。響應(yīng)于請(qǐng)求,這些腳本文件被這些文件所在的網(wǎng)絡(luò)計(jì)算設(shè)備(諸如web服務(wù)器)發(fā)送到用戶的計(jì)算機(jī)。關(guān)于此,為了執(zhí)行腳本并顯示包括來(lái)自腳本的任何可見(jiàn)輸出的標(biāo)記文檔,web瀏覽器與腳本引擎一起工作以解析并編譯腳本代碼??蛻舳藗?cè)腳本還可包含瀏覽器響應(yīng)于某些用戶動(dòng)作(例如,點(diǎn)擊按鈕)要遵循的指令。通常,這些指令可被遵循而無(wú)需與服務(wù)器進(jìn)一步通信。作為一個(gè)趨勢(shì),web瀏覽器和網(wǎng)頁(yè)趨向于采用越來(lái)越多的客戶端側(cè)腳本化,這對(duì)其中用戶沒(méi)有體驗(yàn)到不友善的網(wǎng)頁(yè)“刷新”的改進(jìn)的用戶界面具有貢獻(xiàn),但是反而看見(jiàn),例如,表示動(dòng)畫(huà)圖形交換格式(GIF)文件的圖標(biāo)以及網(wǎng)頁(yè)的該部分將在很短時(shí)間內(nèi)被更新,其中該圖標(biāo)表示發(fā)生對(duì)GIF文件的請(qǐng)求。除了 JavaScript能力之外,Ajax還允許客戶端機(jī)器和腳本化的文檔的開(kāi)發(fā)者在后臺(tái)與網(wǎng)絡(luò)計(jì)算設(shè)備(諸如web服務(wù)器)通信而不需要請(qǐng)求并呈現(xiàn)新的網(wǎng)頁(yè)版本。盡管一般會(huì)帶來(lái)用戶體驗(yàn)的改進(jìn),但是這導(dǎo)致了在設(shè)置時(shí)間在客戶端側(cè)上花太久的其他等待時(shí)間。例如,在大量腳本化在網(wǎng)站中被采用的情況下(前100個(gè)web特性通常是這樣),或者在網(wǎng)絡(luò)數(shù)據(jù)傳輸速率很慢的情況下,或在客戶端上的處理另外地受限的情況下,腳本引擎可能花太久來(lái)交付所有的可執(zhí)行代碼以用于標(biāo)記文檔的內(nèi)容的呈現(xiàn),導(dǎo)致不佳的用戶體驗(yàn)。關(guān)于此,傳統(tǒng)web瀏覽已按照導(dǎo)致腳本引擎低效地創(chuàng)建可執(zhí)行代碼的方式發(fā)展,因?yàn)槟_本引擎關(guān)于腳本代碼創(chuàng)建沒(méi)有區(qū)分,導(dǎo)致在腳本引擎完成其工作以呈現(xiàn)腳本化的標(biāo)記文檔時(shí)的不想要的等待時(shí)間。這種不想要的等待時(shí)間可能明顯拖用戶體驗(yàn)的后腿,特別
是在用戶可能不需要或想要在開(kāi)始交互之前等待所有網(wǎng)站功能加載的情況下。如今的腳本引擎和代碼生成的上述缺點(diǎn)僅僅旨在提供對(duì)常規(guī)系統(tǒng)的一些問(wèn)題的總覽,并且不旨在是窮盡性的。在仔細(xì)閱讀了以下詳細(xì)描述后,現(xiàn)有技術(shù)的其他問(wèn)題和各非限制性性實(shí)施例的對(duì)應(yīng)好處可變得顯而易見(jiàn)。
發(fā)明內(nèi)容
此處提供了簡(jiǎn)化的發(fā)明內(nèi)容以幫助能夠?qū)σ韵赂敿?xì)的描述和附圖中的示例性、非限制性實(shí)施例的各方面有基本或大體的理解。然而,本發(fā)明內(nèi)容并不旨在是詳盡的或窮盡的。相反,本發(fā)明的唯一目的在于,以簡(jiǎn)化的形式提出與一些示例性、非限制性實(shí)施例相關(guān)的一些概念,作為以下各實(shí)施例的更詳細(xì)的描述的序言。在一示例實(shí)施例中,一種方法包括通過(guò)計(jì)算設(shè)備的腳本引擎接收腳本代碼,其中所述計(jì)算設(shè)備的瀏覽器應(yīng)用所接收的標(biāo)記文檔包括或引用所述腳本代碼,以及確定要應(yīng)用到由所述腳本引擎應(yīng)用到所述腳本代碼的多方面代碼準(zhǔn)備過(guò)程的至少一個(gè)方面(phase)的努力等級(jí)。該努力等級(jí)可通過(guò)以下來(lái)確定基于由該瀏覽器應(yīng)用對(duì)該腳本代碼的一部分的調(diào)用的預(yù)測(cè)或分析,或基于在由該瀏覽器應(yīng)用對(duì)該腳本代碼的該部分的歷史使用中觀察到的模式。在另一示例實(shí)施例中,計(jì)算設(shè)備包括瀏覽器應(yīng)用和腳本引擎組件,瀏覽器應(yīng)用被配置成顯示包括或引用腳本代碼的標(biāo)記文檔,腳本引擎組件被配置成接收該腳本代碼、分析該腳本代碼的一部分或該腳本代碼的執(zhí)行期間該部分的使用來(lái)確定一組條件,在該組條件下該部分的性能通過(guò)執(zhí)行經(jīng)修改的部分而增加,其中,響應(yīng)于該組條件被滿足,該經(jīng)修改的部分而不是該部分由該瀏覽器應(yīng)用執(zhí)行。在另一示例實(shí)施例中,一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)包括計(jì)算機(jī)可讀指令,該計(jì)算機(jī)可讀指令響應(yīng)于執(zhí)行致使包括至少兩個(gè)處理核的計(jì)算設(shè)備執(zhí)行操作,所述操作包括通過(guò)所述至少兩個(gè)處理核中的第一處理核處理包括或引用腳本代碼的標(biāo)記文檔,包括由該第一處理核生成可執(zhí)行代碼,該可執(zhí)行代碼使能由該標(biāo)記文檔的該腳本代碼所表示的功能。該操作還包括基于該腳本代碼的性質(zhì),通過(guò)該至少兩個(gè)處理核中的第二處理核選擇性地生成不同于該可執(zhí)行代碼的替代可執(zhí)行代碼,并用該替代可執(zhí)行代碼取代該可執(zhí)行代碼以用于該第一處理核對(duì)該腳本代碼的進(jìn)一步執(zhí)行。
生成該替代可執(zhí)行代碼可包括基于以下來(lái)選擇性地生成該替代可執(zhí)行代碼該腳本代碼的至少一個(gè)循環(huán)的大小與該腳本代碼的總大小的比值的函數(shù)、該腳本代碼的計(jì)算強(qiáng)度的測(cè)量、或?qū)谠撃_本代碼構(gòu)造的調(diào)用樹(shù)的分析。以下更詳細(xì)地描述其他實(shí)施例和各非限制性性示例、場(chǎng)景和實(shí)現(xiàn)。附圖描述參考附圖進(jìn)一步描述各非限制性實(shí)施例,在附圖中圖I示出流程圖,該流程圖 示出用于確定應(yīng)用到多方面代碼準(zhǔn)備過(guò)程的一個(gè)或多個(gè)階段的努力等級(jí)的示例方法。圖2示出根據(jù)各實(shí)施例在代碼準(zhǔn)備期間代碼可能經(jīng)歷的各個(gè)示例階段。圖3是根據(jù)各實(shí)施例可能存在的不同努力等級(jí)可被應(yīng)用到的給定方面的多個(gè)子等級(jí)的框圖;圖4是示出在一實(shí)施例中基于不同執(zhí)行條件生成代碼的替代循環(huán)體的框圖;圖5示出在一實(shí)施例中基于動(dòng)態(tài)鍵入在動(dòng)態(tài)代碼生成和執(zhí)行期間的代碼交換(code swapping)的另一非限制性示例;圖6是在一實(shí)施例中在瀏覽器應(yīng)用和腳本引擎之間的示例交換的流程圖;圖7是示出在一個(gè)實(shí)施例中在運(yùn)行解釋代碼的線程和生成優(yōu)化代碼和相應(yīng)數(shù)據(jù)結(jié)構(gòu)集合的線程之間的平衡的框圖;圖8是示出根據(jù)一實(shí)施例的為代碼優(yōu)化而重新區(qū)分工作項(xiàng)的優(yōu)先級(jí)的框圖;圖9是示出在一實(shí)施例中用于生成用于取代的優(yōu)化代碼的非限制性過(guò)程的流程圖;
圖10是示出根據(jù)各實(shí)施例的包括腳本引擎和瀏覽器應(yīng)用之間的交互的示例性的、非限制性的設(shè)備的框圖;圖11是表示其中可實(shí)現(xiàn)在此處所述的各個(gè)實(shí)施例的示例性、非限制性聯(lián)網(wǎng)環(huán)境的框圖;以及圖12是表示其中可實(shí)現(xiàn)此處所述的各個(gè)實(shí)施例的一個(gè)或多個(gè)方面的示例性、非限制性計(jì)算系統(tǒng)或操作環(huán)境的框圖。
具體實(shí)施例方式概覽如在背景技術(shù)中所指示的,圍繞在標(biāo)記文檔(諸如DHTML文檔)中包括越來(lái)越多的嵌入的或外部的腳本化的代碼(諸如JavaScript)的趨勢(shì)可能導(dǎo)致某些不佳的用戶體驗(yàn),其中因?yàn)閭鹘y(tǒng)腳本引擎所應(yīng)用的傳統(tǒng)動(dòng)態(tài)代碼生成過(guò)程而發(fā)生過(guò)度的延遲。關(guān)于此,動(dòng)態(tài)代碼生成由于它的某些性質(zhì)而具有某些固有的挑戰(zhàn)。例如,在動(dòng)態(tài)鍵入的語(yǔ)言(諸如JavaScript)的情況下,通常直到代碼實(shí)際執(zhí)行才有可能分辨數(shù)據(jù)的各項(xiàng)呈現(xiàn)什么類型,例如,可能直到代碼實(shí)際執(zhí)行才知道動(dòng)態(tài)鍵入的變量是整數(shù)、浮點(diǎn)數(shù)、還是串。此外,如何托管(host)腳本代碼的更廣的上下文帶來(lái)其他的差異,因?yàn)閷?duì)于具有成為網(wǎng)頁(yè)的一部分的目標(biāo)的程序(諸如CNN. com的程序)來(lái)說(shuō),在同時(shí)運(yùn)行各程序的同時(shí)對(duì)程序的動(dòng)態(tài)編譯以使用本機(jī)代碼指令的要求可能變得很顯著。例如,前100個(gè)網(wǎng)站的一個(gè)性質(zhì)在于它們加載比它們實(shí)際運(yùn)行的多得多的代碼。關(guān)于此,挑戰(zhàn)不僅是嘗試快速運(yùn)行代碼。因?yàn)槟承┚W(wǎng)站最終僅為給定用戶或使用運(yùn)行它們加載的代碼的約15%-20%,所以在僅僅是快速執(zhí)行代碼之外存在另一個(gè)挑戰(zhàn),這是由于在該過(guò)程中存在其他瓶頸,諸如加載、解析等。這是與僅快速運(yùn)行Java不同的上下文,因?yàn)樯婕暗阶钚』虞d和解析以及減少為不被使用或不太可能被使用的代碼所完成的代碼準(zhǔn)備的量的不同目標(biāo)。術(shù)語(yǔ)“熱點(diǎn)(hot spot)”是用于函數(shù)的行話(vernacular term),它多被用在正在運(yùn)行的程序中。然而,在此處各實(shí)施例中此處所解決的問(wèn)題更廣泛,因?yàn)樗鼈冞€涉及避免代碼準(zhǔn)備穿過(guò)從接收標(biāo)記頁(yè)面到呈現(xiàn)該網(wǎng)頁(yè)并執(zhí)行所請(qǐng)求的功能的整個(gè)一連串的事,例如,避免或推遲加載、避免或推遲解析、避免或推遲編譯、避免或推遲對(duì)正在執(zhí)行的代碼的優(yōu)化等。本發(fā)明從而涉及剪裁(tailor)呈現(xiàn)內(nèi)容中所引用或接收的腳本代碼(諸如但不限于響應(yīng)于網(wǎng)頁(yè)請(qǐng)求從網(wǎng)絡(luò)接收的標(biāo)記內(nèi)容中所引用的腳本代碼)的準(zhǔn)備,以允許以減小的與準(zhǔn)備相關(guān)聯(lián)的延遲來(lái)向用戶顯示該呈現(xiàn)內(nèi)容。相應(yīng)地,在本申請(qǐng)中出現(xiàn)的各實(shí)施例中,減少了代碼準(zhǔn)備,例如,以準(zhǔn)備盡可能少的代碼以盡可能快地呈現(xiàn)與標(biāo)記文檔相關(guān)聯(lián)的UI、以及盡可能多地推遲加載、解析、解釋等 為目標(biāo),例如,推遲干擾迅速的Π呈現(xiàn)的任何項(xiàng)的各代碼準(zhǔn)備階段或子階段,直到該代碼被實(shí)際請(qǐng)求或滿足某些條件。此外,通過(guò)在解釋或執(zhí)行期間對(duì)代碼的觀察,如果可為該代碼確定常見(jiàn)執(zhí)行路徑情形,則在下面詳細(xì)呈現(xiàn)的各實(shí)施例中,可維護(hù)該本機(jī)代碼的兩個(gè)版本,一個(gè)版本是為常見(jiàn)情形優(yōu)化或另外改進(jìn)的,而另一個(gè)版本僅用于不常見(jiàn)的情形??蓪⑦@些思想擴(kuò)展到超過(guò)兩個(gè)版本的代碼和相關(guān)聯(lián)使用情形,其中維持超過(guò)兩個(gè)使用情形的效率比切換成本更重要。在下面更詳細(xì)地呈現(xiàn)的又一實(shí)施例中,通過(guò)在一個(gè)核或一組核上維持用于呈現(xiàn)信息的UI線程,而在另一個(gè)核或另一組核上執(zhí)行或應(yīng)用對(duì)代碼準(zhǔn)備過(guò)程的上述優(yōu)化和管理,可以按照響應(yīng)于信息被準(zhǔn)備好而區(qū)分信息的顯示的優(yōu)先級(jí)的方式來(lái)使用多個(gè)核。關(guān)于此,可以維護(hù)數(shù)據(jù)結(jié)構(gòu),諸如工作隊(duì)列,用于在生成經(jīng)修改的本機(jī)代碼的優(yōu)化和管理核以及盡可能快地運(yùn)行網(wǎng)站向用戶的顯示的UI核之間共享信息。而且,在各實(shí)施例中,向UI核提供替代代碼段可用于為給定情況運(yùn)行的通知,以便該替代代碼段可被切換入(switch in)以供UI核執(zhí)行,而不受UI核當(dāng)前正在執(zhí)行的代碼的干擾。以下更詳細(xì)地描述其他實(shí)施例和各非限制性性示例、場(chǎng)景和實(shí)現(xiàn)。用于內(nèi)容的快速呈現(xiàn)的腳本代碼的推遲的或優(yōu)化的代碼準(zhǔn)備如同提到過(guò)的,在此處呈現(xiàn)的各實(shí)施例中,減少或推遲了代碼準(zhǔn)備,例如,以準(zhǔn)備盡可能少的代碼以盡可能快地呈現(xiàn)與標(biāo)記文檔相關(guān)聯(lián)的UI、以及盡可能多地推遲加載、解析、解釋、優(yōu)化等為非限制性目標(biāo),例如,推遲干擾迅速的Π呈現(xiàn)的任何項(xiàng)的各代碼準(zhǔn)備階段或子階段,直到稍后或被實(shí)際請(qǐng)求。圖I示出了示出用于確定應(yīng)用到多方面代碼準(zhǔn)備過(guò)程的一個(gè)或多個(gè)方面的努力等級(jí)的示例方法的流程圖,例如,沒(méi)有努力、僅部分解析、解析、解釋、監(jiān)視代碼的執(zhí)行以優(yōu)化該代碼等。在100,通過(guò)計(jì)算設(shè)備的腳本引擎接收腳本代碼,該計(jì)算設(shè)備的瀏覽器應(yīng)用所接收的標(biāo)記文檔中包括或引用該腳本代碼。在110,確定要應(yīng)用到由腳本引擎應(yīng)用到腳本代碼的多方面代碼準(zhǔn)備過(guò)程中的至少一個(gè)方面的努力等級(jí)。努力等級(jí)的確定可包括在120,基于對(duì)瀏覽器應(yīng)用結(jié)合顯示標(biāo)記文檔對(duì)腳本代碼的至少一部分調(diào)用多少的預(yù)測(cè)或觀察來(lái)確定努力等級(jí),或者在130,基于在瀏覽器應(yīng)用結(jié)合顯示標(biāo)記文檔對(duì)腳本代碼的一部分的歷史使用中觀察到的模式來(lái)確定努力等級(jí),或執(zhí)行120和130兩者。例如,如圖2所示,作為接收代碼之后的初始階段,可選擇地可應(yīng)用較少的努力,而不是完全解析代碼。例如,可不執(zhí)行解析,或可通過(guò)僅確定函數(shù)的開(kāi)頭和結(jié)尾(例如,通過(guò)括號(hào)匹配)來(lái)執(zhí)行部分解析。例如,通過(guò)括號(hào)匹配,腳本引擎可接收代碼200并確定在何處N個(gè)函數(shù)Methodl, Method2, Method3, Method4,. . . , MethodN的邊界是被部分解析的代碼202,直到找到瀏覽器應(yīng)用所調(diào)用的函數(shù)。例如,如果代碼202的MethocM實(shí)際上被調(diào)用,則在已經(jīng)僅確定了 Methodl、Method2和Method3的開(kāi)頭和結(jié)尾的情況下,腳本引擎可開(kāi)始解析并解釋Method4,導(dǎo)致經(jīng)解析和解釋的Method4204。解析和解釋因此是代碼準(zhǔn)備階段的示例,其中可確定并應(yīng)用這種努力等級(jí)以用更多資源對(duì)待更高優(yōu)先級(jí)的代碼,并用更少資源或不用資源對(duì)待具有更低優(yōu)先級(jí)的代碼,如努力等級(jí)的特定確定可指示的。在解釋期間,腳本引擎還可觀察Method4的性質(zhì),以改善為執(zhí)行Method4而生成的可執(zhí)行代碼,例如,通過(guò)改善Method4的存儲(chǔ)器(memory)使用,或以其他方式使Method4更 高效。例如,腳本引擎可確定在MethocM中存在運(yùn)行很多的循環(huán),并向該循環(huán)應(yīng)用更多優(yōu)化資源,或腳本引擎可確定一段代碼中某個(gè)變量的類型可預(yù)測(cè)地或確定性地為整數(shù),在這種情況下可使用更高效的表示。關(guān)于此,盡管動(dòng)態(tài)程序可具有在運(yùn)行時(shí)(run-time)采用不同類型的變量,編程者為了設(shè)計(jì)或表示的簡(jiǎn)單仍然趨向于開(kāi)發(fā)具有模式(pattern)的代碼,其中例如編程者將一貫地使用一變量來(lái)存儲(chǔ)整數(shù),或者反而是可預(yù)測(cè)地或確定性地為串的另一變量。關(guān)于此,在解釋期間,腳本引擎可觀察這樣的模式,并隨后簡(jiǎn)化用于MethocM的可執(zhí)行代碼206的生成/編譯的代碼準(zhǔn)備。作為又一個(gè)附加操作,如下面在其他實(shí)施例中更詳細(xì)地描述的,也可在代碼執(zhí)行期間觀察可執(zhí)行代碼206的行為,在這種情況下,進(jìn)一步的觀察可針對(duì)該代碼在典型情形下運(yùn)行的方式來(lái)做出,從而允許以經(jīng)修改的可執(zhí)行代碼208的形式對(duì)可執(zhí)行代碼206做出進(jìn)一步的修改,對(duì)于未來(lái)的執(zhí)行或未來(lái)的執(zhí)行中的某一些,隨后可用經(jīng)修改的可執(zhí)行代碼208代替可執(zhí)行代碼206。相應(yīng)地,在各實(shí)施例中,在代碼準(zhǔn)備的多個(gè)方面的任何方面(例如,解析、解釋、編譯、執(zhí)行)中、或任何方面的子方面中,因?yàn)檫@些活動(dòng)中的每一個(gè)均可被分為可向其應(yīng)用一努力等級(jí)的各種代碼準(zhǔn)備步驟,可確定努力等級(jí),并且如果該努力等級(jí)不需要即時(shí)的資源,可推遲相關(guān)聯(lián)的代碼準(zhǔn)備方面或子方面,有效地向?yàn)g覽器應(yīng)用所實(shí)際請(qǐng)求的代碼準(zhǔn)備、或有可能被瀏覽器應(yīng)用很多地實(shí)際請(qǐng)求或在不遠(yuǎn)的未來(lái)實(shí)際請(qǐng)求的代碼準(zhǔn)備分配即時(shí)的資源。相應(yīng)地,在一個(gè)方面中,貫穿整個(gè)代碼準(zhǔn)備并在代碼準(zhǔn)備的各階段和子階段的任何可能的地方,推遲代碼準(zhǔn)備。這不僅是推遲從腳本代碼到本機(jī)處理器代碼的轉(zhuǎn)換,而是更廣泛地適用,因?yàn)楸疚拿枋龅母鲗?shí)施例基于為給定代碼段所應(yīng)用的相關(guān)聯(lián)的努力等級(jí)來(lái)推遲解析、解釋、字節(jié)碼生成等,即,代碼準(zhǔn)備的任何階段或子階段。如所提到的,目前描述的實(shí)施例比術(shù)語(yǔ)“熱點(diǎn)”的行話使用更廣泛,該行話使用觀察熱點(diǎn)函數(shù)(例如,運(yùn)行很多的函數(shù))并對(duì)準(zhǔn)備運(yùn)行時(shí)的熱函數(shù)投入比冷函數(shù)更多的努力。這些實(shí)施例可考慮準(zhǔn)備代碼的任何數(shù)量N個(gè)方面,并且可基于該代碼的所預(yù)測(cè)的或觀察到的使用來(lái)為每個(gè)方面確定努力等級(jí)。此外,給定方面中可能存在可向其應(yīng)用不同努力等級(jí)的多個(gè)子等級(jí)。這在圖3的框圖中示出,圖3示出了代碼準(zhǔn)備的三個(gè)階段300、310和320,分別具有子階段集合302、304和306,312,314和316,和322、324和326。關(guān)于此,例如基于所預(yù)測(cè)的代碼使用或?qū)?shí)際代碼使用的觀察,可向不同階段和/或子階段分配不同的努力等級(jí)。例如,代碼優(yōu)化階段(諸如階段300、310或320)的子階段等級(jí)處的示例優(yōu)化技術(shù)可包括循環(huán)不變代碼運(yùn)動(dòng)分析、常見(jiàn)子表達(dá)消除、常數(shù)傳播等。盡管圖3中示出了具有三個(gè)子階段的三個(gè)階段,注意,對(duì)于替代實(shí)施例考慮任何數(shù)量的階段和子階段,并且根據(jù)任何分層關(guān)系,或根據(jù)可向該代碼準(zhǔn)備過(guò)程的給定分支或節(jié)點(diǎn)分配努力等級(jí)的任何其他隨意的或可選的代碼準(zhǔn)備過(guò)程。例如,作為另一非限制性示例,腳本引擎可決定運(yùn)行“熱”代碼上的總共10個(gè)方面中的3個(gè)方面,僅運(yùn)行“冷”代碼上的10個(gè)方面中的一個(gè)方面,但是運(yùn)行最熱代碼的子集上的全部10個(gè)方面。換言之,對(duì)于代碼準(zhǔn)備過(guò)程的任何數(shù)量的方面,可基于正在運(yùn)行的程序正多么多地使用代碼以及關(guān)于該代碼的信息和其使用,在發(fā)射本機(jī)指令的最有效序列處將努力等級(jí)作為時(shí)間的函數(shù)來(lái)調(diào)整或調(diào)節(jié)。相應(yīng)地,除了推遲代碼準(zhǔn)備方面或子方面外,此處的各實(shí)施例描述了當(dāng)資源變得 可用或致力于優(yōu)化給定代碼或函數(shù)集合時(shí),基于關(guān)于該代碼的執(zhí)行的預(yù)測(cè)性的或?qū)嶋H的觀察,隨時(shí)間生成替代代碼。作為一個(gè)示例,高度使用網(wǎng)站(諸如紐約時(shí)報(bào)的在線站點(diǎn))的平均使用體驗(yàn)可以是約5-10分鐘,但是從用戶的立場(chǎng)看只花費(fèi)時(shí)間的一小部分來(lái)使代碼引擎觀察紐約時(shí)報(bào)的核心函數(shù)中的大部分,例如,如何布局頁(yè)面、取類型信息、取數(shù)據(jù)等。關(guān)于此,不存在數(shù)百種布局新頁(yè)面的方式,并且因此腳本引擎可相對(duì)快地、完全地或大部分地觀察讀取紐約時(shí)報(bào)上的文章的常見(jiàn)代碼通過(guò)(pass),并隨后開(kāi)始為閱讀相同的或其他的文章生成替代代碼。圖4是示出基于不同執(zhí)行條件生成代碼的替代循環(huán)體的框圖。例如,取決于執(zhí)行條件420,循環(huán)體410、循環(huán)體412或循環(huán)體414可以最快或另外地更高效地應(yīng)用到當(dāng)前條件。相應(yīng)地,具有循環(huán)體410的可執(zhí)行代碼400、具有循環(huán)體412的可執(zhí)行代碼402、具有循環(huán)體414的可執(zhí)行代碼404每個(gè)可被預(yù)先生成,或者循環(huán)體410、412或414可被換入(swapin)或換出(swap out)呈現(xiàn)線程所定位的(address)的現(xiàn)有代碼以分別執(zhí)行用于適當(dāng)條件Cl、C2或C3的替代代碼。從而,對(duì)于任何預(yù)定義的集合條件A、B、C等(這些條件單獨(dú)地或組合地帶來(lái)?xiàng)l件Cl、C2或C3),不同循環(huán)體可作為改善代碼的執(zhí)行效率的努力的結(jié)果而被換入。在本示例中,跨越各替代來(lái)循環(huán)體執(zhí)行,然而,當(dāng)前描述的實(shí)施例適用于優(yōu)化、或換入或換出不同于循環(huán)體的代碼或代碼部分的其他方式。作為生成替代代碼的進(jìn)一步非限制性示例,如果可以確定,則作為代碼的預(yù)測(cè)使用或代碼的實(shí)際觀察執(zhí)行的結(jié)果,超過(guò)95%的時(shí)間,將為或正為給定數(shù)據(jù)項(xiàng)存儲(chǔ)一整數(shù),則可生成優(yōu)化的本機(jī)代碼,該優(yōu)化的本機(jī)代碼使用本機(jī)整數(shù)寄存器格式以與x86處理器一起直接使用,并因此,對(duì)于這種大多數(shù)情況下發(fā)生的情形,可使用優(yōu)化的本機(jī)代碼。并且隨后,當(dāng)不常見(jiàn)的情形在小于5%的時(shí)間里發(fā)生時(shí),可用本機(jī)代碼的另一版本將該變量作為浮點(diǎn)數(shù)(或比本機(jī)整數(shù)寄存器格式低效的東西)鍵入,對(duì)于特殊情況可將其換入。圖5示出在基于動(dòng)態(tài)鍵入在動(dòng)態(tài)代碼生成和執(zhí)行期間的代碼交換的另一非限制性示例。關(guān)于此,例如通過(guò)觀察交互期間代碼500的性質(zhì)或作為觀察執(zhí)行期間代碼500的結(jié)果,在可確定存在常見(jiàn)代碼路徑或路徑集合的情況下,則可生成適合于常見(jiàn)代碼路徑的本機(jī)代碼502或其他替代,而隨后當(dāng)事實(shí)上遇到較不常見(jiàn)的情形時(shí)或如果遇到較不常見(jiàn)的情形則可為該較不常見(jiàn)的情形換入代碼504。下面更詳細(xì)地描述了關(guān)于換入為應(yīng)用到本機(jī)代碼的不同使用情形而優(yōu)化過(guò)的不同本機(jī)代碼版本的這些方面。例如,在下面更詳細(xì)地描述的其他實(shí)施例中,可向是否向一段代碼應(yīng)用及時(shí)(just in time)編譯器并隨后執(zhí)行“經(jīng)及時(shí)化(jitted)”的代碼還是在該段代碼的一組給定情況下簡(jiǎn)單地解釋該段代碼的決策應(yīng)用試探(heuristic)。關(guān)于此,圖4和圖5示出了此處描述的各實(shí)施例的另一方面,在于代碼生成過(guò)程不僅由代碼準(zhǔn)備階段或子階段的推遲引導(dǎo),而且由關(guān)于代碼本身的所擁有的各個(gè)信息等級(jí)通知(通過(guò)解釋或?qū)?zhí)行的觀察),以不僅在替代代碼能在所有情況下簡(jiǎn)單地取代代碼的情況下生成替代代碼,而且還為替代情形生成替代代碼(例如,生成不同的循環(huán)體,所述循環(huán)體此后能取決于瀏覽器應(yīng)用的給定函數(shù)調(diào)用而被容易地?fù)Q入或換出)。相應(yīng)地,如上所述,代碼的行為可被推斷或觀察,導(dǎo)致用于不同情形的不同代碼的生成,例如,常見(jiàn)情形對(duì)比不常見(jiàn)情形,并為常見(jiàn)情形執(zhí)行替代并從而改善整體性能而沒(méi)有最小公分母的情況的約束。從而,用于代碼生成的智能選擇可由關(guān)于該代碼的信息來(lái)通知,例如,該代碼可預(yù)測(cè)地或確定性地表現(xiàn)為將變量定義為整數(shù)數(shù)組,在這種情況下可生成在循環(huán)的頂部執(zhí)行快速檢查的代碼,該快速檢查確認(rèn)它是整數(shù)數(shù)組,并且假定如此,則使用為整數(shù)數(shù)據(jù)構(gòu)造剪裁的更高效的循環(huán)。圖6是在瀏覽器應(yīng)用630和腳本引擎640之間的示例交換的流程圖。瀏覽器應(yīng)用630所接收的腳本代碼660不帶關(guān)于腳本代碼660的重要性的任何優(yōu)先級(jí)信息地被發(fā)送到腳本引擎640。在600,腳本引擎640分析腳本代碼660的循環(huán)體或該循環(huán)體的使用。在 610,可生成經(jīng)修改的循環(huán)體以在某些條件下使用,例如,為腳本代碼660的常見(jiàn)使用情形優(yōu)化過(guò)的代碼。在620,響應(yīng)于該組條件被滿足而用經(jīng)修改的循環(huán)體來(lái)取代該循環(huán)體,或替代地,可在該循環(huán)體的頂部進(jìn)行檢查以確認(rèn)是否滿足該常見(jiàn)使用情況,并作為結(jié)果執(zhí)行該循環(huán)體或該經(jīng)修改的循環(huán)體。相應(yīng)的可執(zhí)行代碼670被返回到瀏覽器應(yīng)用630以供執(zhí)行。關(guān)于此,參考后面的非限制性實(shí)施例,進(jìn)一步描述了將上述技術(shù)應(yīng)用于指導(dǎo)腳本弓丨擎的有限代碼生成資源,其目標(biāo)是快速地向用戶呈現(xiàn)信息而無(wú)需等待較低優(yōu)先級(jí)的代碼被解析、生成、優(yōu)化等。起先,瀏覽器應(yīng)用接收具有樣式表、JavaScript文件等的標(biāo)記文件(諸如HTML或DHTMD0瀏覽器應(yīng)用繼續(xù)以將標(biāo)記文件的不同部分分開(kāi),并隨后用并發(fā)連接下載標(biāo)記中所定義的JavaScript或其他文件,并發(fā)連接中的每個(gè)連接用于各個(gè)不同的段。當(dāng)接收到各個(gè)不同的段之后,瀏覽器應(yīng)用將JavaScript文件轉(zhuǎn)發(fā)到JavaScript引擎,但是不帶關(guān)于任何給定段的優(yōu)先級(jí)或重要性的任何信息。關(guān)于時(shí)機(jī),還可命令腳本引擎準(zhǔn)備好運(yùn)行給定代碼段。然而,運(yùn)行給定代碼塊的請(qǐng)求可能在瀏覽器應(yīng)用已接收到該代碼塊的僅Ims內(nèi)發(fā)生,而如果花30-40ms來(lái)生成相應(yīng)代碼,并且花另外的5ms在要顯示的Π路徑中等的話,則這些延遲可加總并潛在地影響用戶體驗(yàn)。相應(yīng)地,如同上面指出的,如果可向代碼準(zhǔn)備階段或子階段的推遲或避免應(yīng)用智能,則是有利的。例如,在人類視覺(jué)和認(rèn)知欣賞方面,IOOms或更多的延遲變成可察覺(jué)的延遲。相應(yīng)地,作為另一示例,對(duì)于給定代碼段,腳本引擎可反而花l-2ms來(lái)查看函數(shù)邊界在何處,但是還沒(méi)有開(kāi)始任何解析,而腳本引擎可將“稍后解析我”存根(stub)插入該代碼并僅在l-2ms的通過(guò)之后將其傳回。然后,稍后,如果瀏覽器應(yīng)用想要調(diào)用例如該代碼段的函數(shù)F,則可花費(fèi)另外的l-2ms來(lái)解析或運(yùn)行該代碼段的函數(shù)F,同時(shí)仍舊避免解析整個(gè)代碼段。根據(jù)上面描述的其他實(shí)施例,可使該示例再進(jìn)一步,由此腳本引擎可在為該代碼段的函數(shù)F解析并生成代碼的同時(shí),觀察變量V表現(xiàn)為就像它將可預(yù)測(cè)地或確定性地為整數(shù),或在運(yùn)行F若干次之后,可以確認(rèn)V可預(yù)測(cè)地或確定性地為整數(shù),則腳本引擎可生成專用于將V表示為整數(shù)的代碼。關(guān)于此,腳本引擎盡力盡可能晚地響應(yīng)于所需要的,同時(shí)推測(cè)性地觀察至今發(fā)生了什么,進(jìn)而直到朝創(chuàng)建在常見(jiàn)情形下發(fā)生的更快且更高效的代碼演變。在本發(fā)明的其他方面中,使用多個(gè)核在一方面對(duì)代碼生成的上述管理和優(yōu)化,另一方面快速向用戶呈現(xiàn)Π而不等待該管理和優(yōu)化完成之間實(shí)現(xiàn)平衡。相應(yīng)地,在各實(shí)施例中,優(yōu)化和管理在與主Π線程不同的線程上進(jìn)行(主Π線程對(duì)諸如鼠標(biāo)點(diǎn)擊等輸入做出響應(yīng)并立即運(yùn)行相關(guān)聯(lián)的代碼,例如,響應(yīng)于輸入而相應(yīng)地改變視圖),但是其他處理核可并行地基于上述智能代碼生成實(shí)施例中的任何一個(gè)來(lái)生成替代代碼?!りP(guān)于此,在各實(shí)施例中,在驅(qū)動(dòng)標(biāo)記文檔的呈現(xiàn)的UI核和優(yōu)化代碼生成的優(yōu)化/管理核之間應(yīng)用平衡過(guò)程。在一個(gè)實(shí)施例中,該優(yōu)化/管理核管理數(shù)據(jù)結(jié)構(gòu)以用于在生成替代本機(jī)代碼的優(yōu)化/管理核和向用戶呈現(xiàn)該網(wǎng)站的UI核之間共享信息。因?yàn)閁I核心關(guān)注快速呈現(xiàn)并且從而通常是面向用戶的,在一個(gè)實(shí)施例中,UI核和優(yōu)化/管理核包括共享機(jī)制,以使得UI核在給定代碼段的替代或優(yōu)化版本變得可用時(shí)運(yùn)行該替代或優(yōu)化版本,而不等待,即,將替代代碼換入顯示該網(wǎng)頁(yè)的活動(dòng)而不減慢該活動(dòng)。關(guān)于此,如在下面的各實(shí)施例中所描述的,可提供避免與在執(zhí)行代碼期間用替代代碼蓋寫(xiě)該代碼相關(guān)聯(lián)的任何問(wèn)題的機(jī)制。如在一個(gè)實(shí)施例中所描述的,對(duì)平衡過(guò)程的任何非對(duì)稱設(shè)計(jì)確保優(yōu)化/管理核承擔(dān)維護(hù)工作隊(duì)列、換入和換出的協(xié)調(diào)、代碼在后臺(tái)的生成的任務(wù),以使得Π核永遠(yuǎn)不會(huì)等待并且能夠繼續(xù)進(jìn)行它的向用戶顯示信息的任務(wù)。在一個(gè)非限制性實(shí)現(xiàn)紅,通過(guò)調(diào)用入或檢查被稱為function info (函數(shù)信息)的函數(shù)(該函數(shù)對(duì)每個(gè)函數(shù)均實(shí)現(xiàn)),UI線程可檢查是否存在要調(diào)用的本地進(jìn)入點(diǎn),并且如果存在,則該Π線程調(diào)用該本機(jī)進(jìn)入點(diǎn)。本機(jī)進(jìn)入點(diǎn)可以是在代碼生成的各個(gè)方面處對(duì)一段代碼的存根,例如,本機(jī)進(jìn)入點(diǎn)可以是“已生成的代碼”存根或“解析我”存根(該存根導(dǎo)致該代碼的解析)或者“調(diào)用解釋器來(lái)運(yùn)行該代碼”存根。關(guān)于此,Π線程對(duì)存根的內(nèi)容是不可知的,而僅是繼續(xù)并且根據(jù)存根調(diào)用來(lái)運(yùn)行該時(shí)刻在那里的代碼。當(dāng)可產(chǎn)生替代代碼時(shí),則當(dāng)Π線程下一次傳遞該代碼時(shí),替代代碼將已利用存根檢查取代了較舊的代碼,即,下一次通過(guò)將致使Π線程經(jīng)由指向新地址的“已生成的代碼”存根跳到替代代碼。例如,作為朝已生成的代碼逐步移動(dòng)的代碼的一部分,在一個(gè)實(shí)施例中,在初始通過(guò)中,不重要的代碼不被解析,但是“解析我”存根被插入從而在下一個(gè)通過(guò)上或當(dāng)UI線程接下來(lái)遇到該代碼時(shí)該代碼被解析。然后在下一次調(diào)用該代碼時(shí),生成字節(jié)碼,然后調(diào)用解釋器來(lái)運(yùn)行該字節(jié)碼,等等。UI核還可用無(wú)鎖隊(duì)列來(lái)放棄(drop off) —工作項(xiàng),這是一種排齊工作項(xiàng)而不花費(fèi)鎖的方式。關(guān)于此,下面更詳細(xì)地描述如何組織這些隊(duì)列、關(guān)于你何時(shí)對(duì)代碼做何事的優(yōu)先級(jí)、你花多少努力來(lái)解析、編譯等以及為何如此的試探。相應(yīng)地,大量工作在后臺(tái)進(jìn)行而用戶并不知曉,這些工作正識(shí)別常見(jiàn)網(wǎng)頁(yè)和應(yīng)用場(chǎng)景、并將后臺(tái)核(優(yōu)化/管理核)的資源定向到它們最有效的地方。圖7示出一個(gè)示例實(shí)現(xiàn),其中由第一核或第一組核處理的Π線程750以及由第二核或另一組核處理的JIT線程760針對(duì)何時(shí)運(yùn)行被解釋器解釋的經(jīng)解釋的代碼770、或何時(shí)“及時(shí)化(jit)”該代碼(使該代碼通過(guò)JIT編譯器)并隨后運(yùn)行經(jīng)及時(shí)化的代碼780來(lái)實(shí)現(xiàn)上面描述的平衡。作為使用存根的示例,諸如形實(shí)轉(zhuǎn)換程序(thunk),如上面提到的,在此情形中,初始時(shí),每個(gè)形實(shí)轉(zhuǎn)換程序可被賦予空(NULL)值,并且如果該值為空,Π線程700可繼續(xù)使用經(jīng)解釋的代碼770,然而如果該字段不是空(B卩,如果存在指向經(jīng)及時(shí)化的代碼的地址),則UI線程700將轉(zhuǎn)而使用經(jīng)及時(shí)化的代碼780。同時(shí),優(yōu)化器/管理器核繼續(xù)嘗試在資源和時(shí)間允許時(shí)及時(shí)化越來(lái)越多的代碼以便最終所有工作都被完成,但是同時(shí),用戶盡可能快地體驗(yàn)了該網(wǎng)頁(yè),即使并非所有代碼均已被加載、解析、編譯、及時(shí)化等?!?br>
非限制性地、更詳細(xì)地描述此示例,存在兩種在這種環(huán)境中運(yùn)行代碼的方式代碼可運(yùn)行通過(guò)解釋器(一般更快),或該代碼可被“及時(shí)化”(運(yùn)行通過(guò)被稱為及時(shí)化器(jitter)的及時(shí)編譯器,一般稍慢)。一般而言,用解釋器解釋線性代碼序列比將代碼及時(shí)化、等待及時(shí)化器完成并隨后運(yùn)行經(jīng)及時(shí)化的代碼更快。關(guān)于此,及時(shí)化器趨向于對(duì)該代碼采用多次通過(guò)以形成優(yōu)化的代碼。相應(yīng)地,如果看上去代碼將被使用很多,則盡管有額外的代碼準(zhǔn)備時(shí)間,使用及時(shí)化器通常仍是性能改進(jìn),但是如果代碼的使用將很低,例如,使用一次,則使用解釋器來(lái)快速運(yùn)行代碼通常是性能改進(jìn)。從而,在各實(shí)施例中,在經(jīng)及時(shí)化的代碼和經(jīng)解釋的代碼之間維持平衡。初始時(shí),在Π線程上,解釋器開(kāi)始解釋代碼,而在JIT線程上,標(biāo)識(shí)用于及時(shí)化的候選。例如,對(duì)及時(shí)化表現(xiàn)良好的函數(shù)是大部分代碼在循環(huán)中的小函數(shù)。從而,根據(jù)一輪推測(cè)性及時(shí)化,這些函數(shù)首先被及時(shí)化,其中基于一組試探選擇排名靠前的候選。通過(guò)推測(cè)性及時(shí)化,不僅所調(diào)用的函數(shù)被及時(shí)化,而且某些函數(shù)即便沒(méi)被調(diào)用但由于其將被調(diào)用的可能性也被及時(shí)化。隨后,一旦這些函數(shù)被及時(shí)化,則進(jìn)入點(diǎn)被從經(jīng)解釋的代碼770切換到經(jīng)及時(shí)化的代碼780。關(guān)于此,由后臺(tái)(優(yōu)化器/管理器)核維護(hù)多個(gè)具有不同優(yōu)先級(jí)的隊(duì)列。其示例在圖7中示出,其中具有工作負(fù)載槽700、702、……、704的最高優(yōu)先級(jí)序列被維護(hù),具有工作負(fù)載槽710、712、……、714的第二級(jí)優(yōu)先級(jí)序列,具有工作負(fù)載槽720、722、……、724的第三級(jí)優(yōu)先級(jí)序列,……,以及具有工作負(fù)載槽730、734、……、736的第N級(jí)優(yōu)先級(jí)序列。例如,在一個(gè)實(shí)施例中,從高優(yōu)先級(jí)到低優(yōu)先級(jí)選擇7個(gè)不同的優(yōu)先級(jí)隊(duì)列。在初始通過(guò)期間,在接收到代碼時(shí)根據(jù)所接收的代碼的性質(zhì)將工作分槽(slot),然而,在初始通過(guò)期間,推測(cè)性的及時(shí)化可操作以在工作滿足某些推測(cè)性標(biāo)準(zhǔn)(如下面描述的)時(shí)將其指定在較低的優(yōu)先級(jí)隊(duì)列上。在推測(cè)性及時(shí)化后,例如,工作項(xiàng)714、722和730可能是用于及時(shí)化的好的候選,并且從而對(duì)工作負(fù)載槽的頂級(jí)候選700、702、……、704以及對(duì)在推測(cè)過(guò)程期間所選擇的那些候選執(zhí)行及時(shí)化。在一輪推測(cè)性及時(shí)化后,進(jìn)一步的及時(shí)化開(kāi)始于最高優(yōu)先級(jí)的工作項(xiàng),而所述工作項(xiàng)中剩余的在優(yōu)先級(jí)方面被向上滲透,如下。關(guān)于此,如在圖8中對(duì)第三優(yōu)先級(jí)代碼中的代碼工作項(xiàng)724所示,每次運(yùn)行該代碼時(shí),每次經(jīng)解釋的代碼770被調(diào)用時(shí)將其在優(yōu)先級(jí)上向上移動(dòng)一級(jí)。從而,在初始通過(guò)之后,每次使用經(jīng)解釋的代碼770時(shí),其優(yōu)先級(jí)向上移動(dòng),直到它達(dá)到最高優(yōu)先級(jí)。在一個(gè)實(shí)現(xiàn)中,當(dāng)?shù)诙?yōu)先級(jí)代碼達(dá)到最高優(yōu)先級(jí)時(shí)(如由工作項(xiàng)710所示),它實(shí)際上移動(dòng)到所有其他工作前面,并且及時(shí)化器在下一次機(jī)會(huì)時(shí)開(kāi)始它對(duì)該代碼的通過(guò)。作為結(jié)果,如果代碼被使用得很多,但是具有低初始優(yōu)先級(jí)并且被該推測(cè)性的輪次略過(guò),則它將向上滲透并很快變得優(yōu)化。如果該代碼不被調(diào)用得很多,則它將不被盡快優(yōu)化。一旦所有最高優(yōu)先級(jí)項(xiàng)目被及時(shí)化,及時(shí)化器可開(kāi)始優(yōu)化第二優(yōu)先級(jí)項(xiàng)目,如此等等,直到所有工作項(xiàng)目被消耗,而同時(shí)UI線程運(yùn)行最優(yōu)代碼而不減慢。關(guān)于如何區(qū)分腳本項(xiàng)的代碼生成的優(yōu)先級(jí)的試探,一種試探是該代碼是多么循環(huán)化(loopy),其是除了是循環(huán)的一切東西以外的代碼大小的測(cè)量,其是總代碼大小與它里面有多少是循環(huán)的比值,或反過(guò)來(lái),循環(huán)與代碼大小的比值。從而,如果一個(gè)函數(shù)大部分是循環(huán),則與具有小循環(huán)而大部分代碼不是循環(huán)的函數(shù)相比它具有較高的優(yōu)化優(yōu)先級(jí)。此外,與不進(jìn)行繁重?cái)?shù)學(xué)計(jì)算的代碼相比,正進(jìn)行繁重的數(shù)學(xué)計(jì)算的代碼從被及時(shí)化中獲得更多的益處。優(yōu)化對(duì)執(zhí)行大量數(shù)學(xué)的代碼工作得很好,因?yàn)榭衫锰幚砥鞯谋緳C(jī)寄存器,本機(jī)寄存器與在其他存儲(chǔ)器中設(shè)置分開(kāi)的存儲(chǔ)器結(jié)構(gòu)的代碼相比非???。在另一非限制性實(shí)施例中,構(gòu)造正在運(yùn)行的腳本的調(diào)用樹(shù),這有助于通知優(yōu)先級(jí)次序。關(guān)于此,調(diào)用樹(shù)有助于預(yù)計(jì)什么函數(shù)將是熱的。例如,如果注意到第一段代碼將可預(yù)測(cè)地或確定性地在第二段代碼之前運(yùn)行,則使第一段代碼比第二段代碼具有更高的優(yōu)先級(jí)是有意義的。或者,例如,如果存在沒(méi)有if語(yǔ)句的全局函數(shù),則在其具有更高優(yōu)先級(jí)的情況下執(zhí)行該代碼存在很高的機(jī)率。作為包含函數(shù)Foo的一點(diǎn)代碼的假想示例Foo{Bar;If X,then Y (如果 X,則 Y)}在此情況下,顯然,如果Foo被調(diào)用則Bar將被調(diào)用,而因?yàn)閄可能不是真的,則Y可能不被調(diào)用,并且從而B(niǎo)ar比Y具有更高的優(yōu)化優(yōu)先級(jí)。有許多不同的方式來(lái)采用這些試探作為輸入并形成相對(duì)的優(yōu)先級(jí)。一種方式是取決于給定代碼段滿足所選擇的一組試探的程度來(lái)分配從O到100的優(yōu)先級(jí)值,并隨后大致相等地將其分為那個(gè)數(shù)量的隊(duì)列。如所提到的,一旦經(jīng)及時(shí)化的可執(zhí)行代碼變得可用,經(jīng)及時(shí)化的可執(zhí)行代碼的地址被插入到解釋器代碼形實(shí)轉(zhuǎn)換程序(thunk)上方。如果解釋器代碼形實(shí)轉(zhuǎn)換程序仍舊在附近,則進(jìn)行檢查以確認(rèn)是否已進(jìn)行了或正在進(jìn)行代碼生成,而如果不是,則該工作項(xiàng)在優(yōu)先級(jí)方面向上猛沖。如果它已經(jīng)被及時(shí)化,則用經(jīng)及時(shí)化的地址取代該形實(shí)轉(zhuǎn)換程序。換言之,形實(shí)轉(zhuǎn)換程序存在以幫助標(biāo)識(shí)使用經(jīng)解釋的代碼的情況,直到經(jīng)及時(shí)化的代碼變得可用,而隨后形實(shí)轉(zhuǎn)換程序消失/被新的存儲(chǔ)器位置取代,以使得該代碼操作以跳到不同的存儲(chǔ)器位置以運(yùn)行經(jīng)及時(shí)化的代碼,例如,使Π線程前進(jìn)或跳躍到新的代碼。在一個(gè)實(shí)施例中,在將工作項(xiàng)移動(dòng)到最高優(yōu)先級(jí)隊(duì)列前方時(shí)可采用短期鎖(short lock)以避免沖突,但是因?yàn)檫@僅是項(xiàng)在列表中的重新定位,所以它是非常快且最小的鎖定時(shí)間。如上面描述的,使用2個(gè)核,I個(gè)用于解釋器而I個(gè)用于及時(shí)化器,然而,在一附加實(shí)施例中,可能存在3個(gè)或更多核1個(gè)用于解釋器、I個(gè)用于快速及時(shí)化器(較不全面)、而I個(gè)用于緩慢及時(shí)化器(全面的)。以此方式,對(duì)于會(huì)受益于某些優(yōu)化但不是完整優(yōu)化的某些項(xiàng)目,這些項(xiàng)目可作為中間步驟被改進(jìn)。此外,可使用補(bǔ)充核結(jié)合網(wǎng)站的顯示來(lái)執(zhí)行不再被任何其他對(duì)象使用或引用的所有對(duì)象的所有垃圾收集,以不干擾其他核正在進(jìn)行的重要工作。圖9是示出在一實(shí)施例中用于生成用于取代的優(yōu)化代碼的非限制性過(guò)程的流程圖;在900,利用第一處理核,顯示包括或引用腳本代碼的標(biāo)記文檔,并且生成使能該標(biāo)記文檔的腳本代碼所表示的功能的可執(zhí)行代碼。在910,利用第二處理核,基于腳本代碼的性質(zhì),選擇性地生成不同于該可執(zhí)行代碼的替代可執(zhí)行代碼。在920,利用第二處理核,用該替代可執(zhí)行代碼取代該可執(zhí)行代碼用于第一處理核對(duì)該腳本代碼的進(jìn)一步執(zhí)行。可選地,在930,第三處理核可執(zhí)行垃圾收集過(guò)程,該過(guò)程回收用于與標(biāo)記文檔有關(guān)的、不再用于標(biāo)記文檔或其功能的對(duì)象的存儲(chǔ)器。圖10是示出根據(jù)各實(shí)施例的包括腳本引擎1040和瀏覽器應(yīng)用1030之間的交互 的示例性的、非限制性的設(shè)備1000的框圖。如圖所示,瀏覽器應(yīng)用1030接收包括腳本代碼1032的標(biāo)記文檔1034,瀏覽器應(yīng)用1030隨后將腳本代碼1060轉(zhuǎn)發(fā)到腳本引擎1040以進(jìn)行如在此處的一個(gè)或多個(gè)實(shí)施例中所述的智能代碼生成。關(guān)于此,維持各中間數(shù)據(jù)結(jié)構(gòu)1050,通過(guò)中間數(shù)據(jù)結(jié)構(gòu)1050,向給定腳本代碼段1060的代碼生成的各階段的優(yōu)化分配優(yōu)先級(jí)。這些結(jié)構(gòu)可被維持在存儲(chǔ)器1010中,在適當(dāng)情況下被高速緩存在高速緩存存儲(chǔ)器1015中。如所提到的,在各實(shí)施例中,多個(gè)處理核1020正根據(jù)如在上面的一個(gè)或多個(gè)實(shí)施例中描述的分工來(lái)執(zhí)行并用分開(kāi)的核使用戶體驗(yàn)優(yōu)先。在根據(jù)此處描述的各實(shí)施例的各優(yōu)化或完成等級(jí)處,腳本引擎1040最終將可執(zhí)行代碼1070傳遞回瀏覽器應(yīng)用。同時(shí),主核一能完成其任務(wù)就盡快地處理標(biāo)記文檔1044的呈現(xiàn)而不等待腳本引擎1040完成其對(duì)所有工作項(xiàng)的工作,而可執(zhí)行代碼1070的輸出被表示為標(biāo)記文檔1044的輸出1042。在各實(shí)施例中,啟用智能編譯技術(shù)和試探,所述智能編譯技術(shù)和試探利用分開(kāi)的核來(lái)加速客戶端對(duì)某些網(wǎng)頁(yè)“熱點(diǎn)”(例如,具有高交互性的區(qū)域)的代碼生成。為web定制試探,例如,可使用數(shù)據(jù)結(jié)構(gòu)的web高速緩存來(lái)指導(dǎo)代碼生成選擇(例如,通過(guò)在高速緩存中存儲(chǔ)關(guān)于使用給定網(wǎng)頁(yè)的上一次時(shí)間的信息),并且隨后作為結(jié)果,可使用于所標(biāo)識(shí)的熱點(diǎn)的代碼更快。以此方式,隨著時(shí)間,因?yàn)橄嗤W(wǎng)站趨向于被調(diào)用很多,所以網(wǎng)站解釋參考保持在高速緩存中的已構(gòu)造結(jié)構(gòu)隨著時(shí)間改進(jìn)。某些性能結(jié)果已顯示,上面描述的各實(shí)施例和技術(shù)有助于相對(duì)于不應(yīng)用此處描述的各實(shí)施例的先前的網(wǎng)頁(yè)加載和交互的40到150倍的速度改進(jìn)。示例性聯(lián)網(wǎng)以及分布式環(huán)境本領(lǐng)域技術(shù)人員可以理解,此處描述的用于動(dòng)態(tài)代碼生成的各實(shí)施例可結(jié)合任何計(jì)算機(jī)或其它客戶機(jī)或服務(wù)器設(shè)備來(lái)實(shí)現(xiàn),其可被部署為計(jì)算機(jī)網(wǎng)絡(luò)的部分或在分布式計(jì)算環(huán)境中,并且可以被連接到任何類型的數(shù)據(jù)存儲(chǔ)。在這一點(diǎn)上,此處描述的各實(shí)施例可在具有任何數(shù)量的存儲(chǔ)器或存儲(chǔ)單元的、并且任何數(shù)量的應(yīng)用和進(jìn)程跨任何數(shù)量的存儲(chǔ)單元發(fā)生的任何計(jì)算機(jī)系統(tǒng)或環(huán)境中實(shí)現(xiàn)。這包括但不限于具有部署在具有遠(yuǎn)程或本地存儲(chǔ)的網(wǎng)絡(luò)環(huán)境或分布式計(jì)算環(huán)境中的服務(wù)器計(jì)算機(jī)和客戶機(jī)計(jì)算機(jī)的環(huán)境。分布式計(jì)算通過(guò)計(jì)算設(shè)備和系統(tǒng)之間的通信交換提供了計(jì)算機(jī)資源和服務(wù)的共享。這些資源和服務(wù)包括信息的交換、對(duì)于諸如文件等對(duì)象的高速緩存存儲(chǔ)和盤存儲(chǔ)。這些資源和服務(wù)還包括多個(gè)處理單元之間的處理能力共享以便進(jìn)行負(fù)載平衡、資源擴(kuò)展、處理專門化,等等。分布式計(jì)算利用網(wǎng)絡(luò)連接,從而允許客戶機(jī)利用它們的集體力量來(lái)使整個(gè)企業(yè)受益。就此,各種設(shè)備可具有可如參考本發(fā)明的各實(shí)施例描述地參與用于動(dòng)態(tài)代碼生成的機(jī)制的應(yīng)用、對(duì)象或資源。圖11提供了示例性的聯(lián)網(wǎng)或分布式計(jì)算環(huán)境的示意圖。該分布式計(jì)算環(huán)境包括計(jì)算對(duì)象1110、1112等以及計(jì)算對(duì)象或設(shè)備1120、1122、1124、1126、1128等,這些計(jì)算對(duì)象或設(shè)備可包括如由應(yīng)用1130、1132、1134、1136、1138和數(shù)據(jù)存儲(chǔ)1140表示的程序、方法、數(shù)據(jù)存儲(chǔ)、可編程邏輯等??梢岳斫猓?jì)算對(duì)象1110、1112等以及計(jì)算對(duì)象或設(shè)備1120、1122、1124、1126、1128等可包括不同的設(shè)備,諸如個(gè)人數(shù)字助理(PDA)、音頻/視頻設(shè)備、移動(dòng)電話、MP3播放器、個(gè)人計(jì)算機(jī)、膝上型計(jì)算機(jī)等。每一個(gè)計(jì)算對(duì)象1110、1112等以及計(jì)算對(duì)象或設(shè)備1120、1122、1124、1126、1128等可通過(guò)通信網(wǎng)絡(luò)1142直接或間接與一個(gè)或多個(gè)其他計(jì)算對(duì)象1110、1112等以及計(jì)算對(duì)象或設(shè)備1120、1122、1124、1126、1128等進(jìn)行通信。即使在圖11中被示為單個(gè)元件,但通信 網(wǎng)絡(luò)1142可包括向圖11的系統(tǒng)提供服務(wù)的其他計(jì)算對(duì)象或計(jì)算設(shè)備,和/或可表示多個(gè)互連網(wǎng)絡(luò)(未示出)。每個(gè)計(jì)算對(duì)象1110、1112等或計(jì)算對(duì)象或設(shè)備1120、1122、1124、1126、1128等還可以含有應(yīng)用,諸如可以利用API或其他對(duì)象、軟件、固件和/或硬件的、適于實(shí)現(xiàn)或與根據(jù)各實(shí)施例所提供用于動(dòng)態(tài)代碼生成的技術(shù)進(jìn)行通信的應(yīng)用1130、1132、1134、1136、1138。存在支持分布式計(jì)算環(huán)境的各種系統(tǒng)、組件和網(wǎng)絡(luò)配置。例如,計(jì)算系統(tǒng)可由有線或無(wú)線系統(tǒng)、本地網(wǎng)絡(luò)或廣泛分布的網(wǎng)絡(luò)連接在一起。當(dāng)前,許多網(wǎng)絡(luò)被耦合至因特網(wǎng),后者為廣泛分布的計(jì)算提供了基礎(chǔ)結(jié)構(gòu)并包含許多不同的網(wǎng)絡(luò),但任何網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)都可用于便于與如各實(shí)施例中所描述的用于動(dòng)態(tài)代碼生成的系統(tǒng)的示例性通信。由此,可使用諸如客戶機(jī)/服務(wù)器、對(duì)等、或混合體系結(jié)構(gòu)之類的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)和網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)的主機(jī)?!翱蛻舳恕笔鞘褂门c它無(wú)關(guān)的另一類或組的服務(wù)的一個(gè)類或組中的成員??蛻舳丝梢允沁M(jìn)程,即大致上是請(qǐng)求由另一程序或進(jìn)程提供的服務(wù)的一組指令或任務(wù)??蛻舳诉M(jìn)程利用所請(qǐng)求的服務(wù),而不必“知道”有關(guān)其他程序或服務(wù)本身的任何工作細(xì)節(jié)。在客戶端/服務(wù)器體系結(jié)構(gòu)中,尤其在聯(lián)網(wǎng)系統(tǒng)中,客戶端通常是訪問(wèn)另一計(jì)算機(jī)(例如,服務(wù)器)所提供的共享網(wǎng)絡(luò)資源的計(jì)算機(jī)。在圖11的圖示中,作為非限制性示例,計(jì)算對(duì)象或設(shè)備1120、1122、1124、1126、1128等可被認(rèn)為是客戶機(jī)而計(jì)算對(duì)象1110、1112等可被認(rèn)為是服務(wù)器,其中計(jì)算對(duì)象1110、1112等擔(dān)當(dāng)提供數(shù)據(jù)服務(wù)的服務(wù)器,諸如從客戶機(jī)計(jì)算對(duì)象或設(shè)備1120、1122、1124、1126、1128等接收數(shù)據(jù)、存儲(chǔ)數(shù)據(jù)、處理數(shù)據(jù)、向客戶機(jī)計(jì)算對(duì)象或設(shè)備1120、1122、1124、1126、1128發(fā)送數(shù)據(jù)等,但任何計(jì)算機(jī)都可取決于環(huán)境而被認(rèn)為是客戶機(jī)、服務(wù)器或兩者。服務(wù)器通常是可通過(guò)諸如因特網(wǎng)或無(wú)線網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)之類的遠(yuǎn)程網(wǎng)絡(luò)或本地網(wǎng)絡(luò)訪問(wèn)的遠(yuǎn)程計(jì)算機(jī)系統(tǒng)。客戶機(jī)進(jìn)程可在第一計(jì)算機(jī)系統(tǒng)中活動(dòng),而服務(wù)器進(jìn)程可在第二計(jì)算機(jī)系統(tǒng)中活動(dòng),它們通過(guò)通信介質(zhì)相互通信,由此提供分布式功能并允許多個(gè)客戶機(jī)利用服務(wù)器的信息收集能力。按照此處所描述的技術(shù)來(lái)利用的任何軟件對(duì)象可以被單獨(dú)提供或分布在多個(gè)計(jì)算設(shè)備或?qū)ο笊?。在其中通信網(wǎng)絡(luò)1142或總線例如是因特網(wǎng)的網(wǎng)絡(luò)環(huán)境中,計(jì)算對(duì)象1110、1112等可以是其他計(jì)算對(duì)象或設(shè)備1120、1122、1124、1126、1128等通過(guò)諸如超文本傳輸協(xié)議(HTTP)等多種已知協(xié)議中的任一種與其通信的web服務(wù)器。擔(dān)當(dāng)服務(wù)器的計(jì)算對(duì)象1110、1112等也可用作客戶端,例如計(jì)算對(duì)象或設(shè)備1120、1122、1124、1126、1128等,這是分布式計(jì)算環(huán)境的特性。示例性計(jì)算設(shè)備如上所述,有利的是,此處所描述的技術(shù)可適用于期望在計(jì)算系統(tǒng)中執(zhí)行動(dòng)態(tài)代碼生成的任何設(shè)備。因此,可以理解,構(gòu)想 了結(jié)合各實(shí)施例使用的所有種類的手持式、便攜式和其它計(jì)算設(shè)備和計(jì)算對(duì)象,即,在設(shè)備的資源使用可理想地優(yōu)化的任何地方。因此,以下在圖12中所述的通用遠(yuǎn)程計(jì)算機(jī)只是計(jì)算設(shè)備的一個(gè)示例。盡管并非所需,但各實(shí)施例可部分地經(jīng)由操作系統(tǒng)來(lái)實(shí)現(xiàn),以供設(shè)備或?qū)ο蟮姆?wù)開(kāi)發(fā)者使用和/或被包括在用于執(zhí)行此處所述的各實(shí)施例的一個(gè)或多個(gè)功能方面的應(yīng)用軟件內(nèi)。軟件可以在由諸如客戶端工作站、服務(wù)器或其它設(shè)備等一個(gè)或多個(gè)計(jì)算機(jī)執(zhí)行的諸如程序模塊等計(jì)算機(jī)可執(zhí)行指令的通用上下文中描述。本領(lǐng)域的技術(shù)人員可以理解,計(jì)算機(jī)系統(tǒng)具有可用于傳遞數(shù)據(jù)的各種配置和協(xié)議,并且由此沒(méi)有特定配置或協(xié)議應(yīng)當(dāng)被認(rèn)為是限制性的。因此,圖12示出了其中可實(shí)現(xiàn)各實(shí)施例的一個(gè)或多個(gè)方面的合適的計(jì)算系統(tǒng)環(huán)境1200的一個(gè)示例,盡管如上所述,計(jì)算系統(tǒng)環(huán)境1200僅為合適的計(jì)算環(huán)境的一個(gè)示例,并非對(duì)使用范圍或功能提出任何限制。也不應(yīng)當(dāng)將計(jì)算系統(tǒng)環(huán)境1200解釋為對(duì)在示例性計(jì)算系統(tǒng)環(huán)境1200中所示的組件中的任何一個(gè)或其組合有任何依賴或要求。參考圖12,用于實(shí)現(xiàn)一個(gè)或多個(gè)實(shí)施例的示例性遠(yuǎn)程設(shè)備包括計(jì)算機(jī)1210形式的通用計(jì)算設(shè)備。計(jì)算機(jī)1210的組件可包括,但不限于,處理單元1220、系統(tǒng)存儲(chǔ)器1230、以及將包括系統(tǒng)存儲(chǔ)器的各種系統(tǒng)組件耦合到處理單元1220的系統(tǒng)總線1222。計(jì)算機(jī)1210通常包括各種計(jì)算機(jī)可讀介質(zhì),并且可以是可由計(jì)算機(jī)1210訪問(wèn)的任何可用介質(zhì)。系統(tǒng)存儲(chǔ)器1230可包括諸如只讀存儲(chǔ)器(ROM)和/或隨機(jī)存取存儲(chǔ)器(RAM)之類的易失性和/或非易失性存儲(chǔ)器形式的計(jì)算機(jī)存儲(chǔ)介質(zhì)。作為示例而非限制,系統(tǒng)存儲(chǔ)器1230還可包括操作系統(tǒng)、應(yīng)用程序、其他程序模塊、以及程序數(shù)據(jù)。根據(jù)進(jìn)一步的示例,計(jì)算機(jī)1210還可以包括各種其它介質(zhì)(未示出),可以包括,但不是限制,RAM,、R0M、EEPR0M、閃存存儲(chǔ)器或其它存儲(chǔ)器技術(shù),CD ROM、數(shù)字多功能盤(DVD)或其它光盤存儲(chǔ)、磁帶盒、磁帶、磁盤存儲(chǔ)或其它磁存儲(chǔ)設(shè)備或其它可用于存儲(chǔ)所需信息的有形的和/或非瞬時(shí)介質(zhì)。用戶可通過(guò)輸入設(shè)備1240向計(jì)算機(jī)1210輸入命令和信息。監(jiān)視器或其他類型的顯示設(shè)備也經(jīng)由諸如輸出接口 1250之類的接口連接到系統(tǒng)總線1222。除監(jiān)視器以外,計(jì)算機(jī)還可包括諸如揚(yáng)聲器和打印機(jī)之類的其他外圍輸出設(shè)備,它們可通過(guò)輸出接口 1250連接。計(jì)算機(jī)1210可使用到一個(gè)或多個(gè)其他遠(yuǎn)程計(jì)算機(jī)(諸如遠(yuǎn)程計(jì)算機(jī)1270)的諸如網(wǎng)絡(luò)接口 1260的邏輯連接在聯(lián)網(wǎng)或分布式環(huán)境中操作。遠(yuǎn)程計(jì)算機(jī)1270可以是個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對(duì)等設(shè)備或其他常見(jiàn)網(wǎng)絡(luò)節(jié)點(diǎn)、或者任何其他遠(yuǎn)程媒體消費(fèi)或傳輸設(shè)備,并且可包括以上關(guān)于計(jì)算機(jī)1210所述的任何或全部元件。圖12所示的邏輯連接包括諸如局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)之類的網(wǎng)絡(luò)1272,但也可包括其他網(wǎng)絡(luò)/總線。這些聯(lián)網(wǎng)環(huán)境在家庭、辦公室、企業(yè)范圍的計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)和因特網(wǎng)中是常見(jiàn)的。如上所述,盡管結(jié)合各種計(jì)算設(shè)備和網(wǎng)絡(luò)體系結(jié)構(gòu)描述了各示例性實(shí)施例,但底層概念可被應(yīng)用于任何網(wǎng)絡(luò)系統(tǒng)和任何計(jì)算設(shè)備或系統(tǒng)。此外,存在實(shí)現(xiàn)相同或相似功能的多種方法,例如適當(dāng)?shù)腁PI、工具箱、驅(qū)動(dòng)程序代碼、操作系統(tǒng)、控件、獨(dú)立或可下載軟件對(duì)象等,它們使得應(yīng)用和服務(wù)能夠使用此處提供的技術(shù)。由此,此處的各實(shí)施例從API (或其他軟件對(duì)象)的觀點(diǎn)以及從實(shí)現(xiàn)如此處描述的一個(gè)或多個(gè)實(shí)施例的軟件或硬件對(duì)象構(gòu)想。由此,此處所述的各實(shí)施例可具有完全采用硬件、部分采用硬件并且部分采用軟件、以及采用軟件的方面。本文中所使用的詞語(yǔ)“示例性”意味著用作示例、實(shí)例、或說(shuō)明。為避免疑惑,本文所公開(kāi)的主題不限于這些示例。另外,在此所述的被描述為“示例性”的任意方面或設(shè)計(jì)并不一定要被解釋為相比其它方面或設(shè)計(jì)更優(yōu)選或有利。此外,在使用術(shù)語(yǔ)“包括”、“具有”、 “包含”和其他類似詞語(yǔ)的程度上,為避免疑惑,這些術(shù)語(yǔ)旨在以類似于術(shù)語(yǔ)“包括”作為開(kāi)放的過(guò)渡詞的方式是包含性的而不排除任何附加或其他元素。如所述的,此處所述的各種技術(shù)可結(jié)合硬件或軟件或,在適當(dāng)時(shí),以兩者的組合來(lái)實(shí)現(xiàn)。如此處所使用的,術(shù)語(yǔ)“組件”、“系統(tǒng)”等同樣旨在指計(jì)算機(jī)相關(guān)實(shí)體,或者是硬件、硬件和軟件的組合、軟件或者是執(zhí)行中的軟件。例如,組件可以是,但不限于是,在處理器上運(yùn)行的進(jìn)程、處理器、對(duì)象、可執(zhí)行碼、執(zhí)行的線程、程序和/或計(jì)算機(jī)。作為說(shuō)明,在計(jì)算機(jī)上運(yùn)行的應(yīng)用和計(jì)算機(jī)都可以是組件。一個(gè)或多個(gè)組件可以駐留在進(jìn)程和/或執(zhí)行線程中,并且組件可以位于一個(gè)計(jì)算機(jī)內(nèi)和/或分布在兩個(gè)或更多計(jì)算機(jī)之間。如前所述的系統(tǒng)已經(jīng)參考若干組件之間的交互來(lái)描述??梢岳斫?,這些系統(tǒng)和組件可包括組件或指定的子組件、某些指定的組件或子組件和/或附加的組件,并且根據(jù)上述內(nèi)容的各種置換和組合。子組件還可作為通信地耦合到其他組件的組件來(lái)實(shí)現(xiàn),而不是被包括在父組件內(nèi)(層次性)。另外,應(yīng)注意到一個(gè)或多個(gè)組件可被組合成提供聚集功能的單個(gè)組件,或被分成若干單獨(dú)的子組件,且諸如管理層等任何一個(gè)或多個(gè)中間層可被設(shè)置成通信耦合到這樣的子組件以便提供集成功能。此處所述的任何組件也可與一個(gè)或多個(gè)此處未專門描述的但本領(lǐng)域技術(shù)人員一般已知的其他組件進(jìn)行交互。鑒于以上所述的示例性系統(tǒng),參考各附圖的流程圖還可理解根據(jù)所述的主題實(shí)現(xiàn)的方法。盡管為了說(shuō)明簡(jiǎn)潔起見(jiàn),作為一系列框示出和描述的方法,但是應(yīng)當(dāng)理解,各實(shí)施例不僅僅限于框的次序,因?yàn)橐恍┛蚩梢耘c此處所描繪和描述的框不同的次序發(fā)生和/或與其他框并發(fā)地發(fā)生。盡管經(jīng)由流程圖示出了非順序或分支的流程,但可以理解,可實(shí)現(xiàn)達(dá)到相同或類似結(jié)果的各種其他分支、流程路徑和框的次序。此外,并非全部所示的框都是實(shí)現(xiàn)下面所述的方法所必需的。除了此處所描述的各實(shí)施例之外,可以理解,可以使用其他相似的實(shí)施例或者可對(duì)所述實(shí)施例作出修改和添加以便執(zhí)行對(duì)應(yīng)的實(shí)施例的相同或等效的功能而不背離這些實(shí)施例。此外,多個(gè)處理芯片或多個(gè)設(shè)備可共享此處所述的一個(gè)或多個(gè)功能的性能,并且類似地,存儲(chǔ)可跨多個(gè)設(shè)備實(shí)現(xiàn)。因此,本發(fā)明不應(yīng)限于任何單個(gè)實(shí)施例,而是應(yīng)當(dāng)根據(jù)所附權(quán)利要求書(shū)的廣度、精神和范圍來(lái)解釋。
權(quán)利要求
1.一種方法,包括 通過(guò)計(jì)算設(shè)備的腳本引擎接收(100)腳本代碼,由所述計(jì)算設(shè)備的瀏覽器應(yīng)用所接收的標(biāo)記文檔包括或引用所述腳本代碼;以及 確定(110)要應(yīng)用到由所述腳本引擎應(yīng)用到所述腳本代碼的多方面代碼準(zhǔn)備過(guò)程中的至少一個(gè)方面的努力等級(jí), 其中所述確定包括基于以下來(lái)確定所述努力等級(jí)基于所述瀏覽器應(yīng)用對(duì)所述腳本代碼的一部分的調(diào)用的預(yù)測(cè)或分析中的至少一個(gè),或基于在所述瀏覽器應(yīng)用對(duì)所述腳本代碼的至少所述部分的歷史使用中觀察到的模式。
2.如權(quán)利要求I所述的方法,其特征在于,所述確定(110)包括確定要應(yīng)用于解析所述腳本代碼的努力等級(jí)。
3.如權(quán)利要求I所述的方法,其特征在于,所述確定(110)包括確定要應(yīng)用于基于所述腳本代碼生成字節(jié)碼的努力等級(jí)。
4.如權(quán)利要求I所述的方法,其特征在于,所述確定(110)包括確定要應(yīng)用于解釋所述腳本代碼的努力等級(jí)。
5.如權(quán)利要求I所述的方法,其特征在于,所述確定(110)包括確定要應(yīng)用于優(yōu)化所述腳本代碼的存儲(chǔ)器使用的努力等級(jí)。
6.如權(quán)利要求I所述的方法,其特征在于,所述確定(110)包括確定要應(yīng)用于優(yōu)化所述腳本代碼的循環(huán)體的努力等級(jí)。
7.如權(quán)利要求I所述的方法,其特征在于,所述確定(110)包括確定要應(yīng)用于優(yōu)化所述腳本代碼的變量的類型的努力等級(jí)。
8.如權(quán)利要求I所述的方法,其特征在于,所述確定(110)包括確定要應(yīng)用于使用及時(shí)編譯器來(lái)優(yōu)化所述腳本代碼的努力等級(jí)。
9.一種包括計(jì)算機(jī)可讀指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀指令響應(yīng)于執(zhí)行致使包括至少兩個(gè)處理核的計(jì)算設(shè)備執(zhí)行操作,所述操作包括 通過(guò)所述至少兩個(gè)處理核中的第一處理核來(lái)處理(900)包括或引用腳本代碼的標(biāo)記文檔,包括通過(guò)所述第一處理核生成可執(zhí)行代碼,所述可執(zhí)行代碼使能由所述標(biāo)記文檔的所述腳本代碼所表示的功能; 基于所述腳本代碼的性質(zhì),通過(guò)所述至少兩個(gè)處理核中的第二處理核,選擇性地生成(910)不同于所述可執(zhí)行代碼的替代可執(zhí)行代碼;以及 用所述替代可執(zhí)行代碼取代(920)所述可執(zhí)行代碼,用于所述第一處理核對(duì)所述腳本代碼的進(jìn)一步執(zhí)行。
10.如權(quán)利要求9所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述生成(910)所述替代可執(zhí)行代碼包括,基于以下的至少一個(gè)來(lái)選擇性地生成所述替代可執(zhí)行代碼所述腳本的至少一個(gè)循環(huán)的大小與所述腳本代碼的總大小的比值的函數(shù)、所述腳本代碼的計(jì)算強(qiáng)度的測(cè)量、或?qū)谒瞿_本代碼構(gòu)造的調(diào)用樹(shù)的分析。
11.如權(quán)利要求9所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述取代(920)包括用所述替代可執(zhí)行代碼更換所述可執(zhí)行代碼而不干擾所述第一處理核對(duì)所述可執(zhí)行代碼的當(dāng) 前執(zhí)行。
12.如權(quán)利要求9所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述取代(920)包括換入所述替代可執(zhí)行代碼的地址以用于由所述第一處理核的進(jìn)一步執(zhí)行。
13.如權(quán)利要求9所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述生成(910)所述替代可執(zhí)行代碼包括基于分配給所述腳本代碼的優(yōu)先級(jí)來(lái)生成所述替代可執(zhí)行代碼,分配給所述腳本代碼的優(yōu)先級(jí)如在其中表示所述腳本代碼的一組優(yōu)先級(jí)工作隊(duì)列中所表示的。
14.如權(quán)利要求9所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述通過(guò)所述第二處理核生成(910)所述替代可執(zhí)行代碼包括生成為所述可執(zhí)行代碼的動(dòng)態(tài)變量的類型修改的代碼,所述類型能夠針對(duì)適用于所述可執(zhí)行代碼的的執(zhí)行的一組環(huán)境而推斷或觀察出來(lái)。
15.如權(quán)利要求9所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述操作還包括 由所述至少兩個(gè)處理核中的第三處理核,回收(930 ),用于不再用于所述標(biāo)記文檔的顯示的、與所述標(biāo)記文檔相關(guān)的對(duì)象的存儲(chǔ)器。
全文摘要
本發(fā)明涉及具有腳本代碼的標(biāo)記內(nèi)容的快速呈現(xiàn)。提供動(dòng)態(tài)代碼生成和協(xié)調(diào)技術(shù),用于顯示包括腳本代碼的動(dòng)態(tài)標(biāo)記文檔。一種代碼生成過(guò)程不僅被代碼生成階段和子階段的推遲來(lái)引導(dǎo),而且通過(guò)解釋或?qū)?zhí)行的觀察來(lái)被關(guān)于該代碼本身的所擁有的各個(gè)信息等級(jí)所通知,以便不僅生成經(jīng)修改的代碼,而且還為替代情形生成替代代碼(例如,生成不同的循環(huán)體,此后可取決于瀏覽器應(yīng)用所調(diào)用的給定函數(shù)來(lái)容易地?fù)Q入或換出所述不同的循環(huán)體)。通過(guò)為用戶體驗(yàn)來(lái)非對(duì)稱地確保區(qū)分網(wǎng)站呈現(xiàn)和功能的優(yōu)先級(jí),多核架構(gòu)進(jìn)一步改進(jìn)了用戶體驗(yàn)。
文檔編號(hào)G06F9/44GK102902528SQ20121031961
公開(kāi)日2013年1月30日 申請(qǐng)日期2012年8月31日 優(yōu)先權(quán)日2011年9月2日
發(fā)明者S·盧科, L·拉弗雷尼爾, C·C-C·曼, P·A·萊瑟斯 申請(qǐng)人:微軟公司