跨平臺移動開發實戰(十)------與native集成

現在各大平臺羣雄逐鹿,推出各種讓人炫目的feature,基於HTML5開發最大的弊病就是無法享受最新最炫的native feature和性能問題,而Phonegap的價值就在於此,它就是爲了讓你既能基於HTML5享受跨平臺的便利,又能享受native的feature。因此,這裏就通過對phonegap的分析,來看看如何能更好地讓HTML5長在native上。

分析完phonegap在三大平臺上的源碼(phonegap源碼分析(一)------ androidphonegap源碼分析(二)------ Windows Phonephonegap源碼分析(三)------ IOS),會發現phonegap就是基於各大平臺上的webview,把它作爲跨平臺的虛擬機,把HTML5作爲字節碼,以此打造Mobile上的Java。它那些所謂集成native的plugin實際上是苦力活,把各大平臺共有的特性都包裝了一遍,所以,它的未來寄希望於兩點,一是各mobile平臺能大力發展HTML5,提升其性能和功能。二是,能緊跟各平臺的最新發布,儘快地把最新特性以plugin的方式include進來。因此phonegap不是一個什麼很絕妙的框架,它是基於一個很簡單的構想,但要做得儘可能的完善和細節,並且更新速度要快。

我前面也提到過,不是所有的應用都適合用phonegap來做,如何評估,關鍵要看這個webview是否能很好承載你的應用。這塊我研究不多,但從網上的一些文章來看,webview的性能是存在問題的,很多人做過測試,拿同樣的頁面在webview和browser上跑,webview的性能是低於browser的,並且就算是不亞於browser,browser和原生應用也是沒法比的,撇開JS的優化(這是一個很大的主題)不談,phonegap相關的性能損耗主要是以下幾點:

  • JS與Native的互調
  • HTML UI與native UI的差距
  • 性能與跨平臺間的平衡

對於第一點,其實這是最可以忽視的點,通過對phonegap源碼的分析,損耗在JS與Native的互調上的代價其實並不大,除了Android取調用結果之外,其他都是直接的本地方法調用,並且JS與Native的互調並不是發生在每時每刻。

而對於HTML UI與native UI的差距,這個是性能問題體現得最爲明顯的地方。在桌面平臺上尚且如此,更別提在mobile上,因此對UI交互要求很高的應用,得重點考察一下是否能容忍這塊的差距。對於如何提升UI性能和流暢性,我還沒來得及做很深入的研究,就目前的學習情況來看,可以朝以下幾個方面來做:

  • 通過template技術,把HTML打散,避免一個html太大,http://floatlearning.com/2011/05/how-well-does-phonegap-scale/,這篇文章介紹一些template solution
  • 選擇最合適的UI框架,就目前來看Jquery mobile在性能上我是不滿意的,以後我會重點考察一下JQTouch
  • 優化dom render,比如減少reflow的cost,http://floatlearning.com/2011/06/the-cost-of-reflows-on-a-web-app/
  • 性能提升小tips,http://floatlearning.com/2011/03/developing-better-phonegap-apps/,這篇文章介紹了幾個很關鍵的tips

對於性能與跨平臺間的平衡,就是要考慮哪些點是需要通過plugin放在native端來做的,JS的執行性能雖然近年來有了明顯的提升,但還是沒法和native比的,所以如果存在cpu密集型的運算時,得考慮是否有必要犧牲跨平臺性在native端來做塊,不過,phonegap就是好在給了我們這個平衡的選擇性,起碼我們還是有路可走。

性能優化的工作對於跨平臺mobile開發來說是非常關鍵的,絕不能以犧牲用戶體驗的代價來方便自己,雖然,不太可能做到與native app不相上下,但不斷提升性能是我們不能忽視的工作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章