1:原生開發(fā)與跨平臺技術(shù)對比
1.1 原生開發(fā)
原生應(yīng)用程序是指某一個移動平臺(比如iOS或安卓)所特有的應(yīng)用咳燕,使用相應(yīng)平臺支持的開發(fā)工具和語言妖混,并直接調(diào)用系統(tǒng)提供的SDK API绒窑,原生開發(fā)有以下主要優(yōu)勢:
- 可訪問平臺全部功能(GPS僧诚、攝像頭)丸逸;
- 速度快某饰、性能高儒恋、可以實現(xiàn)復(fù)雜動畫及繪制,整體用戶體驗好黔漂;
主要缺點:
- 平臺特定诫尽,開發(fā)成本高;不同平臺必須維護不同代碼炬守,人力成本隨之變大牧嫉;
- 內(nèi)容固定,動態(tài)化弱减途,大多數(shù)情況下酣藻,有新功能更新時只能發(fā)版;
1.2 跨平臺技術(shù)簡介
針對原生開發(fā)面臨問題鳍置,跨平臺技術(shù)應(yīng)運而生辽剧,根據(jù)其原理,主要分為三類:
- H5+原生(Cordova税产、Ionic怕轿、微信小程序)
- JavaScript開發(fā)+原生渲染 (React Native、Weex辟拷、快應(yīng)用)
- 自繪UI+原生(QT for mobile撞羽、Flutter)
下面主要說一下第三種(自繪UI+原生)跨平臺技術(shù)方案(其他方案介紹請查看移動技術(shù)簡介 )這種技術(shù)的思路是,通過在不同平臺實現(xiàn)一個統(tǒng)一接口的渲染引擎來繪制UI梧兼,而不依賴系統(tǒng)原生控件放吩,所以可以做到不同平臺UI的一致性。<mark>注意羽杰,自繪引擎解決的是UI的跨平臺問題渡紫,如果涉及其它系統(tǒng)能力調(diào)用,依然要涉及原生開發(fā)</mark>基于此目前Flutter的優(yōu)缺點如下:
主要優(yōu)點
- 性能高考赛;由于自繪引擎是直接調(diào)用系統(tǒng)API來繪制UI惕澎,所以性能和原生控件接近。
- 靈活颜骤、組件庫易維護唧喉、UI外觀保真度和一致性高;由于UI渲染不依賴原生控件,也就不需要根據(jù)不同平臺的控件單獨維護一套組件庫八孝,所以代碼容易維護董朝。
- 開發(fā)效率:Flutter的熱重載可幫助開發(fā)者快速地進行測試、構(gòu)建UI干跛、添加功能并更快地修復(fù)錯誤子姜。在iOS和Android模擬器或真機上可以實現(xiàn)毫秒級熱重載,并且不會丟失狀態(tài)楼入。
主要缺點
- 動態(tài)性不足哥捕;為了保證UI繪制性能,自繪UI系統(tǒng)一般都會采用AOT模式編譯其發(fā)布包嘉熊,所以應(yīng)用發(fā)布后遥赚,不能像Hybrid和RN那些使用JavaScript(JIT)作為開發(fā)語言的框架那樣動態(tài)下發(fā)代碼。
- 現(xiàn)階段APP啟動速度低于原生APP,因為Appqi因存在Flutter運行時環(huán)境的初始化過程
- 特定功能性能略低于Native:混合棽簦或部分功能需要基于Native來實現(xiàn)
- Flutter不支持直接操作攝像機凫佛、GPS等硬件以及平臺相關(guān)的一些服務(wù)
針對移動端的系統(tǒng)底層的一些服務(wù)以及硬件相關(guān)的操作,目前有兩種方案:
1: flutter官方插件管理平臺pub提供了一些基礎(chǔ)的插件開發(fā)者使用.這些插件的基本原理是內(nèi)部封裝iOS和android端的原生API泽腮,對上層調(diào)用者提供統(tǒng)一的dart接口(例如:操作攝像頭的camera 插件,用于本地文件存儲的shared_preferences 插件)御蒲。
2:開發(fā)者自己開發(fā)一些插件供Flutter調(diào)用(需要對兩端系統(tǒng)sdk都比較了解)
- Flutter安裝包比原生安裝包大很多(主要是工程包含flutter SDK ,并且flutter不支持bitCode)。
- Flutter內(nèi)存占用比較大詳見閑魚技術(shù)團隊對Android Flutter內(nèi)存初探文章
2:Flutter應(yīng)用概況
2.1.國內(nèi)使用Flutter的主流應(yīng)用
-
o閑魚:混合棧模式诊赊,寶貝詳情頁等10+頁面采用了Flutter
o京東金融:混合棧模式
o騰訊Now直播:僅iOS
2.2.國外使用Flutter的主流應(yīng)用
- oGoogle Ads
- oHamilton Musical
- oAbbey Road Studios
- oReflectly
- oAppTree:僅Android
2.3.Flutter社區(qū)App列表
Flutter社區(qū)App列表
這個社區(qū)收集了熱度較高的Flutter App數(shù)據(jù)厚满,總數(shù)為346個,其中92個為開源項目
2.4.GitHub的Flutter項目列表
GitHub的Flutter項目列表
GitHub上flutter相關(guān)的項目有23,323個碧磅,其中分布于各平臺的特性插件大致有5K+碘箍,Android的有400+
總結(jié):
經(jīng)過調(diào)研我認(rèn)為,F(xiàn)lutter確實解決了UI的跨平臺問題鲸郊,UI層面性能接近原生丰榴,目前確實發(fā)展十分迅速,但是生態(tài)遠(yuǎn)遠(yuǎn)沒到成熟的地步秆撮,這對于資源有限的應(yīng)用開發(fā)團隊來說是很致命的四濒,且現(xiàn)在在開發(fā)調(diào)試上還是有些痛苦的,比如無法準(zhǔn)確定位錯誤堆棧等职辨。