官术网_书友最值得收藏!

3.6 移動App開發

3.6.1 Native App

Native App(原生App)開發模式是指使用操作系統本地支持的語言進行開發,直接對接本地操作系統。Android系統開發基于Java語言,底層調用Android的API,iOS系統開發基于Objective-C或者Swift語言,底層調用iOS提供的API。

優點:

■ 直接依托于操作系統,交互性最強,性能最好,體驗最優。

■ 直接調用本地資源接口,功能最為強大。

■ 經過應用商店審核把關,安全性較高。

缺點:

■ 開發與維護成本高,無法跨平臺,不同平臺Android和iOS上都要各自獨立開發維護。

■ 版本更新煩瑣不及時。Android中可以選擇直接下載整個APK進行更新,但是也會有更新提示。iOS中,必須通過AppStore更新并審核。

■ 原生應用內容,不支持搜索引擎。

3.6.2 Hybrid App

Hybrid App(混合開發)模式是指使用JS等網頁語言開發實現出類似原生效果的系統,開發框架中混合了業務領域語言(DSL)與原生語言。混合模式的App也要通過應用商店分發給用戶安裝。Hybrid App兼具了Native App功能體驗好與Web App使用HTML5跨平臺開發低成本的優勢。

優點:

■ 開發與維護成本較低。Hybrid模式下,由原生語言提供統一的API給JS調用,實際的主要邏輯由H5來完成,只需要一套代碼,多端適用,可以有效利用Web開發資源。

■ 功能更加完善,性能和體驗比Web網站好。可以調用原生API實現原生App的功能,另外性能也更接近原生App。

缺點:

■ 整體處于原生開發與H5 Web站之間,相比原生功能體驗和性能仍有差距。

■ 開發框架中混合了DSL與原生語言,架構較復雜,具有一定的侵入性。

混合模式開發可以分為四類模式。

(1)原生為主內嵌網頁的模式

原生語言作為架構基礎,實現頁面框架、首頁、設備調用等功能,而H5頁面實現主要業務。交互強、性能要求高的界面用原生開發,業務變化較頻繁的界面用H5開發。在人員配備上需要最少的原生開發人員,大量人員進行H5開發。這種模式因為侵入性較小所以系統最為穩定,可根據情況選擇使用原生還是使用網頁開發,所以較為靈活,同時此種模式可以復用前端開發人員,是主流的開發模式。

(2)JavaScript橋接與WebView渲染模式

如圖3-10所示,PhoneGap、Cordova、Ionic等平臺基于WebView進行UI渲染,使用JaveScript橋接原生服務,WebView是一個瀏覽器內核。在開發時使用Web方式處理實際的邏輯,UI通過內嵌WebView瀏覽器來顯示HTML代碼。同時為獲取原生能力,通過JavaScriptCore橋接到原生系統,獲取服務。

圖3-10 JavaScript橋接與WebView渲染模式

(3)完全JavaScript橋接模式

ReactNative與Week等平臺舍棄使用WebView,使用JavaScriptCore調用系統UI控件和系統服務,UI最終會渲染成原生的控件。如圖3-11所示。

圖3-11 完全JavaScript橋接模式

ReactNative與Week在前端分別采用React和Vue作為DSL,這兩種DSL都會生成Virtual DOM。React和Vue中虛擬DOM最終會映射為瀏覽器DOM樹,而ReactNative與Week中的虛擬DOM會通過JavaScriptCore映射為原生控件樹。JavaScriptCore是一個JavaScript解釋器,為JavaScript提供運行環境,也是JavaScript與原生服務之間通信的橋梁,UI顯示也要通過這個橋梁調用原生OEM widgets。通常情況下,訪問widgets的頻率非常高,尤其是在動畫與滑動操作場景,通過JS橋接可能會導致性能問題。

(4)原生編譯模式

Google出品的Flutter不使用原生的OEM Widgets(或DOM WebViews),而是使用自己的Engine來繪制Widgets,Flutter Engine直接對接系統層的畫布和事件,定制自己的Widget,如圖3-12所示。

圖3-12 原生編譯模式

Flutter使用Dart語言開發,Dart可以被編譯(AOT,預先編譯)成不同平臺的本地代碼,讓Flutter可以直接和平臺通信而不需要一個中間的橋接過程,從而提高了性能。

主站蜘蛛池模板: 松阳县| 丹寨县| 中山市| 长岭县| 余干县| 中西区| 宕昌县| 峨山| 德昌县| 新巴尔虎左旗| SHOW| 息烽县| 尼玛县| 乐清市| 玛纳斯县| 清远市| 南阳市| 综艺| 驻马店市| 玉树县| 广安市| 石河子市| 鱼台县| 北碚区| 巴林左旗| 宝应县| 光泽县| 襄垣县| 梁河县| 泰州市| 祥云县| 襄城县| 常山县| 兴安县| 朝阳区| 嫩江县| 荥经县| 拉萨市| 新竹县| 连平县| 浦北县|