跨端開發(fā)面面談——基于WebView的Hybrid開發(fā)模式深度解析
一、引言
跨終端移動開發(fā)是當前熱門的話題,作為這一系列的開篇,我們來深入探討基于WebView的Hybrid混合開發(fā)模式。這種模式借助原生端的WebView組件,實現(xiàn)了Native和JavaScript的雙向通信,將Web App與Mobile App融為一體。

二、WebView Hybrid開發(fā)模式概述
對于有過混合應(yīng)用開發(fā)經(jīng)驗的開發(fā)者來說,基于WebView的Hybrid開發(fā)模式并不陌生。這種模式通過原生平臺的WebView組件,實現(xiàn)了Native和Web技術(shù)的無縫對接。如今,這一模式已廣泛應(yīng)用于各大平臺型應(yīng)用,如微信、手Q等。
三、JSBridge的角色與原理
在基于WebView的Hybrid開發(fā)模式中,JSBridge扮演著連接Native和JavaScript的橋梁。它是該模式中的關(guān)鍵點,通過了解JSBridge的通信原理,我們能更深入地理解其角色。從前端角度看,JSBridge可能被理解為幫助調(diào)用原生API的JavaScript工具庫。但實際上,JSBridge是對底層通道的抽象封裝,包括原生和JavaScript兩側(cè)的內(nèi)容。
四、JSBridge的設(shè)計與實現(xiàn)

JSBridge的設(shè)計已實現(xiàn)為成熟技術(shù)。在設(shè)計過程中,需要考慮原生API差異、系統(tǒng)差異等因素,對上層調(diào)用提供統(tǒng)一接口。在JavaScript端,需要考慮調(diào)用方式、請求管理等內(nèi)容。關(guān)于JSBridge的實現(xiàn),可以參考一些已有的成熟方案,如In-depth Profiling of JSBridge、Hybrid APP架構(gòu)設(shè)計思路等。也可以參考一些安卓端的完整JSBridge實現(xiàn)案例,如JsBridge實現(xiàn)。
五、Hybrid開發(fā)模式的應(yīng)用與優(yōu)化
基于WebView的Hybrid開發(fā)模式在現(xiàn)有App中的集成使用已經(jīng)相當成熟。在完成JSBridge這一基礎(chǔ)設(shè)施建設(shè)后,開發(fā)者可以在各個方向進行深挖,優(yōu)化性能和體驗。例如,空間團隊在此基礎(chǔ)上進行了優(yōu)化,給出了更高效的方案。除了集成使用,還可以利用這一技術(shù)開發(fā)獨立App。知名的開發(fā)框架如PhoneGap、Cordova以及現(xiàn)在的Ionic都是這一領(lǐng)域的代表。對于前端技術(shù)背景的同學來說,采用Ionic框架開發(fā)App的學習成本不高,可以快速搭建項目界面。
一、原生開發(fā)的優(yōu)勢與Ionic的挑戰(zhàn)
Ionic框架在App開發(fā)中具有擴展原生的便捷機制。當存在原生能力需求且沒有現(xiàn)成的實現(xiàn)方案時,開發(fā)者可以自行封裝使用,但需要原生開發(fā)同學的參與。在我們的App開發(fā)中,安卓端消息推送模塊得到了原生開發(fā)的大力支持。對于拍照、相冊訪問等常見需求,雖然都有現(xiàn)成方案,但Ionic在某些方面仍有明顯不足。

在微信、QQ等聊天應(yīng)用中,聊天列表是一個異構(gòu)的無限滾動長列表,只加載最近的一屏聊天數(shù)據(jù)并通過滾動加載歷史消息。在原生端實現(xiàn)這一需求有多種常見手段,但僅依靠Web端技術(shù),效果常不盡如人意。Ionic在動畫處理上,包括換頁動畫和其他動畫,流暢程度一般。前端開發(fā)常見的瀏覽器兼容性問題也是Ionic面臨的一個挑戰(zhàn),雖然crosswalk是一個理論解決方案,但其體積龐大,實際應(yīng)用中很少被采用。
二、Ionic的新發(fā)展與Angular的緊密集成
Ionic框架不斷迭代,新的版本與Angular緊密集成。新的Angular與Angular 1.x的開發(fā)體驗已截然不同,推薦閱讀我們團隊書籍《揭秘Angular 2》以了解新的開發(fā)體驗。Ionic的開發(fā)體驗相比以往有所提升,其工具鏈中提供了拖拽式項目生成工具,極大提高了開發(fā)效率。
三、Ionic Pro提供的開發(fā)者工具
Ionic Pro為應(yīng)用整個生命周期提供了完善的支持平臺,包括一系列功能強大的開發(fā)者工具。這些服務(wù)需要付費使用。

