1. 程式人生 > >2017Google開發者大會之Flutter

2017Google開發者大會之Flutter

Flutter框架

Flutter框架,一言以蔽之就是能夠使用一套相同的Dart語言程式碼同時實現android和ios跨平臺應用的框架,同時兼備高效能和快速開發。

跨平臺框架

跨平臺應用的框架,眼下相似的輪子也有很多例如:Phonegap,Xamarin,大熱的react native,還有weex等等,這裡有一篇好文就比較詳盡的介紹了目前各種技術優缺點,包括這裡安利的Flutter框架(這貨之前叫Sky)傳送門。
目前比較流行的跨平臺技術主要有HTML5和react native(歡迎補充),雖然HTML5足夠靈活,但是移動端網頁的效能始終不如人意,使用者體驗不高,在不同瀏覽器下也有不同程度細微的差異;而react native剛好在效能和靈活性上達到了一個平衡,但對於只擼前端的同學,要靈活運用這個框架,也有相當的難度。
假設你已經閱讀過上面的文章,Flutter有一個特點就是UI是自繪的並不依賴系統提供的控制元件,那跟瀏覽器有啥區別尼,沒錯你確實可以把它當成一個簡化版的瀏覽器,剛才文章也提到程式碼組織有Chromium風格,個人粗略學習後分析,在某些概念上都跟Chromium如出一轍。
請看圖,來自官網的視訊:

640?wx_fmt=png&wxfrom=5&wx_lazy=1

來自Chromium,傳送門

0?wx_fmt=png

上圖的Element可以和下圖的div,p等對應起來,所以Element左邊Rectangle green就是我們平常基於div+css構建的元件,右邊Render Rectangle green 可以和下圖 Render Object對應起來。Render Layer層上圖雖然沒有體現,但在框架程式碼裡確實也有這樣的存在。

繼續深入

好繼續接著說,自繪UI有好處也有弊端,好處就是能夠最大限度在android和ios上統一UI,這樣就不單止在業務程式碼上統一,使用者體驗也能統一(什麼?產品說要顯示出不同平臺的差異性,框架的開發者早就想到了,所以demo裡面也提供一鍵切換android和ios的示例);弊端,沒有利用系統提供的元件,基本只能自力更生了,幸好框架也提供了一套基礎元件,能夠滿足一些簡單的頁面需求,這些元件當然也是有坑的啦,畢竟沒有相當嚴謹的測試。
再說說框架的其他方面,主要的開發語言就是Dart,Dart曾經有一個巨集偉的目標就是取代JS,但是很可惜失敗了,也漸漸消失在人們的記憶中,但是為啥要挖出這樣非主流的語言作為這個框架開發的主力語言,其實我也不知道為啥,可能那群大神不死心吧,明明那麼好的語言。不過尼,作為目標替代JS的語言,Dart設計更加嚴謹(JS好像是十天就造出來的),從一開始時就考慮很多使用場景(瀏覽器,服務端,移動端),基本就像java一樣的泛用型語言(JS是後天不停加buff),所以能構建更為穩定可靠的應用。對於前端和android的同學,這門語言的學習成本其實並不高,大概一兩週就能掌握。
框架的開發體驗,框架是受到react的啟發,構建元件的程式碼方式也有react的風格(前端的同學看看),但這並不是重點,重點是開發時支援hot reload(足矣),不過也有不足,並不支援jsx,UI比較複雜的話,程式碼就太難看了,以後應該會有改進。

效能與相容性

目前框架的效能,已經無限接近原生,這是個人的使用感受,之後再補上視訊和體驗的demo。
相容性方面,官網提到是android 4.1以上 和 ios8以上,這還需要進一步驗證

框架以外

再說說專案本身,是相當有節操的,應該並不是玩票性質,個人觀察這專案有一段時間,開發者幾乎在不停持續的commit,每次跑demo都能看到比較明顯的改進(這也是讓我一直觀察的動力),提出的問題一般當天就有回覆(好像專案上還有1000多的問題還是開啟著,哈哈)但是這個專案真的關注度相當低,對比RN低的可憐。
好吧,為啥今天才發文章安利,因為看到它終於支援Windows了(其實我也不知道他們啥時候搞出來),之前只能在mac,linux下體驗,現在也提供idea的外掛,非常方便除錯和開發(之前是atom,真的卡的不行)。

0?wx_fmt=jpeg