新聞中心
每一位程序員都有自己的技術(shù)信仰,我也不例外。但當(dāng)技術(shù)信仰遇到實(shí)際工作中的問(wèn)題時(shí),你又要怎么做呢?還記得剛剛接觸HTML5做跨平臺(tái)開(kāi)發(fā)的時(shí)候這樣的問(wèn)題就擺在了我面前。

成都創(chuàng)新互聯(lián)專(zhuān)業(yè)提供綿陽(yáng)電信機(jī)房服務(wù),為用戶(hù)提供五星數(shù)據(jù)中心、電信、雙線(xiàn)接入解決方案,用戶(hù)可自行在線(xiàn)購(gòu)買(mǎi)綿陽(yáng)電信機(jī)房服務(wù),并享受7*24小時(shí)金牌售后服務(wù)。
當(dāng)初公司決定選擇PhoneGap作為核心框架,不過(guò)在之后的工作中就慢慢覺(jué)得PhoneGap并不像人們說(shuō)的那么好,至少在我的項(xiàng)目中的表現(xiàn)不是那么***。
從項(xiàng)目研發(fā)到整體的UI體驗(yàn),隨之而來(lái)的各種問(wèn)題都有待解決。你可以嘲笑我,也可以說(shuō)我根本不懂,不過(guò)在應(yīng)用開(kāi)發(fā)的過(guò)程中任何的問(wèn)題都不可忽視。
項(xiàng)目研發(fā)
在項(xiàng)目研發(fā)中主要是開(kāi)發(fā)環(huán)境與應(yīng)用實(shí)現(xiàn),不過(guò)PhoneGap在終端平臺(tái)的支持與應(yīng)用打包上也出現(xiàn)了些問(wèn)題。
1.支持終端平臺(tái)
表面上來(lái)看,PhoneGap支持的平臺(tái)數(shù)量最多。但是在實(shí)際開(kāi)發(fā)過(guò)程中,不管用什么平臺(tái)開(kāi)發(fā),除去平臺(tái)封裝的擴(kuò)展對(duì)象,完全遵循W3C標(biāo)準(zhǔn),也不可能完全運(yùn)行在多個(gè)平臺(tái)上,所以說(shuō)跨多個(gè)平臺(tái)是不現(xiàn)實(shí)的,還是需要針對(duì)不同的平臺(tái)進(jìn)行實(shí)現(xiàn)。
2.開(kāi)發(fā)環(huán)境
在應(yīng)用開(kāi)發(fā)的過(guò)程中,開(kāi)發(fā)環(huán)境至關(guān)重要,但是PhoneGap沒(méi)有自己的IDE開(kāi)發(fā)環(huán)境,官方推薦一些公開(kāi)的第三方html編輯軟件(第三方編輯器不可能將PhoneGap所做的JS擴(kuò)展表現(xiàn)出來(lái))。
對(duì)開(kāi)發(fā)者來(lái)講,用PhoneGap開(kāi)發(fā)并不是單純的html + css + javascript的開(kāi)發(fā),要進(jìn)行PhoneGap開(kāi)發(fā),開(kāi)發(fā)者必須要下載以上7個(gè)平臺(tái)廠(chǎng)商所提供的開(kāi)發(fā)環(huán)境,IDE等(這個(gè)PhoneGap官網(wǎng)有描述),環(huán)境搭建完成后方可進(jìn)行模擬調(diào)試,對(duì)于沒(méi)有接觸過(guò)手機(jī)開(kāi)發(fā)的web開(kāi)發(fā)者而言,還需要學(xué)習(xí)很新的東西,入門(mén)門(mén)檻太高,開(kāi)發(fā)難度無(wú)疑要加大。
3.打包部署
做過(guò)應(yīng)用開(kāi)發(fā)的人都知道,基于開(kāi)發(fā)環(huán)境必須針對(duì)不同的SDK進(jìn)行開(kāi)發(fā),所以打包部部署步驟比較繁瑣,而且每個(gè)平臺(tái)要在不同的環(huán)境下操作。最近推出在線(xiàn)打包,但是需要付費(fèi)購(gòu)買(mǎi)使用的。
4.應(yīng)用的實(shí)現(xiàn)
當(dāng)進(jìn)行應(yīng)用實(shí)現(xiàn)的時(shí)候,使用PhoneGap開(kāi)發(fā)應(yīng)用必須在網(wǎng)頁(yè)當(dāng)中引用一個(gè)JS包,才能使用本地?cái)U(kuò)展對(duì)象。過(guò)多過(guò)大(例如再引用JQ)的JS包引用將加重引擎的負(fù)擔(dān),從而影響應(yīng)用性能和用戶(hù)體驗(yàn),所有UI完全依靠html和css完成。
不僅如此,手機(jī)上的webkit存在IFrame不支持height屬性,css樣式不支持z-index,position,overflow等屬性的硬傷,也就是頁(yè)面的區(qū)域滾動(dòng)在正常網(wǎng)頁(yè)布局下是無(wú)法做到的,只能依賴(lài)JS或者native UI。不幸的是PhoneGap把這個(gè)問(wèn)題留給了我們開(kāi)發(fā)者,開(kāi)發(fā)者只能選擇JS。在頁(yè)面滾動(dòng)上用JS效率是相當(dāng)?shù)偷?,尤其在android的中低端手機(jī)上表現(xiàn)更為明顯。
用戶(hù)體驗(yàn)
用戶(hù)體驗(yàn)是每一個(gè)應(yīng)用是否能夠立足生存,被用戶(hù)所接受并長(zhǎng)期使用的原因,所以導(dǎo)致PhoneGap在用戶(hù)體驗(yàn)上有一定的差距,這里我主要是對(duì)PhoneGap引擎問(wèn)題的分析:
1. 平臺(tái)穩(wěn)定性差
從PhoneGap公布的源代碼和一些用PhoneGap開(kāi)發(fā)出來(lái)的應(yīng)用體驗(yàn)上來(lái)看,PhoneGap是沒(méi)有經(jīng)過(guò)完整而系統(tǒng)的測(cè)試的,或者還沒(méi)有進(jìn)行過(guò)機(jī)型的適配,還存在很多的BUG,許多應(yīng)用有手機(jī)平臺(tái)版本的限制等等。
并且因?yàn)殚_(kāi)源,不斷有開(kāi)發(fā)者往上提交代碼,各平臺(tái)的兼容和同一平臺(tái)不同版本之間的兼容問(wèn)題在PhoneGap開(kāi)發(fā)上會(huì)越來(lái)越大。UI上最明顯的問(wèn)題就是頁(yè)面被放大。Android平臺(tái)的webkit會(huì)根據(jù)手機(jī)設(shè)備屏幕的分辨率,密度,大小等條件來(lái)對(duì)網(wǎng)頁(yè)進(jìn)行0.75~ 1.5倍的縮放,以適應(yīng)屏幕。這意味著在不更改webkit縮放比例的情況下,若網(wǎng)頁(yè)當(dāng)中寫(xiě)了類(lèi)似width:10px; 時(shí),實(shí)際上可能變成了10 * 1.5。同時(shí),在帶有輸入框的頁(yè)面當(dāng)中,一旦選中輸入框,頁(yè)面立即會(huì)出現(xiàn)再被放大的效果,并且放大后無(wú)法縮回,導(dǎo)致用戶(hù)看到的UI效果跟開(kāi)發(fā)者想要的想要的效果相差較大。
2. 對(duì)國(guó)內(nèi)廠(chǎng)商終端的適配差
PhoneGap現(xiàn)有功能上有多處存在不完善。比如定位功能,在關(guān)閉GPS,GPRS,WIFI、系統(tǒng)基于網(wǎng)絡(luò)定位設(shè)置的情況下(此時(shí)連接了WIFI),是無(wú)法獲取到地理位置的,國(guó)內(nèi)手機(jī)廠(chǎng)商的手機(jī)經(jīng)常崩潰或運(yùn)行錯(cuò)誤,所以用戶(hù)體驗(yàn)差。
3. 不支持多窗口與動(dòng)畫(huà)卡頓
在整體UI上,PhoneGap開(kāi)發(fā)過(guò)程中自始至終只存在一個(gè)窗口,也就是所有的網(wǎng)頁(yè)都運(yùn)行在這個(gè)窗口當(dāng)中的,比如窗口的切換,過(guò)度等的動(dòng)畫(huà)效果,使用JS和CSS3可以實(shí)現(xiàn)一些動(dòng)畫(huà)效果,效率是很低的,并且只局限于當(dāng)前網(wǎng)頁(yè)內(nèi),至少在現(xiàn)階段部分設(shè)備硬件配備還沒(méi)跟上之前是這樣的,而且除IOS以外的終端設(shè)備,廠(chǎng)商繁多,參差不齊,更難確保做出來(lái)的應(yīng)用能夠良好的運(yùn)行在各個(gè)平臺(tái),所以用戶(hù)體驗(yàn)不好。
4. UI延遲效果差,易崩潰
從PhoneGap開(kāi)源出來(lái)的代碼架構(gòu)來(lái)看,PhoneGap本身的機(jī)制會(huì)導(dǎo)致UI上有一定的延遲,在不改現(xiàn)有架構(gòu)的基礎(chǔ)上這個(gè)問(wèn)題是不可避免的。比如傳感器的速度明顯過(guò)慢,照相機(jī)打開(kāi)拍照后回調(diào)時(shí)間過(guò)長(zhǎng)等,這些都是在非常簡(jiǎn)單的網(wǎng)頁(yè)下的表現(xiàn)效果。由于PhoneGap本身基于開(kāi)源策略架構(gòu)(利于開(kāi)發(fā)者往上擴(kuò)充功能)和在JS層面做了大量工作的原因,PhoneGap開(kāi)發(fā)無(wú)論在iPhone還是在A(yíng)ndroid上都并沒(méi)有走本身平臺(tái)所特有的JS擴(kuò)展方式,而是采取了線(xiàn)程休眠,暫停瀏覽器timer等方式來(lái)獲取回調(diào),直接導(dǎo)致延遲。另外,如照相機(jī)接口,PhoneGap返回給用戶(hù)的并不是類(lèi)似于文件存儲(chǔ)地址的字符串,而是將相片轉(zhuǎn)為了二進(jìn)制發(fā)給用戶(hù),導(dǎo)致這個(gè)操作非常耗資源,并且時(shí)間消耗很長(zhǎng),在圖片大的情況下,還有可能因?yàn)镺utOfMemorySize異常而引起應(yīng)用直接崩潰。
也許這些問(wèn)題在你的團(tuán)隊(duì)中稱(chēng)不上什么問(wèn)題,但是在一個(gè)資源不是那么豐富的團(tuán)隊(duì)中這些問(wèn)題就顯得尤為突出。而且,在應(yīng)用開(kāi)發(fā)的過(guò)程中各種細(xì)節(jié)問(wèn)題都不可忽略,追求***的應(yīng)用要從細(xì)節(jié)做起。雖然PhoneGap可以實(shí)現(xiàn)很多跨平臺(tái)應(yīng)用的開(kāi)發(fā),但開(kāi)發(fā)者尤其是項(xiàng)目統(tǒng)籌人員在選擇框架的時(shí)候一定要三思而后行。
當(dāng)前標(biāo)題:我為什么從PhoneGap中逃離
分享路徑:http://m.fisionsoft.com.cn/article/ccoedis.html


咨詢(xún)
建站咨詢(xún)