四、Ionic的適用場景與前景
對于前端技術(shù)背景開發(fā)者而言,若已有Angular基礎(chǔ),且不希望引入過高的學習成本,需要快速開發(fā)一個復(fù)雜度適中的跨終端App,選擇Ionic依然是一個可行的方案。隨著跨端開發(fā)技術(shù)的日新月異,開發(fā)者應(yīng)持續(xù)關(guān)注新技術(shù)熱點,如NativeScript、React Native、Flutter等。
五、關(guān)于WebView的深入理解
WebView主要用于加載網(wǎng)頁。在瀏覽器相關(guān)應(yīng)用中,WebView是必備組件。通過WebView,手機可以與網(wǎng)頁實時互動。每個獨立的WebView進程都能分配獨立的內(nèi)存,這有助于減小內(nèi)存泄露導(dǎo)致的OOM概率。當WebView發(fā)生崩潰時,不會導(dǎo)致整個應(yīng)用閃退,因為WebView在獨立進程中運行。WebKit是一個開源項目,是Mac OS X的Safari瀏覽器的基礎(chǔ),由KDE的KHTML和KJS發(fā)展而來,包含一些蘋果公司的組件。
一、Hybrid App的概念及其特點

Hybrid App(混合模式移動應(yīng)用)是介于web-app和native-app之間的新型應(yīng)用形式。它融合了Native App良好的用戶交互體驗與Web App跨平臺開發(fā)的優(yōu)勢。隨著“云”時代的到來,這種應(yīng)用模式正在逐漸改變App與運營團隊之間的關(guān)系,引領(lǐng)著一場不可避免的變革。
二、移動應(yīng)用的發(fā)展歷程與Hybrid App的誕生
隨著技術(shù)的發(fā)展和市場的需要,移動終端上的APP經(jīng)歷了從本地化應(yīng)用(Native App)到混合型應(yīng)用(Hybrid APP),再到基于WEB的應(yīng)用Web App的演變過程。Hybrid App的誕生源于對更好用戶體驗和更廣泛的市場覆蓋的雙重追求。
三、Hybrid App的實際應(yīng)用與案例分析
一些知名的移動應(yīng)用已經(jīng)采用了Hybrid App的開發(fā)方式。例如,街旁網(wǎng)的最早應(yīng)用是封裝了客戶端的殼,內(nèi)部實際上是HTML5的網(wǎng)頁。掌上百度和淘寶客戶端Android版也采用了Hybrid App路線,其中掌上百度通過封裝自己的瀏覽內(nèi)核,提供了更像客戶端的體驗。

四、國內(nèi)外Hybrid App開發(fā)框架的比較與選擇
目前市場上存在眾多的Hybrid App開發(fā)框架,如PhoneGap、Titanium等。這些框架在跨平臺開發(fā)移動應(yīng)用方面具有各自的特點。開發(fā)者在選擇時需要根據(jù)實際需求進行考量。例如,PhoneGap能夠提供良好的跨平臺支持,但在用戶體驗方面可能不如原生應(yīng)用;Titanium則能提供接近原生的體驗,但在開發(fā)靈活性方面存在一定限制。
五、Salama開發(fā)套件的特點與優(yōu)勢
Salama是一套全新的Hybrid APP和云端服務(wù)整合的開發(fā)套件。它提供了三種開發(fā)模式,包括高度混合模式、JS模式和低度混合模式。在高度混合模式下,原生和HTML5可以隨意組合,為開發(fā)者提供最高性價比的大型商業(yè)軟件開發(fā)方案。Salama還提供了一整套云服務(wù),包括業(yè)務(wù)處理、數(shù)據(jù)庫操作、文件存儲分發(fā)等服務(wù)。該套件已經(jīng)成功為多家公司提供了解決方案,并在Salama平臺上構(gòu)建了多個知名企業(yè)的應(yīng)用服務(wù)。
Wex5框架的優(yōu)勢和特點

Wex5是一個基于Html5、Javascript、Css3技術(shù)的Web型App框架。相比于PhoneGap和Bootstrap,Wex5具備單View高性能特點,有大幅度性能提升。Wex5框架按照Apache協(xié)議將所有源代碼進行了開源,技術(shù)和模式上顯得非常開放。這使得開發(fā)者可以更加靈活地運用和定制框架,提升開發(fā)效率和用戶體驗。
AppCan與PhoneGap的技術(shù)對比
AppCan和技術(shù)架構(gòu)上與PhoneGap類似,都是Web主體型中間件。它通過結(jié)合一些原生交互效果,能夠達到iOS、Android平臺都比較一致的用戶體驗。相比于PhoneGap和Wex5的開源路線,AppCan相對封閉的技術(shù)路線顯得較為謹慎。盡管如此,AppCan仍然是一個值得關(guān)注的Hybrid App開發(fā)框架,特別是在跨平臺開發(fā)移動應(yīng)用中間件技術(shù)方面。
Hybrid App領(lǐng)域的發(fā)展現(xiàn)狀
Hybrid App領(lǐng)域雖然還處于比較初期的階段,但已經(jīng)吸引了眾多優(yōu)秀的公司和技術(shù)團隊致力于研究。這給開發(fā)者提供了眾多選擇。隨著移動應(yīng)用的普及和需求的增長,Hybrid App正在被越來越多的公司和開發(fā)者所認同,其潛力巨大,勢必會成為未來的主流。

