混合式動(dòng)態(tài)碼編譯裝置、方法及其服務(wù)系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明提供一種動(dòng)態(tài)碼編譯裝置,且特別是一種混合式動(dòng)態(tài)碼編譯裝置、方法及其服務(wù)系統(tǒng)。
【背景技術(shù)】
[0002]目前網(wǎng)絡(luò)與電子技術(shù)發(fā)展快速,以致于人們可以輕易地使用終端裝置瀏覽網(wǎng)頁,以獲得需要的服務(wù)與信息。網(wǎng)頁的內(nèi)容可以通過文件標(biāo)示語言(Text Markup Language)來編輯,且文件標(biāo)示語言還可以是超文件標(biāo)示語言(Hyper Text Markup Language, HTML),以呈現(xiàn)結(jié)構(gòu)化的信息(例如,標(biāo)題、段落和列表等)。
[0003]然而,文件標(biāo)示語言一般適用于編輯靜態(tài)或非互動(dòng)的網(wǎng)頁,而不易或無法編輯動(dòng)態(tài)或互動(dòng)的網(wǎng)頁,因此,便有動(dòng)態(tài)直譯式程序語言被提出,例如JavaScript。JavaScript是一種動(dòng)態(tài)型別、弱型別、基于原型的語言,且內(nèi)建支持型別。JavaScript可以直接嵌入HTML頁面,也可以寫成單獨(dú)的檔案(其擴(kuò)展名為“js”)以利于結(jié)構(gòu)和行為的分離。JavaScript可以用來將動(dòng)態(tài)文字嵌入于HTML頁面、對瀏覽器事件作出響應(yīng)、讀寫HTML網(wǎng)頁中的元素、在數(shù)據(jù)被送出到服務(wù)器之前驗(yàn)證數(shù)據(jù)、檢測訪客的瀏覽器信息或控制小型文本文件(cookies)。
[0004]目前,Mozilla公司提出了一種JavaScript的最佳化方案,其通過定義好的“ASM.js”檔案的內(nèi)容來比對收到的JavaScript碼,以將收到的JavaScript碼通過底層虛擬機(jī)器(Low Level Virtual Machine,LLVM)進(jìn)行轉(zhuǎn)碼為C/C++語言碼,以利于終端裝置(例如,1S、Windows或Android系統(tǒng)的電子裝置)執(zhí)行所述C/C++語言碼,從而顯示動(dòng)態(tài)或互動(dòng)的網(wǎng)頁。然而,若收到的JavaScript碼不存在于“ASM.js”檔案中的碼庫(codebase),貝U所接收到的JavaScript碼將無法被轉(zhuǎn)碼,因此,Mozilla公司的方案仍缺乏彈性。
[0005]除此之外,Google公司提供了一種JavaScript引擎,稱為V8引擎。V8引擎可以在JavaScript執(zhí)行之前,將JavaScript編譯成機(jī)器碼,而非位元組或是進(jìn)行直譯,以此提升效能,但仍不能避免加載的時(shí)間消耗。另外,JavaScript碼本身無法控制內(nèi)存的釋放,而可能導(dǎo)致內(nèi)存泄漏(memory leak)。因此,V8引擎被設(shè)計(jì)成具有垃圾回收(GarbageCollect1n, GC)處理的功能。
[0006]垃圾回收處理是一種自動(dòng)的內(nèi)存管理機(jī)制,當(dāng)一個(gè)電腦上的動(dòng)態(tài)內(nèi)存上的變數(shù)、物件或字串等數(shù)據(jù)不再被需要時(shí),就應(yīng)該予以釋放,以讓出內(nèi)存空間。垃圾回收處理策略可以分為全域停止型(Stop-the-World, STW)、同步型(concurrent)與增進(jìn)型(incremental).全域停止型垃圾回收處理策略在系統(tǒng)認(rèn)為需要進(jìn)行垃圾回收處理時(shí),將目前執(zhí)行的程序停止,并進(jìn)行垃圾回收處理。同步型垃圾回收處理策略在程序執(zhí)行時(shí)同時(shí)進(jìn)行垃圾回收處理,而沒有停止程序的問題,但相對地,其僅能進(jìn)行簡單的垃圾回收處理,故整體效率不佳。增進(jìn)型的垃圾回收處理策略采用了上述全域停止型與同步型的垃圾回收處理策略,并做出了取舍,其在平時(shí)類似同步型垃圾回收處理策略,僅簡單的垃圾回收處理,但在系統(tǒng)認(rèn)為需要時(shí),停止程序執(zhí)行,并以全域停止型垃圾回收處理策略進(jìn)行全整的垃圾回收處理。
[0007]由上述可知,全域停止型與增進(jìn)型的垃圾回收處理策略不受外部控制,而同步型的垃圾回收處理策略則導(dǎo)致整體效率不佳。目前V8引擎雖采用了增進(jìn)型的垃圾回收處理策略降低停止程序執(zhí)行的沖擊,但其在執(zhí)行全域停止型的垃圾回收時(shí),仍不受外部控制,故仍會造成程序于不可預(yù)期的時(shí)點(diǎn)停止執(zhí)行,并造成使用者經(jīng)驗(yàn)不佳。
【發(fā)明內(nèi)容】
[0008]本發(fā)明實(shí)施例提供一種混合式動(dòng)態(tài)碼編譯裝置,所述混合式動(dòng)態(tài)碼編譯裝置包括語法解析器(parser)、靜態(tài)碼(native code)產(chǎn)生器與動(dòng)態(tài)碼改寫器(rewriter),其中所述語法解析器耦接所述靜態(tài)碼產(chǎn)生器與所述動(dòng)態(tài)碼改寫器。語法解析器用以接收第一動(dòng)態(tài)碼,對所述第一動(dòng)態(tài)碼進(jìn)行語法解析,以將所述第一動(dòng)態(tài)碼分為多個(gè)能編譯的區(qū)塊與多個(gè)不能編譯的區(qū)塊。靜態(tài)碼產(chǎn)生器將所述能編譯的區(qū)塊轉(zhuǎn)碼為靜態(tài)碼。動(dòng)態(tài)碼改寫器用以對所述不能編譯的區(qū)塊進(jìn)行改寫,以產(chǎn)生第二動(dòng)態(tài)碼,其中第二動(dòng)態(tài)碼具有所述第一動(dòng)態(tài)碼與所述靜態(tài)碼之間進(jìn)行溝通的多個(gè)功能傳呼(funct1n call)。
[0009]本發(fā)明實(shí)施例另提供一種混合式動(dòng)態(tài)碼編譯裝置方法,所述混合式動(dòng)態(tài)碼編譯裝置方法具有以下步驟。步驟A:接收第一動(dòng)態(tài)碼,對所述第一動(dòng)態(tài)碼進(jìn)行語法解析,以將所述第一動(dòng)態(tài)碼分為多個(gè)能編譯的區(qū)塊與多個(gè)不能編譯的區(qū)塊。步驟B:將所述能編譯的區(qū)塊轉(zhuǎn)碼為靜態(tài)碼。步驟C:對所述不能編譯的區(qū)塊進(jìn)行改寫,以產(chǎn)生第二動(dòng)態(tài)碼,其中第二動(dòng)態(tài)碼具有所述第一動(dòng)態(tài)碼與所述靜態(tài)碼之間進(jìn)行溝通的多個(gè)功能傳呼。
[0010]本發(fā)明實(shí)施例還提供一種服務(wù)系統(tǒng),所述服務(wù)系統(tǒng)包括計(jì)算機(jī)裝置、服務(wù)器與終端裝置,其中所述服務(wù)器連接于所述計(jì)算機(jī)裝置,且所述終端裝置連接于所述服務(wù)器。其中所述計(jì)算機(jī)裝置、所述服務(wù)器與所述終端裝置的其中一者或其組合用以執(zhí)行上述混合式動(dòng)態(tài)碼編譯裝置方法。
[0011]綜合以上所述,本發(fā)明實(shí)施例所提供的混合式動(dòng)態(tài)碼編譯裝置、方法及其服務(wù)系統(tǒng)有效地提升終端裝置處理動(dòng)態(tài)碼的效率。
[0012]為使能更進(jìn)一步了解本發(fā)明的特征及技術(shù)內(nèi)容,請參閱以下有關(guān)本發(fā)明的詳細(xì)說明與附圖,但是此等說明與所附圖式僅是用來說明本發(fā)明,而非對本發(fā)明的權(quán)利要求范圍作任何的限制。
【附圖說明】
[0013]圖1是本發(fā)明實(shí)施例的混合式動(dòng)態(tài)碼編譯裝置的方塊圖。
[0014]圖2A是本發(fā)明實(shí)施例的服務(wù)系統(tǒng)的示意圖。
[0015]圖2B是本發(fā)明另一實(shí)施例的服務(wù)系統(tǒng)的示意圖。
[0016]圖2C是本發(fā)明另一實(shí)施例的服務(wù)系統(tǒng)的示意圖。
[0017]圖3是本發(fā)明實(shí)施例的混合式動(dòng)態(tài)碼編譯方法的流程圖。
[0018]圖4是本發(fā)明實(shí)施例的混合式動(dòng)態(tài)碼編譯方法中垃圾回收處理的流程圖。
[0019]【符號說明】
[0020]1:混合式動(dòng)態(tài)碼編譯裝置
[0021]11:語法解析器
[0022]12:輔助分析器
[0023]13:優(yōu)化器
[0024]14:靜態(tài)碼產(chǎn)生器
[0025]15:動(dòng)態(tài)碼改寫器
[0026]2、2’、2”:服務(wù)系統(tǒng)
[0027]20:網(wǎng)頁開發(fā)者
[0028]21、21’:計(jì)算機(jī)裝置
[0029]22、22’:服務(wù)器
[0030]23:因特網(wǎng)
[0031]24a ?24e、24a’ ?24e’:終端裝置
[0032]S31 ?S36、S41 ?S43:步驟流程
【具體實(shí)施方式】
[0033]本發(fā)明實(shí)施例提供一種混合式動(dòng)態(tài)碼編譯裝置及方法,所述動(dòng)態(tài)碼編譯裝置及方法可以通過硬件或軟件的方式來實(shí)現(xiàn)。所述動(dòng)態(tài)碼編譯裝置及方法接收動(dòng)態(tài)碼,例如JavaScript碼,并且使用語法解析動(dòng)態(tài)碼,以將動(dòng)態(tài)碼分為多個(gè)能編譯的區(qū)塊與多個(gè)不能編譯的區(qū)塊。接著,所述動(dòng)態(tài)碼編譯裝置及方法將多個(gè)能編譯的區(qū)塊轉(zhuǎn)換為靜態(tài)碼,例如C/C++碼或是JavaScript的靜態(tài)客戶端(native client)應(yīng)用程序接口(Applicat1nProgramming Interface, API),并且將多個(gè)不能編譯的區(qū)塊進(jìn)行改寫,以產(chǎn)生改寫后的動(dòng)態(tài)碼,其中改寫后的動(dòng)態(tài)碼保留了原始動(dòng)態(tài)碼與靜態(tài)碼之間進(jìn)行溝通的功能傳呼。
[0034]接著,終端裝置可以通過瀏覽器或其他的解碼設(shè)備(例如1S、WindowS或Android系統(tǒng)的網(wǎng)頁瀏覽器)直接解析