這篇文章主要介紹“怎么在iOS和Android上選擇JavaScript引擎進(jìn)行應(yīng)用開發(fā)”,在日常操作中,相信很多人在怎么在iOS和Android上選擇JavaScript引擎進(jìn)行應(yīng)用開發(fā)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么在iOS和Android上選擇JavaScript引擎進(jìn)行應(yīng)用開發(fā)”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、尖山網(wǎng)站維護、網(wǎng)站推廣。主要有兩種方法。一種是使用系統(tǒng)的瀏覽器組件(IOS中的UIWebView和Android中的WebView),另一方法就是使用整合好的JavaScript引擎。
使用系統(tǒng)的瀏覽器組件比較容易實現(xiàn)但是更復(fù)雜,效率也低。 WebView提供了 addJavascriptInterface 把Java
classes注入到JavaScript文本的方法。但是它只支持最原始的幾種數(shù)據(jù)類型,因此也局限了API設(shè)計。并且在Android 2.3模擬器上不穩(wěn)定,在真機上也會遇到 issue
#12987的問題。在IOS上更糟 UIWebView沒有公共的APIs支持JavaScript到Objective-C的交互(你必須使用似有的APIs才能達(dá)到與addJavascriptInterface相同的功能)。
PhoneGap 是基于 UIWebView and WebView的比較出名的項目。開發(fā)者被迫使用回調(diào)函數(shù)從JavaScript
APIs得到返回值。這在游戲上效率極低,也更為復(fù)雜。
早期的ngCore同樣依賴UIWebView來支持iOS。但是這個機制由于其糟糕的表現(xiàn)被取代。
為了獲得更好的表現(xiàn)、靈活性、兼容性,嵌入全功能的JavaScript引擎變得更為有效。
選擇JavaScript 引擎 |
據(jù)我所知,iOS 或 android 上能夠運行的JavaScript 引擎有4個: JavaScriptCore, SpiderMonkey, V8 and Rhino.下面這個表格展示各個引擎在iOS
和 Android 的兼容性
iOS | Android | |
---|---|---|
JavaScriptCore | Interpreter only | Interpreter and JIT |
SpiderMonkey | Interpreter only | Interpreter and JIT |
V8 | JIT only for jailbroken devices | JIT |
Rhino | Unsupported | Interpreter |
當(dāng)我設(shè)計 OpenAphid-Engine 成為一個合適的Javascript的引擎的時候,我主要考量以下指標(biāo):
兼容性:同時支持iOS 和 Android 在x86 和 ARM 平臺上的 模擬器和 設(shè)備。
穩(wěn)定性. 穩(wěn)定的運行在對應(yīng)的平臺和CPU的架構(gòu)上。
擴展性. 能夠很方便的利用本地特性進(jìn)行擴展。例如OpenAphid-Engine 通過一個橋接層,實現(xiàn)了通過Javascript 進(jìn)行OpenGL
ES 的使用。
性能好:一個快速的Javascript 引擎主要歸結(jié)為兩個因素:有效的綁定機制和進(jìn)行較低的開銷。. OpenAphid-Engine 在渲染一幀頁面的時候通過JavaScript觸發(fā)數(shù)百個OpenGL
ES調(diào)用來進(jìn)行渲染。這點是非常有意義的,如果只是把開銷放到單純的執(zhí)行JavaScript上進(jìn)行將會導(dǎo)致渲染很慢,。
體積小.:在內(nèi)存的占用上和自身的執(zhí)行文件上都要比較小。
Rhino和 V8出現(xiàn)的最早,但是不支持iOS。我非常希望可以使用 V8開發(fā) OpenAphid-Engine ,在初次使用時就發(fā)現(xiàn)它擁有優(yōu)雅的代碼結(jié)構(gòu),良好的表現(xiàn),但是我非常失望,因為 V8只能在JIT模式下使用,而IOS不支持。除非你使用jailbroken設(shè)備。(詳情請參考 issue
#1312)
我在JavaScriptCore和SpiderMonkey間糾結(jié)了很久。在成功部署了Android和IOS項目后,我通過實驗找到更好的一個。
SpiderMonkey 容易得到開發(fā)權(quán)限,但是在與JavaScriptCore比較時甘拜下風(fēng)。SpiderMonkey產(chǎn)生了大量的二進(jìn)制文件
(在ARMv7上大約1.3MB);JavaScript執(zhí)行得更慢,在JavaScript和C++的橋接表現(xiàn)更為重要。另外一個讓我遠(yuǎn)離SpiderMonkey的原因是在iOS模擬器上出現(xiàn)隨機崩潰現(xiàn)象。
JavaScript引擎會受很多東西影響,比如交叉編譯器的版本、引擎的版本和操作系統(tǒng)的種類等。下表列舉了幾種運行在iPod Touch 4上引擎的運行時間。(有興趣請于Google
Doc查看精確的時間)
JavaScriptCore 大比分。
我沒有找到SpiderMonkey,所以就使用了下面的三種自定義搭建Cocos2d-iPhone-2.1-beta4, Cocos2d-x-2.1-beta3和iMonkey。
所有測試的apps都基于LLVM 4.1版本,所有的引擎都運行在解釋器模式(iOS受限)。
幾種基準(zhǔn)的介紹:
1m-js_loop執(zhí)行空循環(huán)一百萬次。
1m-native_function請求調(diào)用一百萬次返回undefined的本地函數(shù)
1m-js_function跟上面一個相同,只是換成了JavaScript。
fib(30)遞歸的方式計算Fibonacci(30)。
sudoku-5用這里的算法解決Sudoku問題。
1m-native_function JavaScriptCore使用可移植的C
APIs實現(xiàn),當(dāng)然這不是最有效引入本地函數(shù)的方法。
SpiderMonkey 在臺式電腦上由于高級的JIT追蹤方法運行更快,但是在IOS設(shè)備上卻與之相反。
在大部分的基準(zhǔn)上,使用iMonkey比SpiderMonkey更快
很明顯的,使用SpiderMonkey將會在iOS上獲得更好的表現(xiàn)。ngCore 1.10在iOS上加入自定義功能,所以要更優(yōu)于像SpiderMonkey這樣的變體。
在我專心于 JavaScriptCore之后,我的研究更進(jìn)了一步:
1. 它在運行 一百萬 次 native_function和 一百萬次Math.abs(0) 的時間六倍于 使用 JavaScriptCore.我觀察到同樣的性能問題出現(xiàn)在通過注入的方式訪問對象的屬性。
2. 利用 C
APIs 進(jìn)行設(shè)計雖然開發(fā)簡單,但是缺乏靈活的內(nèi)存管理機制。缺乏一個高級的內(nèi)部垃圾回收機制很難解決類似于 circular
references 的問題。
3. 眾多的 JavaScriptCore 正式版本都是可用的
。 不過 OpenAphid-Engine 是更好的一個,它不但速度快,而且相當(dāng)小。
我拋棄了原來的使用 C
APIs 方案因此解決了 問題 1 和 2. 使用的JSC 版本來自于iOS4.3.3,因為同樣在解析器模式下這個版本相比來自于iOS 5 的版本更快,執(zhí)行文件更小。
在開發(fā)OpenAphid-Engine期間,我一直保持對其他引擎的關(guān)注,以下這個表格總結(jié)了其他JS引擎的使用情況
iOS | Android | |
---|---|---|
ngCore 1.6 and above | UIWebView | V8 |
ngCore 1.7 and later | SpiderMonkey | V8 |
Titanium | JavaScriptCore | V8 or Rhino |
PhoneGap | UIWebView | WebView |
Cocos2D-x JavaScript | SpiderMonkey | SpiderMonkey |
CocoonJS | JavaScriptCore | JavaScriptCore |
Ejecta | JavaScriptCore | Unsupported |
directCanvas | JavaScriptCore | No clue |
到此,關(guān)于“怎么在iOS和Android上選擇JavaScript引擎進(jìn)行應(yīng)用開發(fā)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
本文題目:怎么在iOS和Android上選擇JavaScript引擎進(jìn)行應(yīng)用開發(fā)-創(chuàng)新互聯(lián)
瀏覽路徑:http://weahome.cn/article/csiggc.html