自己寫flutter也有段時(shí)間了,這次來聊聊flutter開發(fā)App和原生iOS開發(fā)App各有什么優(yōu)缺點(diǎn).

10多年的偏關(guān)網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整偏關(guān)建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“偏關(guān)網(wǎng)站設(shè)計(jì)”,“偏關(guān)網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
不廢話,直奔主題????
騰訊課堂14M
今日頭條3M
閑魚22M
百度貼吧13M
螞蟻財(cái)富56.8M
百度網(wǎng)盤14M
手機(jī)淘寶15M
貝殼找房8M
由粗粒度小組件動(dòng)態(tài)拼裝出頁面,Native端已經(jīng)有很多成熟的框架,如天貓的Tangram。
開發(fā)語言:iOS、Android
適用場(chǎng)景:快速迭代的活動(dòng)營(yíng)銷頁面
優(yōu)點(diǎn):無侵入,更新簡(jiǎn)單
缺點(diǎn):提前預(yù)埋,擴(kuò)展性差,靈活性差
以webview作為容器的app,歷史悠久,最早到2011年。
開發(fā)語言:HTML
適用場(chǎng)景:雙端嚴(yán)格一致的銀行類app,容器類的支付寶小程序等
優(yōu)點(diǎn):動(dòng)態(tài)更新,跨平臺(tái)
缺點(diǎn):性能,加載速度
UI用Xml+JS表達(dá),用Native View渲染。
開發(fā)語言:Xml+JS
適用場(chǎng)景:雙端嚴(yán)格一致的銀行類app,容器類的支付寶小程序等
優(yōu)點(diǎn):native組件,生態(tài)成熟
缺點(diǎn):三方庫crash,性能缺陷
UI用Dart表達(dá),用Dart engine渲染。
Flutter官方不支持動(dòng)態(tài)化。原因是Flutter在 Release 模式下構(gòu)建的是 AOT 編譯產(chǎn)物,在 Debug 模式下構(gòu)建的是 JIT ,AOT 依賴的 Dart VM 和 JIT 并不一樣, JIT Release 并不支持 iOS 設(shè)備。可行的方案是:AOT 需要一個(gè)編譯后的 “Dart VM”。抽離一份 DartVM 獨(dú)立編譯,再以動(dòng)態(tài)庫的形式引入項(xiàng)目。
開發(fā)語言:Dart
適用場(chǎng)景:iOS、Android、Web、Desktop、Embed
優(yōu)點(diǎn):性能最佳
缺點(diǎn):增大包體積 20MB+
大廠的主流方案。UI用JS表達(dá),用Dart engine渲染。
開發(fā)語言:JS、類JS
適用場(chǎng)景:iOS、Android
優(yōu)點(diǎn):性能最佳
缺點(diǎn):需要掌握J(rèn)S、Dart兩個(gè)語言和框架
大廠的主流方案。UI用Dart表達(dá),用Dart engineX渲染。
開發(fā)語言:Dart
適用場(chǎng)景:iOS、Android
優(yōu)點(diǎn):性能最佳
缺點(diǎn):需要改造Dart engine
1、 美團(tuán)外賣Flutter動(dòng)態(tài)化實(shí)踐
2、 攜程App 首頁動(dòng)態(tài)化探索
3、 Flutter 動(dòng)態(tài)化在最右 App 中的實(shí)踐
4、 Flutter 動(dòng)態(tài)化熱更新的思考與實(shí)踐
5、 NOW直播Flutter動(dòng)態(tài)搜索列表頁實(shí)現(xiàn)
6、 Flutter動(dòng)態(tài)化的方案對(duì)比及最佳實(shí)現(xiàn)-閑魚
7、 基于JavaScript 的MXFlutter
本文對(duì)比的是 UIWebView、WKWebView、flutter_webview_plugin(在iOS中使用的是WKWebView)的加載速度,內(nèi)存使用情況。
測(cè)試網(wǎng)頁打開的速度,只需要獲取 WebView 在開始加載網(wǎng)頁和網(wǎng)頁加載完成時(shí)的時(shí)間戳,時(shí)間戳的差即為打開網(wǎng)頁的時(shí)間
為了使差異更明顯,我們選擇較為復(fù)雜的 新浪首頁 進(jìn)行加載的對(duì)比,為了減小網(wǎng)絡(luò)對(duì)加載速度的影響,我們讓手機(jī)連接同一個(gè)網(wǎng)絡(luò),分別進(jìn)行 10 次測(cè)試然后取平均值,另外,我們需要關(guān)閉 WebView 的緩存,防止緩存對(duì)加載速度產(chǎn)生影響
下面使筆者進(jìn)行 10 次測(cè)試所得到的數(shù)據(jù)
結(jié)果讓我有點(diǎn)驚訝,一直以為 WKWebView 會(huì)是個(gè)王者。結(jié)果看,速度上 WKWebView 略慢一點(diǎn),不過總體差異不大(該結(jié)果僅僅是測(cè)試新浪的結(jié)果,僅供參考啦)
在這里,筆者又加了一個(gè)測(cè)試,嘗試記錄從 viewController 的 viewDidLoad 到 webview 的 didFinish 時(shí)間,測(cè)試了新浪的數(shù)據(jù),如下:
UIWebViewA : 4970、3808、3815、4250、3556 avg(4079.8) (加載完所有頁面)
UIWebViewB : 4103、3124、3070、3256、2835 avg(3277.6)(加載sina完畢)
WKWebView : 3672、3032、2892、2912、2739 avg(3049.4)
flutter_webView : 4532、3901、4310、3496、3378 avg(3923.4)
其中可以看到,webView 有兩行,UIWebViewB 的數(shù)據(jù)就是加載 sina 主站的時(shí)間;UIWebViewA 的數(shù)據(jù)是因?yàn)樵诩虞d完 sina 主站之后,新浪又加載了一個(gè) ,所以導(dǎo)致總時(shí)間延長(zhǎng),不過即使按照 UIWebViewB 的數(shù)據(jù)來比較,也是 wkWebView 略勝一籌。
此處可以看出 flutter_webView 使用的是 wkwebView,所以它吃虧的主要原因是 flutter 包了一層。
結(jié)論:
速度(didStart - didFinish) UIWebView flutter_webview WKWebView
速度(viewDidLoad - didFinish)WKWebView UIWebView flutter_webview
這里查看內(nèi)存使用的是 xcode 的 debug session 中的 memory。
首先看之前測(cè)試時(shí),連續(xù)打開十次新浪的內(nèi)存情況
接著我們?cè)诳匆幌麓蜷_淘寶首頁的內(nèi)存情況
從圖上可以看出,WKWebView 在內(nèi)存方面有很大的優(yōu)勢(shì)啊,UIWebView 的內(nèi)存是真的傷啊,然后 debug 看了一下 flutter_webView,他使用的就是原生的 webView 。
他相比較原生 WKWebView 的內(nèi)存開銷稍大一點(diǎn),從測(cè)試表現(xiàn)來看,一般大個(gè) 30 MB 左右。
結(jié)論:內(nèi)存 WKWebView flutter_webview UIWebView
可以在 html5test 中對(duì)瀏覽器的兼容性進(jìn)行評(píng)分,通過測(cè)試發(fā)現(xiàn)得分分別如下
因?yàn)?flutter 里使用的就是 WK,所以和原生的 WKWebView 一樣都是 444 分,比 UIWebView 的 437 略勝一籌
結(jié)論:兼容性 WKWebView = flutter_webview UIWebView
UIWebView : 速度相比較 WKWebView 稍快一點(diǎn),但是內(nèi)存是一大硬傷,所以只要條件允許,就不推薦使用了
WKWebView : 速度略慢一點(diǎn),不過差別不大,總體可以接受。是比UIWebView更好的選擇,推薦使用。
flutter_webView_plugin :在iOS中使用的就是原生的WKWebView,所以總體和 native WKWebView 表現(xiàn)差不多。如果是混編項(xiàng)目中,因?yàn)樗话艘粚樱皂撁婕虞d上存在一定的劣勢(shì),所以混編項(xiàng)目中仍然推薦使用 WKWebView。不過如果從多端考慮、以及項(xiàng)目可遷移等,那么使用也未嘗不可,就是維護(hù)成本要增加一些,需要維護(hù)兩套 webView。這個(gè)就需要根據(jù)自己的情況自己取舍了。
前言
為什么跨平臺(tái)是發(fā)展趨勢(shì)?
同一個(gè)應(yīng)用,各個(gè)“端”獨(dú)立開發(fā),不僅開發(fā)周期長(zhǎng),而且人員成本高。同時(shí),作為技術(shù)人員,也不應(yīng)該滿足于這種重復(fù)、低能的工作狀態(tài)。在這樣的形勢(shì)下,跨平臺(tái)的技術(shù)方案也受到越來越多人和企業(yè)的關(guān)注。
本篇文章我將從原理、優(yōu)缺點(diǎn)等方面為大家分享跨平臺(tái)技術(shù)
一. H5
說到跨平臺(tái),沒人不知道H5。不管是在Mac、Windows、Linux、iOS、Android還是其他平臺(tái),只要給一個(gè)瀏覽器,連“月球”上它都能跑。
1.瀏覽器架構(gòu)
下面,我們來看看讓H5如此橫行霸道的瀏覽器的架構(gòu):
瀏覽器由以上7個(gè)部分組成,而“渲染引擎”是性能優(yōu)化的重中之重,一起了解其中的渲染原理。
2.渲染引擎原理
不同的瀏覽器內(nèi)核不同,渲染過程會(huì)不太一樣,但主要流程還是一致的。
分為下面6步驟:
從以上6步,我們可以總結(jié)渲染優(yōu)化的要點(diǎn):
以上就是瀏覽器端的內(nèi)容。但H5作為跨平臺(tái)技術(shù)的載體,是如何與不同平臺(tái)的App進(jìn)行交互的呢?這時(shí)候JSBridge就該出場(chǎng)了。
3.JSBridge原理
JSBridge,顧名思義,是JS和Native之間的橋梁,用來進(jìn)行JS和Native之間的通信。
通信分為以下兩個(gè)維度:
那么App內(nèi)加載H5的過程是什么樣的呢?
4.App打開H5過程
打開H5分為4個(gè)階段:
這四步,對(duì)應(yīng)的過程如上圖所以,我們可以針對(duì)性的做性能優(yōu)化。
5.優(yōu)缺點(diǎn)分析
下面,我們進(jìn)行H5的優(yōu)缺點(diǎn)分析:
優(yōu)點(diǎn)
缺點(diǎn)
雖然H5目前還存在不足,但隨著PWA、WebAssembly等技術(shù)的進(jìn)步,相信H5在未來能夠得到越來也好的發(fā)展。
二.小程序
2018年是微信小程序飛速發(fā)展的一年,19年,各大廠商快速跟進(jìn),已經(jīng)有了很大的影響力。下面,我們以微信小程序?yàn)槔治鲂〕绦虻募夹g(shù)架構(gòu)。
小程序跟H5一樣,也是基于Webview實(shí)現(xiàn)。但它包含View視圖層、App Service邏輯層兩部分,分別獨(dú)立運(yùn)行在各自的WebView線程中。
1.View
可以理解為h5的頁面,提供UI渲染。由WAWebview.js來提供底層的功能,具體如下:
每個(gè)窗口都有一個(gè)獨(dú)立的WebView進(jìn)程,因此微信限制不能打開超過5個(gè)層級(jí)的頁面來保障用戶體驗(yàn)。
2. App Service
提供邏輯處理、數(shù)據(jù)請(qǐng)求、接口調(diào)用。由WAService.js來提供底層的功能,具體如下:
運(yùn)行環(huán)境:
僅有一個(gè)WebView進(jìn)程
3.View App Service通信
視圖層和邏輯層通過系統(tǒng)層的JSBridage進(jìn)行通信,邏輯層把數(shù)據(jù)變化通知到視圖層,觸發(fā)視圖層頁面更新,視圖層將觸發(fā)的事件通知到邏輯層進(jìn)行業(yè)務(wù)處理。
4. 優(yōu)缺點(diǎn)分析
優(yōu)點(diǎn)
缺點(diǎn)
既然WebView性能不佳,那有沒有更好的方案呢?下面我們看看React Native。
三.React Native
RN的理念是在不同平臺(tái)上編寫基于React的代碼,實(shí)現(xiàn)Learn once, write anywhere。
Virtual DOM在內(nèi)存中,可以通過不同的渲染引擎生成不同平臺(tái)下的UI,JS和Native之間通過Bridge通信
1.React Native 工作原理
在 React 框架中,JSX 源碼通過 React 框架最終渲染到了瀏覽器的真實(shí) DOM 中,而在 React Native 框架中,JSX 源碼通過 React Native 框架編譯后,與Native原生的UI組件進(jìn)行映射,用原生代替DOM元素來渲染,在UI渲染上非常接近Native App。
2.React Native 與Native平臺(tái)通信
3.優(yōu)缺點(diǎn)分析
優(yōu)點(diǎn)
缺點(diǎn)
4.RN展望
雖然RN還存在不足,但RN新版本已經(jīng)做了如下改進(jìn),并且RN團(tuán)隊(duì)也在積極準(zhǔn)備大版本重構(gòu),能否成為開發(fā)者們所信賴的跨平臺(tái)方案,讓我們拭目以待。
既然React Native在渲染方面還擺脫不了原生,那有沒有一種方案是直接操控GPU,自制引擎渲染呢,我們終于迎來了Flutter!
四.Flutter
Flutter是Google開發(fā)的一套全新的跨平臺(tái)、開源UI框架,支持iOS、Android系統(tǒng)開發(fā),并且是未來新操作系統(tǒng)Fuchsia的默認(rèn)開發(fā)套件。渲染引擎依靠跨平臺(tái)的Skia圖形庫來實(shí)現(xiàn),依賴系統(tǒng)的只有圖形繪制相關(guān)的接口,可以在最大程度上保證不同平臺(tái)、不同設(shè)備的體驗(yàn)一致性,邏輯處理使用支持AOT的Dart語言,執(zhí)行效率也比JavaScript高得多。
1.Flutter架構(gòu)原理
2.Dart優(yōu)勢(shì)
很多人會(huì)好奇,為什么Flutter要用Dart,而不是用JavaScript開發(fā),這里列下Dart的優(yōu)勢(shì)
3.優(yōu)缺點(diǎn)分析
優(yōu)點(diǎn)
缺點(diǎn)
新聞名稱:包含flutter優(yōu)勢(shì)的詞條
本文地址:http://chinadenli.net/article39/dsgphsh.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)站排名、營(yíng)銷型網(wǎng)站建設(shè)、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
營(yíng)銷型網(wǎng)站建設(shè)知識(shí)