• flutter開發

    Flutter是什麼?
    Flutter是谷歌的移動UI框架,可以快速在iOS和Android上構建高質量的原生用戶界面。 Flutter可以與現有的代碼一起工作。在全世界,Flutter正在被越來越多的開發者和組織使用,並且Flutter是完全免費、開源的。

    移動端跨平台框架
    在傳統的原生開發中,一般都要維護Android、iOS兩個開發團隊,版本迭代時,無論人力成本,還是測試成本都會變大。這一點可能對於我們普通的android程序員感受並不深,或者說我們不care這一點。但是站在公司的角度上,如果能夠有一套代碼,直接就能夠開發出android的apk和ios的ipa,是不是意味著我只需要擁有開發維護這套代碼的一個團隊就可以了?從人力成本上來說,可以讓我少發一些工資。而在開發的角度,一套代碼也能夠很好的完成複用、測試以及UI風格的統一。早在2008年,就有一款叫做“PhoneGap”的框架獲了獎並開始支持Android平台。現在我們說的PhoneGap一般指的是"Cordova"。它是PhoneGap貢獻給Apache後的開源項目,是從PhoneGap中抽離出的核心代碼,是驅動PhoneGap的核心引擎。兩者維護的是共同的一份源代碼組件,只有名字和包名不一樣。 PhoneGap是一個採用HTML,CSS和JavaScript來完成跨平台開發的技術,當時PhoneGap宣稱接近原生性能。然而它的工作原理是基於WebView,然後利用JavaInterface來完成與原生代碼的交互。我們稱這種工具為WebView JavaScript Bridge(JsBridge)。這種方式,能夠很好的解決跨平台與動態更新的需求但是,我們都知道android WebView的渲染效率很差,同時JavaScript是解釋型語言,它不需要編譯,在運行時候解釋執行,這就導致JavaScript的執行性能太低了。同時因為android自身的問題,使用WebView過程中消耗的內存,沒有辦法在不需要使用的時候進行及時的回收,這樣會導致我們的可用內存越來越少,最終OOM。所以類似Flutter這種框架的出現是必然的,現有的跨平台框架,比如RN都是基於JS,由於JS的執行性能,導致跨平台應用性能一直無法突破瓶頸。而Flutter在Debug使用JIT編譯,支持熱重載,能夠提高我們的開發效率,而Release中利用AOT直接編譯成機器碼,能夠達到更好的性能。從設計角度而言,Flutter提供了非常豐富的Widget組件,能夠讓我們非常輕鬆的實現Android或者IOS風格的UI效果。

    Flutter優勢
    熱重載
    頁面每次改動,不需要手動去刷新,可自動刷新。即支持開發過程中熱重載。

    統一的UI
    Flutter 提供豐富的內置 UI 組件——Material Design(針對 Android)和Cupertino(適用於 iOS ),不需要擔心在眾多設備上看起來會有什麼不同。

    Flutter架構

    Flutter的架構主要分成三層:Framework,Engine和Embedder。

    1.Framework使用dart實現,包括Material Design風格的Widget,Cupertino(針對iOS)風格的Widgets,文本/圖片/按鈕等基礎Widgets,渲染,動畫,手勢等。此部分的核心代碼是:flutter倉庫下的flutter package,以及sky_engine倉庫下的io,async,ui(dart:ui庫提供了Flutter框架和引擎之間的接口)等package。
    2.Engine使用C++實現,主要包括:Skia,Dart和Text。 Skia是開源的二維圖形庫,C++ 的2D繪圖引擎,調用GPU來完成渲染,提供了適用於多種軟硬件平台的通用API。

    3.Embedder是一個嵌入層,即把Flutter嵌入到各個平台上去,這裡做的主要工作包括渲染Surface設置,線程設置,以及插件等。從這裡可以看出,Flutter的平台相關層很低,平台(如iOS)只是提供一個畫布,剩餘的所有渲染相關的邏輯都在Flutter內部,這就使得它具有了很好的跨端一致性。

    Dart語言介紹
    特點:
    基於JIT的快速開發週期
    Flutter使用dart語言,在開發階段採用JIT模式,這樣就避免了每次改動都要進行編譯,極大的節省了開發時間;
    基於AOT的發布包lutter在發佈時可以通過AOT生成高效的ARM代碼以保證應用性能。

    為了快速流暢的用戶體驗需要能夠在每個動畫幀運行大量的代碼,不能有周期性的停頓,否則會造成掉幀。

    單線程:
    不需要鎖,不存在數據競爭和變量狀態同步,也沒有線程上下文切換的性能損耗和鎖導致的卡頓。

    垃圾回收
    多生代無鎖垃圾回收器,專門為UI框架中常見的大量Widgets對象創建和銷毀優化。

    Flutter與RN的優勢
    RN是通過JavaScript通過 bridge 傳遞到native完成原生繪製, bridge 的成本高,因為需要頻繁的跨橋調用,導致卡頓等性能問題。
    Flutter利用DVM(dart虛擬機) 減少了橋的交互,在運行時期直接執行這些編譯後的原生代碼,就和我們進行原生開發一樣,不再需要Bridge來擔任中介的角色的新開發語言,可與Objective-C共同運行於Mac OS和iOS平台,用於搭建基於蘋果平台的應用程序。

    Swift是蘋果公司在WWDC2014上發布的全新開發語言。從演示視頻及隨後在App Store上線的標准文檔看來,語法內容混合了OC,JS,Python,語法簡單,使用方便,並可與OC混合使用。作為一項蘋果獨立發布的支持型開發語言,已經有了數個應用演示及合作開發公司的測試,相信將在未來得到更廣泛的應用。某種意義上Swift作為蘋果的新商業戰略,將吸引更多的開發者入門,從而增強App Store和Mac Store本來就已經有的應用數量基礎。