在Flutter框架出現(xiàn)之前官扣,主要有以下幾個(gè)移動(dòng)App跨平臺(tái)開發(fā)框架:Cordova翅敌、Ionic、AppCan醇锚、Dcloud哼御、APICloud、React Native焊唬。雖然有那么多框架恋昼,但是它們的原理都是使用HTML、CSS和JavaScript進(jìn)行移動(dòng)App開發(fā)赶促,多平臺(tái)共用一套代碼液肌,提供了豐富的主流UI庫、用來調(diào)用原生API的JavaScript API包裝器鸥滨,同時(shí)還提供App打包嗦哆、發(fā)布的工具或服務(wù)谤祖。由于這些跨平臺(tái)開發(fā)框架是使用標(biāo)準(zhǔn)Web技術(shù)開發(fā),所以它們打包出來的App在性能上老速,多少都會(huì)比原生App差上不少粥喜,這也是移動(dòng)App跨平臺(tái)開發(fā)技術(shù)一直不溫不火的原因。
在決定學(xué)習(xí)一門新技術(shù)之前橘券,我們總會(huì)拿它與同類技術(shù)進(jìn)行對比额湘,確保不會(huì)把寶貴的學(xué)習(xí)時(shí)間浪費(fèi)在無用的技術(shù)上。所以旁舰,接下來我們將在對比中認(rèn)識(shí)我們將要學(xué)習(xí)的Flutter框架锋华。首先是Flutter實(shí)現(xiàn)跨平臺(tái)開發(fā)的原理,F(xiàn)lutter與現(xiàn)有的移動(dòng)App跨平臺(tái)開發(fā)框架都不一樣箭窜,F(xiàn)lutter不是使用標(biāo)準(zhǔn)Web技術(shù)毯焕,而是借助可移植的圖形加速渲染引擎、高性能的本地ARM代碼磺樱,并以此實(shí)現(xiàn)跨設(shè)備纳猫、跨平臺(tái)的高質(zhì)量用戶體驗(yàn)。
由上我們可以得知坊罢,使用Flutter開發(fā)的跨平臺(tái)移動(dòng)App续担,性能是可以與原生App一模一樣的擅耽。你以為這樣就完了嗎活孩?不不不,F(xiàn)lutter框架的能力不止于此乖仇!Flutter應(yīng)用的性能甚至可以比原生App更加優(yōu)秀憾儒,因?yàn)镕lutter框架針對性能方面進(jìn)行了優(yōu)化。
傳統(tǒng)的Web應(yīng)用中會(huì)有成千上萬數(shù)量個(gè)DOM節(jié)點(diǎn)乃沙,所以更新的時(shí)候會(huì)非称鹬海瑣碎、頻繁警儒,使頁面加載緩慢训裆,所以現(xiàn)代的Web應(yīng)用開始使用虛擬DOM技術(shù)來提高頁面更新的速度,用一個(gè)虛擬DOM蜀铲,而不是直接調(diào)用類似.getElementById的方法边琉,只操作JavaScript對象,然后再把更改的部分更新到真實(shí)DOM记劝,這樣是相當(dāng)方便的变姨。但是添加了虛擬DOM意味著更多的代碼,而且在一個(gè)DOM節(jié)點(diǎn)相對較少的頁面中用虛擬DOM厌丑,實(shí)際上有可能會(huì)更慢定欧。
不僅是現(xiàn)代的Web應(yīng)用渔呵,其實(shí)目前主流的Android于iOS應(yīng)用也是大量使用類似虛擬DOM的技術(shù),即虛擬控件砍鸠,而且得益于移動(dòng)設(shè)備的性能優(yōu)勢扩氢,使虛擬DOM這種形式的響應(yīng)式框架的優(yōu)點(diǎn)發(fā)揮到極致,使得開發(fā)者忽略了該模式的缺點(diǎn)爷辱。
就在平臺(tái)與開發(fā)者滿足于這種以硬件性能優(yōu)勢來解決軟件框架的性能缺陷時(shí)类茂,F(xiàn)lutter橫空出世!在Flutter的響應(yīng)式框架中托嚣,控件樹中的控件直接通過可移植的圖形加速渲染引擎巩检、高性能的本地ARM代碼進(jìn)行繪制,不再需要通過虛擬DOM或虛擬控件示启、真實(shí)DOM或平臺(tái)控件這些中間對象來繪制兢哭。Flutter響應(yīng)式框架通過“無中間商賺差價(jià)”的方式直接利用硬件的所有性能,所以正如前面所說的夫嗓,F(xiàn)lutter應(yīng)用的性能比原生App更加優(yōu)秀迟螺。
Flutter的優(yōu)秀還不止如此,使用Flutter開發(fā)的應(yīng)用能以60 FPS運(yùn)行舍咖,這是現(xiàn)有的移動(dòng)端游戲都難以實(shí)現(xiàn)的一個(gè)性能指標(biāo)矩父,例如王者榮耀也只能以40左右的FPS運(yùn)行,所以使用Flutter創(chuàng)建的用戶界面排霉,性能遠(yuǎn)遠(yuǎn)優(yōu)于其他跨平臺(tái)框架∏现辏現(xiàn)在開始學(xué)習(xí)Flutter,就是對未來的投資攻柠!