Flutter介紹
Flutter是Google推出的開源移動應用開發(fā)框架。開發(fā)者可以通過開發(fā)一套代碼同時運行在iOS和Android平臺澡屡。
它使用Dart語言進行開發(fā),并且最終編譯成各個平臺的Native代碼,這樣既保證了開發(fā)效率杆烁,也保證了各個平臺的運行效率陪竿。其相當于從頭到尾重寫了一套UI框架禽翼,不依賴具體平臺的組件。其所有的組件都是"Widget"族跛。渲染引擎則依靠高效渲染庫Skia實現(xiàn)闰挡。
下面我們對比一下H5、React Native礁哄、Flutter這些跨平臺的解決方案长酗。
移動端的跨平臺技術
H5技術
常被人提起的H5技術,其實就是網(wǎng)頁+JavaScript桐绒。比如目前的一些流行的JS框架Vue夺脾,React,AngularJS等都是為了構建網(wǎng)頁茉继。針對移動端構建出來的網(wǎng)頁可以實現(xiàn)在跨平臺的功能咧叭,但是其缺點也很明顯:
- 渲染效率低下,用戶體驗差烁竭。很多H5在iOS平臺表現(xiàn)尚可菲茬,但是在Android上特別是一些低端機上的表現(xiàn)確實讓人不敢恭維。
- 網(wǎng)頁調(diào)用設備硬件相關API比較困難派撕,而且支持的功能較少婉弹,實現(xiàn)此類需求是H5的短板。
React Native
React Native(RN)發(fā)布于2015年腥刹,也是使用JavaScript語言進行跨平臺APP的開發(fā)马胧。與H5開發(fā)不同的是,它使用JS橋接技術在運行時編譯成各個平臺的Native代碼衔峰,其使用的技術Facebook的Flux技術佩脊。
其優(yōu)點是目前的生態(tài)比較成熟蛙粘,目前也有很多跨平臺應用使用React Native。它也是跟Flutter對比的主要對象威彰。
其特點是:
- 使用JavaScript語言出牧,由于JS被廣泛地使用,所以RN也很容易被接受歇盼。
- RN依賴JS的運行時環(huán)境舔痕,也就是JS橋接技術。其使用Facebook的Flux架構豹缀。
- RN僅提供了UI渲染和設備訪問的API伯复,很多功能必須依賴第三方庫來實現(xiàn)對本地組件的使用。
- 生態(tài)目前比較完善邢笙,使用的公司也比較多啸如,特別是對JS比較熟悉的同學容易上手。
- 支持熱部署氮惯,開發(fā)過程中可以節(jié)約很多時間叮雳。
但是它也并不是完美的:
- 它的渲染方式還是調(diào)用各個平臺的原生控件,有時需要針對不同的平臺做不同的優(yōu)化妇汗。
- 其性能相對于H5有很大的提高帘不,但是并沒有完美解決,白屏杨箭,丟幀問題依然存在寞焙。
Flutter
Flutter也看到了目前的跨平臺解決方案并不完美,所以它借鑒了React Native的一些思想互婿,做出了很大的優(yōu)化棺弊。它將代碼編譯成原生代碼,并且直接在各個平臺中使用其高效渲染引擎Skia進行渲染擒悬,沒有橋接,不調(diào)用平臺相關控件稻艰。
這種設計思想完美解決了不同平臺的性能問題懂牧。
歸功于其設計思想,我們可以真正實現(xiàn)一套代碼尊勿,運行不同的平臺僧凤。在其推出之后,關注的開發(fā)者數(shù)量和相關的教程的增長速度遠超當時的React Native元扔。
其特點包括:
- 使用Google自主開發(fā)的Dart語言躯保。Dart語言是一個強類型的語言,很好地支持面向?qū)ο笈煊铮⑶乙子趯W習和使用途事。
- 使用谷歌自己的Skia渲染引擎验懊,Android自帶Skia引擎,iOS平臺上Flutter也會把Skia引擎打包到APP中尸变,實現(xiàn)高效渲染义图。
- 目前有非常豐富的視圖組件,可以點擊這里查看其組件目錄召烂,包括Android上常用的材料設計(Material Design)的UI風格碱工,和iOS風格(Cupertino)。由于其渲染不依賴各平臺相關組件奏夫,所以運行在不同平臺上的效果是一致的怕篷。
- 同樣支持熱部署,開發(fā)時可以像網(wǎng)頁開發(fā)一樣實時看到效果酗昼。
目前它存在的一些問題是:
- 國內(nèi)學習資源目前并不豐富廊谓,使用Flutter的公司也比較少。
- 相關的生態(tài)還沒有React Native那樣豐富仔雷,但是其發(fā)展速度大大超過了React Native蹂析。
總結
雖然Flutter目前并不是非常流行,但是筆者相信它是跨平臺解決方案的未來碟婆。
如果谷歌的新系統(tǒng)Fuchsia OS能像當今的Android這樣如日中天电抚,甚至替代掉Android的話,F(xiàn)lutter的發(fā)展也會迎來它的頂峰竖共。
本系列博客我們就來深入學習和探討使用Flutter蝙叛。
后面的文章我們會逐步深入學習Flutter的功能與實戰(zhàn)。
我的博客中關于Flutter的所有文章可以點擊這里找到公给,歡迎關注借帘!
如果有問題可以留言,或者給我發(fā)郵件lloyd@examplecode.cn淌铐,期待我們共同學習與成長肺然!