理解WebView:在App中的功能與特點
當你上網(wǎng)閱讀東西時,會選擇一款瀏覽器,如Chrome、火狐等。這些瀏覽器中的紅色區(qū)域可以看作是WebView。WebView是本地應(yīng)用程序內(nèi)嵌的一個瀏覽器,擁有渲染引擎,可通過http/https請求加載內(nèi)容。在移動端App中,WebView經(jīng)常被用于嵌入H5頁面,實現(xiàn)混合型的App。除了渲染頁面功能外,頁面中的js還有能力調(diào)用app系統(tǒng)接口,如彈窗、分享等。這些特點使得WebView在移動端開發(fā)中扮演著重要角色。
WebView在移動端的應(yīng)用及好處
WebView在移動端的應(yīng)用非常廣泛。在安卓端,WebView是一個基于引擎、展現(xiàn)頁面的控件,可以顯示和渲染W(wǎng)eb頁面,與JS交互,也可以和原生代碼交互。很多知名APP如淘寶、支付寶、京東、美團等,都使用了WebView技術(shù)。通過WebView技術(shù),開發(fā)者可以實現(xiàn)更加豐富的功能,提升用戶體驗。WebView技術(shù)也在不斷發(fā)展和完善,為移動應(yīng)用開發(fā)帶來更多可能性。
無論是Wex5框架、AppCan還是WebView技術(shù),都在移動應(yīng)用開發(fā)中扮演著重要角色。開發(fā)者可以根據(jù)實際項目需求選擇適合的中間件和技術(shù),提升開發(fā)效率和用戶體驗。一、支付寶和淘寶的定制WebView組件

通過截圖,我們可以看到支付寶和淘寶的APP內(nèi)嵌了定制的WebView組件。這些組件用于展示額外的信息,具有很高的靈活性。它們不是傳統(tǒng)的組件化設(shè)計,而是以一種更為動態(tài)和定制化的方式呈現(xiàn)內(nèi)容。
二、WebView在APP中的重要性
WebView作為APP的重要組成部分,廣泛應(yīng)用于混合APP和5 App。它的主要功能是加載和顯示網(wǎng)頁,類似于一個瀏覽器。無論是安卓還是iOS系統(tǒng),WebView都扮演著重要的角色。
三、WebView的技術(shù)解析
在Android系統(tǒng)中,WebView的網(wǎng)頁解析和顯示功能是由webkit內(nèi)核實現(xiàn)的。Webkit內(nèi)核被廣泛應(yīng)用于現(xiàn)代的瀏覽器,如Chrome。在Android系統(tǒng)中,webkit被內(nèi)置,為APP提供了強大的網(wǎng)頁處理能力。

四、WebView在Android SDK中的功能和運用
WebView在Android SDK中被封裝為一個重要的組件。通過這個組件,APP可以顯示HTML、CSS和JS內(nèi)容,包括遠程URL??梢岳斫鉃樵贏ndroid開發(fā)的一個activity中,使用了WebView組件來呈現(xiàn)一個HTML頁面給用戶。這里的activity可以看作是Android原生開發(fā)中的一個頁面單元。
五、WebView在mui app框架開發(fā)中的特色
在mui app框架開發(fā)中,WebView被用作一張一張的網(wǎng)頁。這些網(wǎng)頁是webview對象,其操作方法被封裝在html5+的plus.webview對象中。雖然WebView本身只是瀏覽器效果組件,無法實現(xiàn)像原生activity切換那樣的流暢動畫效果。mui開發(fā)組通過技術(shù)實現(xiàn),將WebView映射到原生的java webview,并調(diào)用原生的activity切換動畫,使得webview切換也能達到類似原生app的效果。這一技術(shù)為開發(fā)者提供了更多的可能性,提升了用戶體驗。
總體來說,WebView在移動APP開發(fā)中具有重要地位。無論是原生開發(fā)還是混合開發(fā),WebView都發(fā)揮著不可替代的作用。通過理解WebView的工作原理和特性,開發(fā)者可以更加高效地利用這一工具,打造出更優(yōu)秀的APP。如果你還有其他疑問,歡迎隨時向我提問。[玫瑰]
