在Flutter框架出現(xiàn)之前,主要有以下幾個移動App跨平臺開發(fā)框架:Cordova、Ionic、AppCan、Dcloud、APICloud、React Native。雖然有那么多框架,但是它們的原理都是使用HTML、CSS和JavaScript進行移動App開發(fā),多平臺共用一套代碼,提供了豐富的主流UI庫、用來調(diào)用原生API的JavaScript API包裝器,同時還提供App打包、發(fā)布的工具或服務(wù)。由于這些跨平臺開發(fā)框架是使用標(biāo)準(zhǔn)Web技術(shù)開發(fā),所以它們打包出來的App在性能上,多少都會比原生App差上不少,這也是移動App跨平臺開發(fā)技術(shù)一直不溫不火的原因。
在決定學(xué)習(xí)一門新技術(shù)之前,我們總會拿它與同類技術(shù)進行對比,確保不會把寶貴的學(xué)習(xí)時間浪費在無用的技術(shù)上。所以,接下來我們將在對比中認識我們將要學(xué)習(xí)的Flutter框架。首先是Flutter實現(xiàn)跨平臺開發(fā)的原理,F(xiàn)lutter與現(xiàn)有的移動App跨平臺開發(fā)框架都不一樣,F(xiàn)lutter不是使用標(biāo)準(zhǔn)Web技術(shù),而是借助可移植的圖形加速渲染引擎、高性能的本地ARM代碼,并以此實現(xiàn)跨設(shè)備、跨平臺的高質(zhì)量用戶體驗。
由上我們可以得知,使用Flutter開發(fā)的跨平臺移動App,性能是可以與原生App一模一樣的。你以為這樣就完了嗎?不不不,F(xiàn)lutter框架的能力不止于此!Flutter應(yīng)用的性能甚至可以比原生App更加優(yōu)秀,因為Flutter框架針對性能方面進行了優(yōu)化。
傳統(tǒng)的Web應(yīng)用中會有成千上萬數(shù)量個DOM節(jié)點,所以更新的時候會非?,嵥椤㈩l繁,使頁面加載緩慢,所以現(xiàn)代的Web應(yīng)用開始使用虛擬DOM技術(shù)來提高頁面更新的速度,用一個虛擬DOM,而不是直接調(diào)用類似.getElementById的方法,只操作JavaScript對象,然后再把更改的部分更新到真實DOM,這樣是相當(dāng)方便的。但是添加了虛擬DOM意味著更多的代碼,而且在一個DOM節(jié)點相對較少的頁面中用虛擬DOM,實際上有可能會更慢。
不僅是現(xiàn)代的Web應(yīng)用,其實目前主流的Android于iOS應(yīng)用也是大量使用類似虛擬DOM的技術(shù),即虛擬控件,而且得益于移動設(shè)備的性能優(yōu)勢,使虛擬DOM這種形式的響應(yīng)式框架的優(yōu)點發(fā)揮到極致,使得開發(fā)者忽略了該模式的缺點。
就在平臺與開發(fā)者滿足于這種以硬件性能優(yōu)勢來解決軟件框架的性能缺陷時,F(xiàn)lutter橫空出世!在Flutter的響應(yīng)式框架中,控件樹中的控件直接通過可移植的圖形加速渲染引擎、高性能的本地ARM代碼進行繪制,不再需要通過虛擬DOM或虛擬控件、真實DOM或平臺控件這些中間對象來繪制。Flutter響應(yīng)式框架通過“無中間商賺差價”的方式直接利用硬件的所有性能,所以正如前面所說的,F(xiàn)lutter應(yīng)用的性能比原生App更加優(yōu)秀。
Flutter的優(yōu)秀還不止如此,使用Flutter開發(fā)的應(yīng)用能以60 FPS運行,這是現(xiàn)有的移動端游戲都難以實現(xiàn)的一個性能指標(biāo),例如王者榮耀也只能以40左右的FPS運行,所以使用Flutter創(chuàng)建的用戶界面,性能遠遠優(yōu)于其他跨平臺框架。現(xiàn)在開始學(xué)習(xí)Flutter,就是對未來的投資!