專(zhuān)利名稱(chēng):一種嵌入式瀏覽器引擎動(dòng)態(tài)編譯執(zhí)行方法
技術(shù)領(lǐng)域:
本發(fā)明屬于嵌入式瀏覽器技術(shù)領(lǐng)域,特別就一種嵌入式瀏覽器的JavaScript引擎動(dòng)態(tài)編譯及執(zhí)行JavaScript腳本的處理方法,采用該方法可有效提高JavaScript引擎動(dòng)態(tài)編譯與JavaScript腳本執(zhí)行的同步性和效率。
背景技術(shù):
瀏覽器是一種基于超文本傳輸協(xié)議的客戶(hù)端軟件,它的主要功能是從網(wǎng)絡(luò)服務(wù)器下載網(wǎng)頁(yè)文檔、圖片、層疊樣式表等網(wǎng)頁(yè)元素,影響瀏覽器性能的因素有很多,腳本引擎的性能是決定瀏覽器性能的關(guān)鍵因素之一。瀏覽器的性能競(jìng)爭(zhēng)在某種意義上說(shuō),就是腳本引擎的性能之爭(zhēng)。腳本引擎主要需要處理的事務(wù)就是解析動(dòng)態(tài)網(wǎng)頁(yè)、處理相關(guān)的客戶(hù)端Web應(yīng)用程序。這些應(yīng)用常用的腳本語(yǔ)言是JavaScript語(yǔ)言JavaScript語(yǔ)言因?yàn)槠涮赜械?基于對(duì)象性、事件驅(qū)動(dòng)性、安全性,得到廣泛的應(yīng)用。由于JavaScript語(yǔ)言本身是解釋性語(yǔ)言,所以JavaScript引擎執(zhí)行腳本的方式主要有解釋執(zhí)行方式、JIT (即時(shí)編譯器)即時(shí)編譯方式、動(dòng)態(tài)編譯方式。解釋執(zhí)行方式的優(yōu)點(diǎn)是進(jìn)行腳本執(zhí)行的延遲短,缺點(diǎn)是執(zhí)行反復(fù)執(zhí)行的循環(huán)腳本時(shí)效率低(解釋一句后、執(zhí)行一句,因源程序中出現(xiàn)循環(huán)、解釋程序也得重復(fù)地解釋后并運(yùn)行這一組語(yǔ)句,運(yùn)行速度很慢),應(yīng)對(duì)復(fù)雜的腳本操作時(shí)就顯得力不從心JIT即時(shí)編譯方式將整體的腳本編譯成目標(biāo)碼再執(zhí)行,相對(duì)解釋執(zhí)行方式其效率有極大的提高,但是JIT即時(shí)編譯方式是對(duì)整體腳本進(jìn)行編譯后再執(zhí)行,因而前后編譯的間隔時(shí)間長(zhǎng)、從而造成較長(zhǎng)的延遲,為了降低這種延遲、提高運(yùn)行效率,在編譯產(chǎn)生目標(biāo)碼時(shí)不能進(jìn)行充分的編譯優(yōu)化處理;動(dòng)態(tài)編譯方式是在JIT即時(shí)編譯方式的基礎(chǔ)上,研究影響腳本執(zhí)行效率的關(guān)鍵區(qū)域,并只針對(duì)這些關(guān)鍵區(qū)域進(jìn)行JIT即時(shí)編譯(選擇性即時(shí)編譯),這種方式較合理地使用了 JIT (即時(shí)編譯器),而且相對(duì)傳統(tǒng)的JIT即時(shí)編譯,其編譯更靈活、延遲也較短,但該動(dòng)態(tài)編譯方式在執(zhí)行之前需將JavaScript腳本全部翻譯成中間碼、然后在中間碼執(zhí)行之前和執(zhí)行過(guò)程中進(jìn)行關(guān)鍵區(qū)域探測(cè),導(dǎo)致其關(guān)鍵區(qū)域探測(cè)時(shí)機(jī)不當(dāng),對(duì)關(guān)鍵區(qū)域的編譯滯后性較長(zhǎng);同時(shí),掃描和記錄循環(huán)代碼需耗費(fèi)大量時(shí)間,進(jìn)而影響JavaScript腳本的執(zhí)行的即時(shí)性、效率和用戶(hù)使用效果。
發(fā)明內(nèi)容
本發(fā)明的目的是針對(duì)背景技術(shù)存在的缺陷,提出一種嵌入式瀏覽器引擎動(dòng)態(tài)編譯執(zhí)行方法;以進(jìn)一步縮短動(dòng)態(tài)編譯與執(zhí)行之間的延遲時(shí)間、有效提高嵌入式瀏覽器JavaScript引擎動(dòng)態(tài)編譯與JavaScript腳本運(yùn)行的同步性和效率,達(dá)到快速執(zhí)行Javascript腳本,更新網(wǎng)頁(yè)Javascript腳本所顯示的信息及時(shí),以及有效改善用戶(hù)的使用效果等目的。從而克服背景技術(shù)嵌入式瀏覽器JavaScript引擎動(dòng)態(tài)編譯存在的當(dāng)前網(wǎng)頁(yè)頁(yè)面JavaScript腳本執(zhí)行的即時(shí)性和效率差,延遲性仍較長(zhǎng),用戶(hù)使用效果差等缺陷。本發(fā)明的解決方案是在背景技術(shù)嵌入式瀏覽器的JavaScript引擎中采用動(dòng)態(tài)編譯的基礎(chǔ)上,將掃描(探測(cè))熱點(diǎn)的時(shí)機(jī)提前到引擎將抽象語(yǔ)法樹(shù)轉(zhuǎn)換為字節(jié)碼的過(guò)程中,這樣讓引擎對(duì)熱點(diǎn)的處理更早、更充分,也避免了熱點(diǎn)的中間碼的產(chǎn)生,而將熱點(diǎn)直接編譯成目標(biāo)碼、節(jié)約了引擎處理時(shí)間;并充分結(jié)合解釋執(zhí)行和JIT執(zhí)行的優(yōu)點(diǎn),即通過(guò)將普通節(jié)點(diǎn)編譯成字節(jié)碼、熱點(diǎn)(循環(huán)結(jié)構(gòu))編譯成目標(biāo)碼,引擎則對(duì)前者使用解釋執(zhí)行、以提高腳本執(zhí)行的響應(yīng)速度,引擎對(duì)后者通過(guò)跳轉(zhuǎn)標(biāo)記找到對(duì)應(yīng)的目標(biāo)碼、以有效提高熱點(diǎn)執(zhí)行的效率;同時(shí)在引擎的解釋執(zhí)行過(guò)程中進(jìn)一步探測(cè)循環(huán)結(jié)構(gòu)以外的熱點(diǎn)區(qū)域,并將其編譯成目標(biāo)碼,以提高熱點(diǎn)區(qū)域的執(zhí)行效率;此外,將背景技術(shù)所采用的連續(xù)存儲(chǔ)(整體)式大緩沖區(qū),改為采用多個(gè)小緩沖區(qū)組合成邏輯大緩存區(qū)、以實(shí)現(xiàn)快速的跳轉(zhuǎn)連接和目標(biāo)碼的存儲(chǔ),避免大量數(shù)據(jù)拷貝所帶來(lái)的開(kāi)銷(xiāo);本發(fā)明即以此實(shí)現(xiàn)其發(fā)明目的。因此,本發(fā)明方法包括A.組合式緩沖區(qū)的建立及其擴(kuò)展采用小緩沖區(qū)的方式存儲(chǔ)目標(biāo)碼和字節(jié)碼,使用組合式緩沖區(qū)的管理機(jī)制通過(guò)跳轉(zhuǎn)連接的方式將各小緩沖區(qū)組合形成一個(gè)具有邏輯關(guān)系的大緩沖區(qū);在擴(kuò)展緩沖區(qū)時(shí)只需在已有的小緩沖區(qū)基礎(chǔ)上增加一個(gè)或多個(gè)相應(yīng)的小緩 沖區(qū)即可;B.腳本熱點(diǎn)及編譯抽象語(yǔ)法樹(shù),掃描抽象語(yǔ)法樹(shù)及字節(jié)碼、目標(biāo)碼的編譯B1.編譯抽象語(yǔ)法樹(shù)及熱點(diǎn)的確定在引擎按背景技術(shù)(背景技術(shù)常規(guī)方法)將JavaScript腳本編譯成抽象語(yǔ)法樹(shù)后,將抽象語(yǔ)法樹(shù)中的循環(huán)結(jié)構(gòu)抽象語(yǔ)法子樹(shù)作為熱點(diǎn),轉(zhuǎn)步驟B2 ;B2.掃描抽象語(yǔ)法樹(shù)在抽象語(yǔ)法樹(shù)編譯成字節(jié)碼的過(guò)程中、即對(duì)抽象語(yǔ)法樹(shù)的節(jié)點(diǎn)依次進(jìn)行掃描,以確定其為普通節(jié)點(diǎn)還是熱點(diǎn),每當(dāng)掃描完一個(gè)節(jié)點(diǎn)后即轉(zhuǎn)步驟A3,直至掃描完畢;B3.字節(jié)碼、目標(biāo)碼的編譯對(duì)步驟B2掃描抽象語(yǔ)法樹(shù)時(shí)確定的普通節(jié)點(diǎn)編譯成字節(jié)碼或字節(jié)碼流、而掃描時(shí)確定的熱點(diǎn)則直接編譯成目標(biāo)碼,與此同時(shí)在字節(jié)碼或字節(jié)碼流與編譯成的目標(biāo)碼間插入跳轉(zhuǎn)標(biāo)記,然后將其結(jié)果存放到緩沖區(qū)內(nèi);C.腳本執(zhí)行及熱點(diǎn)區(qū)域的確定、編譯C1.腳本執(zhí)行及熱點(diǎn)區(qū)域的確定對(duì)步驟B編譯成并存入步驟A中的字節(jié)碼進(jìn)行執(zhí)行區(qū)域的初始化標(biāo)記和執(zhí)行,執(zhí)行過(guò)程中判斷字節(jié)碼是否是跳轉(zhuǎn)標(biāo)記,如果不是跳轉(zhuǎn)標(biāo)記直接解釋執(zhí)行,如果是跳轉(zhuǎn)標(biāo)記則獲取與該跳轉(zhuǎn)標(biāo)記對(duì)應(yīng)的目標(biāo)碼后、執(zhí)行,在解釋執(zhí)行過(guò)程中對(duì)每次執(zhí)行的字節(jié)碼段進(jìn)行區(qū)域標(biāo)記,將執(zhí)行過(guò)程中被反復(fù)執(zhí)行2次以上的區(qū)域作為熱點(diǎn)區(qū)域、轉(zhuǎn)步驟C2,其它的區(qū)域作為非熱點(diǎn)區(qū)域;直至腳本執(zhí)行完畢;C2.熱點(diǎn)區(qū)域的編譯首先判斷組成熱點(diǎn)區(qū)域的字節(jié)碼是否含跳轉(zhuǎn)標(biāo)記,若步驟C1探測(cè)出的是由不含跳轉(zhuǎn)標(biāo)記的字節(jié)碼組成的熱點(diǎn)區(qū)域、則直接將字節(jié)碼編譯成目標(biāo)碼,若步驟C1探測(cè)出的是由含跳轉(zhuǎn)標(biāo)記的字節(jié)碼形成的混合式熱點(diǎn)區(qū)域、則將其聯(lián)合編譯成目標(biāo)碼;同時(shí)將探測(cè)出的各熱點(diǎn)區(qū)域?qū)?yīng)的字節(jié)碼或含跳轉(zhuǎn)標(biāo)記的字節(jié)碼修改為新的跳轉(zhuǎn)標(biāo)記,轉(zhuǎn)步驟Cp在步驟A中所述小緩沖區(qū)包括目標(biāo)碼緩沖區(qū)和字節(jié)碼緩沖區(qū)。而在步驟C2中所述對(duì)含跳轉(zhuǎn)標(biāo)記的字節(jié)碼形成的混合區(qū)域、經(jīng)聯(lián)合編譯成目標(biāo)碼,其聯(lián)合編譯的方法是在引擎將字節(jié)碼編譯成目標(biāo)碼的過(guò)程中,一旦發(fā)現(xiàn)跳轉(zhuǎn)標(biāo)記即將該跳轉(zhuǎn)標(biāo)記對(duì)應(yīng)的目標(biāo)碼連接到當(dāng)前目標(biāo)碼之后,再繼續(xù)聯(lián)合編譯的過(guò)程。本發(fā)明由于在嵌入式瀏覽器的JavaScript引擎中采用了動(dòng)態(tài)編譯方式、將掃描(探測(cè))熱點(diǎn)的時(shí)機(jī)提前到引擎將抽象語(yǔ)法樹(shù)轉(zhuǎn)換為字節(jié)碼的過(guò)程中,讓引擎對(duì)熱點(diǎn)的處理更早、更充分,也省略了熱點(diǎn)的中間碼的產(chǎn)生、將熱點(diǎn)直接編譯成目標(biāo)碼,節(jié)約了引擎處理時(shí)間;同時(shí)充分結(jié)合了解釋執(zhí)行響應(yīng)速度快和JIT執(zhí)行效率高的優(yōu)點(diǎn),并在引擎的解釋執(zhí)行過(guò)程中進(jìn)一步探測(cè)循環(huán)結(jié)構(gòu)以外的熱點(diǎn),既提高了腳本執(zhí)行的響應(yīng)速度、又有效提高了熱點(diǎn)及熱點(diǎn)區(qū)域的執(zhí)行效率;本發(fā)明同時(shí)采用小緩沖區(qū)組合形成一個(gè)具有邏輯關(guān)系的大緩沖區(qū)、代替背景技術(shù)所采用的連續(xù)存儲(chǔ)(整體)式大緩沖區(qū),既方便緩沖區(qū)的容量擴(kuò)展、又避免了采用連續(xù)存儲(chǔ)方式的大緩沖區(qū)所必須進(jìn)行的大量數(shù)據(jù)拷貝帶來(lái)的開(kāi)銷(xiāo)。因而,本發(fā)明具有可有效提高嵌入式瀏覽器JavaScript引擎動(dòng)態(tài)編譯與JavaScript腳本運(yùn)行的同步性和效率,縮短了動(dòng)態(tài)編譯與執(zhí)行之間的延遲時(shí)間、執(zhí)行Javascript腳本快速,更新網(wǎng)頁(yè)Javascript腳本所顯示的信息及時(shí)、并有效改善了用戶(hù)的使用效果等特點(diǎn)。
圖I為本發(fā)明具體實(shí)施方式
流程示意圖。
具體實(shí)施方式
本實(shí)施方式以數(shù)字電視機(jī)頂盒處理腳本代碼為例該例腳本代碼包含了循環(huán)結(jié)構(gòu)、腳本中還包含事件響應(yīng)處理,用戶(hù)會(huì)不斷觸發(fā)該事件響應(yīng)?,F(xiàn)在將根據(jù)嵌入式瀏覽器Javascript弓丨擎對(duì)該實(shí)例的處理來(lái)具體闡述本發(fā)明的處理方法。附圖I即為本實(shí)施方式流程示意圖,引擎的動(dòng)態(tài)編譯執(zhí)行方法如下步驟A :首先建立用于對(duì)字節(jié)碼和目標(biāo)碼存取的小緩沖區(qū)、即字節(jié)碼緩沖區(qū)和目標(biāo)碼緩沖區(qū),用于分別保存和調(diào)用字節(jié)碼、目標(biāo)碼,并通過(guò)邏輯緩沖區(qū)的管理機(jī)制實(shí)現(xiàn)對(duì)各小緩沖區(qū)目標(biāo)碼跳轉(zhuǎn)連接的管理;步驟BI :JavaScript腳本進(jìn)入JavaScript引擎經(jīng)過(guò)語(yǔ)法語(yǔ)義和詞法分析,編譯成抽象語(yǔ)法樹(shù),并將抽象語(yǔ)法樹(shù)中的循環(huán)結(jié)構(gòu)抽象語(yǔ)法子樹(shù)標(biāo)記為熱點(diǎn),然后轉(zhuǎn)步驟By1 ;步驟Bp1 :掃描抽象語(yǔ)法樹(shù),判斷當(dāng)前掃描的節(jié)點(diǎn)是否為熱點(diǎn),如果是,則轉(zhuǎn)步驟B3_2,否則轉(zhuǎn)步驟Bp1 ;步驟Bp1 :將編譯當(dāng)前節(jié)點(diǎn)的字節(jié)碼或字節(jié)碼流并存儲(chǔ)字節(jié)碼或字節(jié)碼流后、轉(zhuǎn)步驟民_2;步驟B2_2 :判斷抽象語(yǔ)法樹(shù)是否掃描完畢,如果掃描完畢、轉(zhuǎn)步驟Cm,否則轉(zhuǎn)步驟
B2-I ;步驟B3_2 :將熱點(diǎn)編譯成目標(biāo)碼并存儲(chǔ)該目標(biāo)碼,同時(shí)轉(zhuǎn)步驟B3_3 ;步驟B3_3 :在步驟A中已經(jīng)保存的字節(jié)碼序列之后添加指向熱點(diǎn)目標(biāo)碼的跳轉(zhuǎn)標(biāo)記后,轉(zhuǎn)步驟B2_2 ;步驟B2_2 :判斷抽象語(yǔ)法樹(shù)是否掃描完畢,如果掃描完畢、轉(zhuǎn)步驟Cm,否則轉(zhuǎn)步驟
B2-I ;步驟Cm :提取步驟A中保存的字節(jié)碼序列中的一個(gè)字節(jié)碼,若該字節(jié)碼對(duì)應(yīng)的區(qū)域未被標(biāo)記、則將其區(qū)域標(biāo)記初始化為0次,轉(zhuǎn)步驟(V2 ;步驟Cu :判斷當(dāng)前字節(jié)碼是否為跳轉(zhuǎn)標(biāo)記,如果是、轉(zhuǎn)步驟Cu,否則轉(zhuǎn)步驟Cy ;步驟Cu :根據(jù)跳轉(zhuǎn)標(biāo)記提取步驟A中保存的目標(biāo)碼并執(zhí)行,執(zhí)行結(jié)束后轉(zhuǎn)步驟
C1-B =
步驟Cu :對(duì)字節(jié)碼進(jìn)行解釋執(zhí)行,同時(shí)將該字節(jié)碼對(duì)應(yīng)的區(qū)域標(biāo)記原基礎(chǔ)上加I,執(zhí)行完后轉(zhuǎn)步驟Cu ;步驟CV5 :判斷當(dāng)前字節(jié)碼區(qū)域是否被執(zhí)行2次以上(即區(qū)域標(biāo)記大于等于2),如果是、轉(zhuǎn)步驟c2_i,否則轉(zhuǎn)步驟CV6 ;步驟Cu :判斷字節(jié)碼執(zhí)行是否完成,如果完成、轉(zhuǎn)步驟CV7結(jié)束,否則轉(zhuǎn)步驟CV1 ;步驟Cp1 :判斷熱點(diǎn)區(qū)域中的字節(jié)碼是否含有跳轉(zhuǎn)標(biāo)記,如果含有、轉(zhuǎn)步驟C2_3,否則轉(zhuǎn)步驟c2_2 ;步驟C2_2 :將當(dāng)前熱點(diǎn)區(qū)域字節(jié)碼編譯成目標(biāo)碼,并存儲(chǔ)該目標(biāo)碼、同時(shí)轉(zhuǎn)步驟
C2_4 ;步驟C2_3 :將當(dāng)前含有跳轉(zhuǎn)標(biāo)記的熱點(diǎn)區(qū)域中的字節(jié)碼部分編譯成目標(biāo)碼,并與熱 點(diǎn)區(qū)域中跳轉(zhuǎn)標(biāo)記對(duì)應(yīng)的目標(biāo)碼連接,并轉(zhuǎn)步驟c2_4 ;步驟C2_4 :將當(dāng)前熱點(diǎn)區(qū)域中的字節(jié)碼或含跳轉(zhuǎn)標(biāo)記的字節(jié)碼改為新的跳轉(zhuǎn)標(biāo)記,轉(zhuǎn)步驟Cu判斷字節(jié)碼執(zhí)行是否完成,如果完成,轉(zhuǎn)步驟C1T否則轉(zhuǎn)步驟CV1 ;步驟Cw :腳本執(zhí)行完畢。
權(quán)利要求
1.一種嵌入式瀏覽器引擎動(dòng)態(tài)編譯執(zhí)行方法,包括 A.組合式緩沖區(qū)的建立及其擴(kuò)展采用小緩沖區(qū)的方式存儲(chǔ)目標(biāo)碼和字節(jié)碼,使用組合式緩沖區(qū)的管理機(jī)制通過(guò)跳轉(zhuǎn)連接的方式將各小緩沖區(qū)組合形成一個(gè)具有邏輯關(guān)系的大緩沖區(qū);在擴(kuò)展緩沖區(qū)時(shí)只需在已有的小緩沖區(qū)基礎(chǔ)上增加一個(gè)或多個(gè)相應(yīng)的小緩沖區(qū); B.腳本熱點(diǎn)及編譯抽象語(yǔ)法樹(shù),掃描抽象語(yǔ)法樹(shù)及字節(jié)碼、目標(biāo)碼的編譯 B1.編譯抽象語(yǔ)法樹(shù)及熱點(diǎn)的確定在引擎按背景技術(shù)將JavaScript腳本編譯成抽象語(yǔ)法樹(shù)后,將抽象語(yǔ)法樹(shù)中的循環(huán)結(jié)構(gòu)抽象語(yǔ)法子樹(shù)作為熱點(diǎn),轉(zhuǎn)步驟B2 ; B2.掃描抽象語(yǔ)法樹(shù)在抽象語(yǔ)法樹(shù)編譯成字節(jié)碼的過(guò)程中、即對(duì)抽象語(yǔ)法樹(shù)的節(jié)點(diǎn)依次進(jìn)行掃描,以確定其為普通節(jié)點(diǎn)還是熱點(diǎn),每當(dāng)掃描完一個(gè)節(jié)點(diǎn)后即轉(zhuǎn)步驟A3,直至掃描 完畢; B3.字節(jié)碼、目標(biāo)碼的編譯對(duì)步驟B2掃描抽象語(yǔ)法樹(shù)時(shí)確定的普通節(jié)點(diǎn)編譯成字節(jié)碼或字節(jié)碼流、而掃描時(shí)確定的熱點(diǎn)則直接編譯成目標(biāo)碼,與此同時(shí)在字節(jié)碼或字節(jié)碼流與編譯成的目標(biāo)碼間插入跳轉(zhuǎn)標(biāo)記,然后將其結(jié)果存放到緩沖區(qū)內(nèi); C.腳本執(zhí)行及熱點(diǎn)區(qū)域的確定、編譯 C1.腳本執(zhí)行及熱點(diǎn)區(qū)域的確定對(duì)步驟B編譯成并存入步驟A中的字節(jié)碼進(jìn)行執(zhí)行區(qū)域的初始化標(biāo)記和執(zhí)行,執(zhí)行過(guò)程中判斷字節(jié)碼是否是跳轉(zhuǎn)標(biāo)記,如果不是跳轉(zhuǎn)標(biāo)記直接解釋執(zhí)行,如果是跳轉(zhuǎn)標(biāo)記則獲取與該跳轉(zhuǎn)標(biāo)記對(duì)應(yīng)的目標(biāo)碼后、執(zhí)行,在解釋執(zhí)行過(guò)程中對(duì)每次執(zhí)行的字節(jié)碼段進(jìn)行區(qū)域標(biāo)記,將執(zhí)行過(guò)程中被反復(fù)執(zhí)行2次以上的區(qū)域作為熱點(diǎn)區(qū)域、轉(zhuǎn)步驟C2,其它的區(qū)域作為非熱點(diǎn)區(qū)域;直至腳本執(zhí)行完畢; C2.熱點(diǎn)區(qū)域的編譯首先判斷組成熱點(diǎn)區(qū)域的字節(jié)碼是否含跳轉(zhuǎn)標(biāo)記,若步驟C1探測(cè)出的是由不含跳轉(zhuǎn)標(biāo)記的字節(jié)碼組成的熱點(diǎn)區(qū)域、則直接將字節(jié)碼編譯成目標(biāo)碼,若步驟C1探測(cè)出的是由含跳轉(zhuǎn)標(biāo)記的字節(jié)碼形成的混合式熱點(diǎn)區(qū)域、則將其聯(lián)合編譯成目標(biāo)碼;同時(shí)將探測(cè)出的各熱點(diǎn)區(qū)域?qū)?yīng)的字節(jié)碼或含跳轉(zhuǎn)標(biāo)記的字節(jié)碼修改為新的跳轉(zhuǎn)標(biāo)記,轉(zhuǎn)步驟Cf
2.按權(quán)利要求I所述嵌入式瀏覽器引擎動(dòng)態(tài)編譯執(zhí)行方法,其特征在于步驟A中所述小緩沖區(qū)包括目標(biāo)碼緩沖區(qū)和字節(jié)碼緩沖區(qū)。
3.按權(quán)利要求I所述嵌入式瀏覽器引擎動(dòng)態(tài)編譯執(zhí)行方法,其特征在于在步驟C2中所述對(duì)含跳轉(zhuǎn)標(biāo)記的字節(jié)碼形成的混合區(qū)域、經(jīng)聯(lián)合編譯成目標(biāo)碼,其聯(lián)合編譯的方法是在引擎將字節(jié)碼編譯成目標(biāo)碼的過(guò)程中,一旦發(fā)現(xiàn)跳轉(zhuǎn)標(biāo)記即將該跳轉(zhuǎn)標(biāo)記對(duì)應(yīng)的目標(biāo)碼連接到當(dāng)前目標(biāo)碼之后,再繼續(xù)聯(lián)合編譯的過(guò)程。
全文摘要
該發(fā)明屬于嵌入式瀏覽器的JavaScript引擎動(dòng)態(tài)編譯及執(zhí)行方法,包括組合式緩沖區(qū)的建立及其擴(kuò)展,腳本熱點(diǎn)及編譯抽象語(yǔ)法樹(shù),掃描抽象語(yǔ)法樹(shù)及字節(jié)碼、目標(biāo)碼的編譯,腳本執(zhí)行及熱點(diǎn)區(qū)域的確定、編譯。該發(fā)明在嵌入式瀏覽器的JavaScript引擎中采用動(dòng)態(tài)編譯方式將掃描熱點(diǎn)提前到將抽象語(yǔ)法樹(shù)轉(zhuǎn)換為字節(jié)碼的過(guò)程中,并充分結(jié)合解釋執(zhí)行響應(yīng)速度快和JIT執(zhí)行效率高的優(yōu)點(diǎn),在解釋執(zhí)行過(guò)程中進(jìn)一步探測(cè)循環(huán)結(jié)構(gòu)以外的熱點(diǎn)。因而具有可有效提高嵌入式瀏覽器JavaScript引擎動(dòng)態(tài)編譯與JavaScript腳本運(yùn)行的同步性和效率,縮短了動(dòng)態(tài)編譯與執(zhí)行之間的延遲時(shí)間、執(zhí)行Javascript腳本快速,更新網(wǎng)頁(yè)所顯示的信息及時(shí)、并有效改善了用戶(hù)的使用效果等特點(diǎn)。
文檔編號(hào)G06F9/45GK102736943SQ20121019199
公開(kāi)日2012年10月17日 申請(qǐng)日期2012年6月12日 優(yōu)先權(quán)日2012年6月12日
發(fā)明者余啟洋, 桑楠, 郭小福, 郭文生 申請(qǐng)人:電子科技大學(xué)