打破web開發(fā)困局 Blend完美接盤Native app
近日,全球軟件開發(fā)大會(huì)QCon亮相上海。作為為團(tuán)隊(duì)領(lǐng)導(dǎo)者、架構(gòu)師、項(xiàng)目經(jīng)理和高級(jí)軟件開發(fā)人員量身打造的企業(yè)軟件開發(fā)大會(huì),QCon邀請(qǐng)了諸多業(yè)內(nèi)大牛為大家做出技術(shù)分享。其中,直達(dá)號(hào)Clouda+團(tuán)隊(duì)的百度資深工程師雷志興用一場(chǎng)名為《Blend,完美地混合Web App與Native App》的演講,吸引了與會(huì)代表們的大量“眼球”。
現(xiàn)場(chǎng),雷志興從百度輕應(yīng)用和直達(dá)號(hào)講起,繼而談到Blend的初衷。“去年八月我們推出了輕應(yīng)用,這是一項(xiàng)面向開發(fā)者的平臺(tái)和技術(shù),而今年在輕應(yīng)用的基礎(chǔ)上我們推出了直達(dá)號(hào)。百度提供了很強(qiáng)的渠道分發(fā)能力,但從體驗(yàn)上來說,我們依然覺得輕應(yīng)用和Native app有一定差異,而Blend的就是為了彌補(bǔ)這些差異而出現(xiàn)。”
在他看來,Blend不僅僅是一項(xiàng)“拿來即用”的開源技術(shù),更是一種開發(fā)理念。使用這個(gè)理念,App不僅能保留web靈活性,剔除冗長的版本發(fā)布過程,做到極快的迭代速度,還能在交互中保證足夠的流暢性。
“Blend中有兩項(xiàng)核心技術(shù):多webview技術(shù)和插件動(dòng)態(tài)加載技術(shù)。前者能讓web的能力和性能得到質(zhì)的提高,后者則是在架構(gòu)上保證了運(yùn)行環(huán)境的簡(jiǎn)單高效”雷志興表示。
無線困境誰來破局
隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,Native App開始逐漸到達(dá)它增長的天花板,于是越來越多開發(fā)者開始把目標(biāo)瞄向web開發(fā)。在初期,一般大家在做移動(dòng)web站點(diǎn)時(shí),都會(huì)追求一些無刷新的跳轉(zhuǎn)、換頁效果,可是這些效果在高端機(jī)上都會(huì)偶爾出現(xiàn)運(yùn)行不流暢等問題,在中低端智能機(jī)上更是難以運(yùn)行。所以近一兩年來,大家傾向于不在移動(dòng)web站點(diǎn)中采用復(fù)雜的特效,只在最關(guān)鍵的部分,用最小的代價(jià)來實(shí)現(xiàn)。這樣一來雖然滿足了大部分用戶的需求,不過很多個(gè)性化的效果又無法順利實(shí)現(xiàn)了。
關(guān)于WebApp的能力,Developer Economics在調(diào)研了Google Play中的30339個(gè)App曾給出過一份報(bào)告,報(bào)告顯示,拋開性能的話,如果只使用HTML5技術(shù),能實(shí)現(xiàn)37%的app,如果使用Phonegap,能實(shí)現(xiàn)49%,如果使用Appcelerator,能實(shí)現(xiàn)63%。
與此同時(shí),大量的調(diào)研都顯示性能和API數(shù)量不足是webapp的主要軟肋,而性能的最主要體現(xiàn)是在頁面切換的轉(zhuǎn)場(chǎng)過程。因此Clouda+團(tuán)隊(duì)面臨的首要目標(biāo)就是如何能讓WebApp的轉(zhuǎn)場(chǎng)像Native App那般流暢。
在iOS下,有較好的設(shè)備性能和瀏覽器支持,用Web來做復(fù)雜交互問題不太大,但Android下就相當(dāng)棘手了。Clouda+團(tuán)隊(duì)的Blend項(xiàng)目正向前端開發(fā)者展示著另一種可能。
調(diào)研嘗試尋找源頭
輕應(yīng)用有兩大入口:移動(dòng)搜索和手機(jī)百度App,接入輕應(yīng)用的開發(fā)者尤其看重手機(jī)百度入口。因?yàn)樵谑謾C(jī)百度中,由于輕應(yīng)用的運(yùn)行環(huán)境是百度框,所以開發(fā)者可以使用一些Native API的接口,即Clouda API,包括提供設(shè)備能力的Device API,提供百度云服務(wù)能力的MBASS API等。
最初,他們團(tuán)隊(duì)重點(diǎn)考慮的是類似Appcelerator的方案,不過他們不像Appcelerator那么激進(jìn)地將Javascript編譯成Native code,而希望暴露一組基本的Native API,供前端工程師調(diào)用以實(shí)現(xiàn)流暢的App效果。但這樣隨之而來的問題是,開發(fā)者的可定制性會(huì)變得特別差,極度依賴Native API,開發(fā)感受會(huì)很糟糕,畢竟開發(fā)者操作的不再是DOM,而是一個(gè)私有的API。于是這個(gè)方案很快就被否定了。
后來,雷志興發(fā)現(xiàn),其實(shí)大家在性能方面的擔(dān)憂主要還是在轉(zhuǎn)場(chǎng)和動(dòng)畫上。不管頁面多復(fù)雜,很少有會(huì)擔(dān)心頁面內(nèi)部的性能。于是他提出了一個(gè)概念——Every element can be a webview。由于輕應(yīng)用的使用場(chǎng)景和Native結(jié)合得很好,Blend團(tuán)隊(duì)就開始利用Native技術(shù)來做轉(zhuǎn)場(chǎng)。相對(duì)用web技術(shù),用Native來做轉(zhuǎn)場(chǎng)在技術(shù)上就可控多了。
技術(shù)開源貢獻(xiàn)業(yè)界
因?yàn)榘盐兆×藛栴}的核心,所以Blend的核心實(shí)現(xiàn)也很順利,雷志興說,Blend秉承了模型從簡(jiǎn)的原則,并且為開發(fā)者保留最大的靈活性。所謂模型從簡(jiǎn),就是Blend提供的是核心能力:讓Javascript能控制webview,就好像控制DOM一樣,不同webview之間通過事件通訊,Javascript和Native code通過事件通訊,這讓開發(fā)者能快速理解核心概念并上手。此外,為開發(fā)者保留最大的靈活性,主要體現(xiàn)在Blend內(nèi)部不大量依賴原生控件,webview內(nèi)部的樣式完全可以通過開發(fā)者來自定義,在UI風(fēng)格上面沒有任何限制,擁有無限的靈活性。此外,Blend也不會(huì)影響開發(fā)者對(duì)其他庫、框架的選擇。
“Blend的這個(gè)概念讓View有了‘原生’支持,任何的Element都可以用一個(gè)獨(dú)立的webview來實(shí)現(xiàn),瀏覽內(nèi)核的負(fù)擔(dān)就減輕了,而且切換時(shí)的過場(chǎng)動(dòng)畫用原生代碼實(shí)現(xiàn),也保證了性能。”雷志興說。
Blend的出現(xiàn),對(duì)輕應(yīng)用開發(fā)者來說是巨大的福音,他們可以在在不接觸任何Native代碼的前提下,就讓輕應(yīng)用的體驗(yàn)有質(zhì)的提高,Blend也已經(jīng)通過輕應(yīng)用Runtime下發(fā)到部分輕應(yīng)用的運(yùn)行環(huán)境中了。
值得一提的是,雷志興非常熱衷于技術(shù)開源,在百度,他所所負(fù)責(zé)的技術(shù)產(chǎn)品全部是開源項(xiàng)目:Tangram是百度第一個(gè)開源的技術(shù)項(xiàng)目,FIS亦于2012年開放源代碼,Clouda+同樣也是開源產(chǎn)品。所以,Blend除了能為百度輕應(yīng)用解決體驗(yàn)問題,同樣適用于第三方的App,開發(fā)者可以將SDK打包入App,單獨(dú)發(fā)布App上架。
Blend能在能保證用戶體驗(yàn)的前提下節(jié)省人力成本,又有很高的定制性,迭代速度和web相當(dāng)。如果你正開發(fā)App的初版,你可以用Blend理念來加速開發(fā),盡早上線MVP(最簡(jiǎn)可行產(chǎn)品)并快速迭代;如果你正開發(fā)一個(gè)大中型App,這個(gè)理念能釋放web的靈活性,讓web開發(fā)工程師在App迭代過程中做得更多、做得更好。