我是一名移動應用的開發者,從JAVA 爲主的Android到以Objective-C爲主的iOS最後到以HTML5爲主的跨平臺開發,我已經走過了五年多的時光,而我也從一個底層的碼農成長爲項目負責人。javascript
每一位程序員都有本身的技術信仰,我也不例外。但當技術信仰遇到實際工做中的問題時,你又要怎麼作呢?還記得剛剛接觸HTML5作跨平臺開發的時候這樣的問題就擺在了我面前。css
當初公司決定選擇PhoneGap做爲核心框架,不過在以後的工做中就慢慢以爲PhoneGap並不像人們說的那麼好,至少在個人項目中的表現不是那麼完美。html
從項目研發到總體的UI體驗,隨之而來的各類問題都有待解決。你能夠嘲笑我,也能夠說我根本不懂,不過在應用開發的過程當中任何的問題都不可忽視。java
項目研發android
在項目研發中主要是開發環境與應用實現,不過PhoneGap在終端平臺的支持與應用打包上也出現了些問題。程序員
1.支持終端平臺web
表面上來看,PhoneGap支持的平臺數量最多。可是在實際開發過程當中,無論用什麼平臺開發,除去平臺封裝的擴展對象,徹底遵循W3C標準,也不可能徹底運行在多個平臺上,因此說跨多個平臺是不現實的,仍是須要針對不一樣的平臺進行實現。瀏覽器
2.開發環境網絡
在應用開發的過程當中,開發環境相當重要,可是PhoneGap沒有本身的IDE開發環境,官方推薦一些公開的第三方html編輯軟件(第三方編輯器不可能將PhoneGap所作的JS擴展表現出來)。架構
對開發者來說,用PhoneGap開發並非單純的html + css + javascript的開發,要進行PhoneGap開發,開發者必需要下載以上7個平臺廠商所提供的開發環境,IDE等(這個PhoneGap官網有描述),環境搭建完成後方可進行模擬調試,對於沒有接觸過手機開發的web開發者而言,還須要學習很新的東西,入門門檻過高,開發難度無疑要加大。
3.打包部署
作過應用開發的人都知道,基於開發環境必須針對不一樣的SDK進行開發,因此打包部部署步驟比較繁瑣,並且每一個平臺要在不一樣的環境下操做。最近推出在線打包,可是須要付費購買使用的。
4.應用的實現
當進行應用實現的時候,使用PhoneGap開發應用必須在網頁當中引用一個JS包,才能使用本地擴展對象。過多過大(例如再引用JQ)的JS包引用將加劇引擎的負擔,從而影響應用性能和用戶體驗,全部UI徹底依靠html和css完成。
不只如此,手機上的webkit存在IFrame不支持height屬性,css樣式不支持z-index,position,overflow等屬性的硬傷,也就是頁面的區域滾動在正常網頁佈局下是沒法作到的,只能依賴JS或者native UI。不幸的是PhoneGap把這個問題留給了咱們開發者,開發者只能選擇JS。在頁面滾動上用JS效率是至關低的,尤爲在android的中低端手機上表現更爲明顯。
用戶體驗
用戶體驗是每個應用是否可以立足生存,被用戶所接受並長期使用的緣由,因此致使PhoneGap在用戶體驗上有必定的差距,這裏我主要是對PhoneGap引擎問題的分析:
1. 平臺穩定性差
從PhoneGap公佈的源代碼和一些用PhoneGap開發出來的應用體驗上來看,PhoneGap是沒有通過完整而系統的測試的,或者尚未進行過機型的適配,還存在不少的BUG,許多應用有手機平臺版本的限制等等。
而且由於開源,不斷有開發者往上提交代碼,各平臺的兼容和同一平臺不一樣版本之間的兼容問題在PhoneGap開發上會愈來愈大。UI上最明顯的問題就是頁面被放大。Android平臺的webkit會根據手機設備屏幕的分辨率,密度,大小等條件來對網頁進行0.75~ 1.5倍的縮放,以適應屏幕。這意味着在不更改webkit縮放比例的狀況下,若網頁當中寫了相似width:10px; 時,實際上可能變成了10 * 1.5。同時,在帶有輸入框的頁面當中,一旦選中輸入框,頁面當即會出現再被放大的效果,而且放大後沒法縮回,致使用戶看到的UI效果跟開發者想要的想要的效果相差較大。
2. 對國內廠商終端的適配差
PhoneGap現有功能上有多處存在不完善。好比定位功能,在關閉GPS,GPRS,WIFI、系統基於網絡定位設置的狀況下(此時鏈接了WIFI),是沒法獲取到地理位置的,國內手機廠商的手機常常崩潰或運行錯誤,因此用戶體驗差。
3. 不支持多窗口與動畫卡頓
在總體UI上,PhoneGap開發過程當中自始至終只存在一個窗口,也就是全部的網頁都運行在這個窗口當中的,好比窗口的切換,過分等的動畫效果,使用JS和CSS3能夠實現一些動畫效果,效率是很低的,而且只侷限於當前網頁內,至少在現階段部分設備硬件配備還沒跟上以前是這樣的,並且除IOS之外的終端設備,廠商繁多,良莠不齊,更難確保作出來的應用可以良好的運行在各個平臺,因此用戶體驗很差。
4. UI延遲效果差,易崩潰
從PhoneGap開源出來的代碼架構來看,PhoneGap自己的機制會致使UI上有必定的延遲,在不改現有架構的基礎上這個問題是不可避免的。好比傳感器的速度明顯過慢,照相機打開拍照後回調時間過長等,這些都是在很是簡單的網頁下的表現效果。因爲PhoneGap自己基於開源策略架構(利於開發者往上擴充功能)和在JS層面作了大量工做的緣由,PhoneGap開發不管在iPhone仍是在Android上都並無走自己平臺所特有的JS擴展方式,而是採起了線程休眠,暫停瀏覽器timer等方式來獲取回調,直接致使延遲。另外,如照相機接口,PhoneGap返回給用戶的並非相似於文件存儲地址的字符串,而是將相片轉爲了二進制發給用戶,致使這個操做很是耗資源,而且時間消耗很長,在圖片大的狀況下,還有可能由於OutOfMemorySize異常而引發應用直接崩潰。
也許這些問題在你的團隊中稱不上什麼問題,可是在一個資源不是那麼豐富的團隊中這些問題就顯得尤其突出。並且,在應用開發的過程當中各類細節問題都不可忽略,追求完美的應用要從細節作起。雖然PhoneGap能夠實現不少跨平臺應用的開發,但開發者尤爲是項目統籌人員在選擇框架的時候必定要三思然後行。