flutter 入門<一>為什么采用Dart語言

首先,要先了解兩個概念。
AOT(ahead of time)靜態編譯,AOT程序的典型代表是用C/C++開發的應用,它們必須在執行前編譯成機器碼。
JIT(just in time)動態編譯。JIT的代表則非常多,如JavaScript、python等。
現在我們看看Flutter為什么選擇Dart語言?筆者根據官方解釋以及自己對Flutter的理解總結了以下幾條(由于其它跨平臺框架都將JavaScript作為其開發語言,所以主要將Dart和JavaScript做一個對比):

開發效率高

Dart運行時和編譯器支持Flutter的兩個關鍵特性的組合:

基于JIT的快速開發周期:Flutter在開發階段采用,采用JIT模式,這樣就避免了每次改動都要進行編譯,極大的節省了開發時間;

基于AOT的發布包: Flutter在發布時可以通過AOT生成高效的ARM代碼以保證應用性能。而JavaScript則不具有這個能力。

高性能

Flutter旨在提供流暢、高保真的的UI體驗。為了實現這一點,Flutter中需要能夠在每個動畫幀中運行大量的代碼。這意味著需要一種既能提供高性能的語言,而不會出現會丟幀的周期性暫停,而Dart支持AOT,在這一點上可以做的比JavaScript更好。

Flutter高性能主要靠兩點來保證,首先,Flutter APP采用Dart語言開發。Dart在 JIT(即時編譯)模式下,速度與 JavaScript基本持平。但是 Dart支持 AOT,當以 AOT模式運行時,JavaScript便遠遠追不上了。速度的提升對高幀率下的視圖數據計算很有幫助。其次,Flutter使用自己的渲染引擎來繪制UI,布局數據等由Dart語言直接控制,所以在布局過程中不需要像RN那樣要在JavaScript和Native之間通信,這在一些滑動和拖動的場景下具有明顯優勢,因為在滑動和拖動過程往往都會引起布局發生變化,所以JavaScript需要和Native之間不停的同步布局信息,這和在瀏覽器中要JavaScript頻繁操作DOM所帶來的問題是相同的,都會帶來比較可觀的性能開銷。

快速內存分配

Flutter框架使用函數式流,這使得它在很大程度上依賴于底層的內存分配器。因此,擁有一個能夠有效地處理瑣碎任務的內存分配器將顯得十分重要,在缺乏此功能的語言中,Flutter將無法有效地工作。當然Chrome V8的JavaScript引擎在內存分配上也已經做的很好,事實上Dart開發團隊的很多成員都是來自Chrome團隊的,所以在內存分配上Dart并不能作為超越JavaScript的優勢,而對于Flutter來說,它需要這樣的特性,而Dart也正好滿足而已。

類型安全

由于Dart是類型安全的語言,支持靜態類型檢測,所以可以在編譯前發現一些類型的錯誤,并排除潛在問題,這一點對于前端開發者來說可能會更具有吸引力。與之不同的,JavaScript是一個弱類型語言,也因此前端社區出現了很多給JavaScript代碼添加靜態類型檢測的擴展語言和工具,如:微軟的TypeScript以及Facebook的Flow。相比之下,Dart本身就支持靜態類型,這是它的一個重要優勢。

Dart團隊就在你身邊

看似不起眼,實則舉足輕重。由于有Dart團隊的積極投入,Flutter團隊可以獲得更多、更方便的支持,正如Flutter官網所述“我們正與Dart社區進行密切合作,以改進Dart在Flutter中的使用。例如,當我們最初采用Dart時,該語言并沒有提供生成原生二進制文件的工具鏈(這對于實現可預測的高性能具有很大的幫助),但是現在它實現了,因為Dart團隊專門為Flutter構建了它。同樣,Dart VM之前已經針對吞吐量進行了優化,但團隊現在正在優化VM的延遲時間,這對于Flutter的工作負載更為重要。”
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容