Flutter教程(二) 瞭解Dart語言

圖片描述

在上一篇教程中說了Flutter使用Dart語言開發。本篇教程總體介紹一下Dart語言,注意,本篇不會介紹Dart具體語法細節,也不會介紹Dart VM、dart2js,由於這些和Flutter無關。本文會從Flutter開發角度來介紹Dart語言特色、生態、將來三個方面作一個介紹。javascript

注:若是你想快速的瞭解Dart以進行Flutter開發, Flutter中文網有一個 Dart語言的資源列表 ,按照順序看一遍,相信你就能夠直接上手了。

Dart語言特色

首先咱們看看爲何Flutter會選擇Dart做爲開發語言,下面是官方給出的理由:html

Flutter在四個主要維度進行了評估,並考慮了框架做者、開發人員和最終用戶的需求等因素。咱們發現不一樣的語言在不一樣的層面符合一部分需求,但Dart在全部評估維度上得分都很高,而且符合咱們的全部要求和標準。前端

Dart運行時和編譯器支持Flutter的兩個關鍵特性的組合:基於JIT的快速開發週期:容許使用類型的語言進行形狀更改和有狀態的熱重載;以及AOT編譯器,可生成高效的ARM代碼,能夠快速啓動並擁有可預測的生產部署性能。vue

此外,咱們有機會與Dart社區密切合做,Dart社區正在積極投入資源改進Dart在Flutter中的使用。例如,當咱們採用Dart時,該語言沒有提供生成原生二進制文件的工具鏈(這對於實現可預測的高性能是頗有幫助的),可是如今實現了,由於Dart團隊爲Flutter構建了它。一樣,Dart VM以前已經針對吞吐量進行了優化,但團隊如今正在優化VM的延遲時間,這對於Flutter的工做負載更爲重要。java

Dart在如下主要標準上獲得高分:android

  • 開發人員的效率。Flutter的主要價值主張之一是經過讓開發人員使用相同的代碼庫爲iOS和Android建立應用程序,從而節省了工程資源。使用高效的語言能夠進一步加速開發週期,並使Flutter更具吸引力。這對咱們的framework團隊和開發人員都很是重要。大部分Flutter功能都是用Dart實現,所以咱們須要在10萬行代碼時能保持高效的而不會犧牲framework和widget的可讀性。
  • 面向對象。雖然咱們可使用非面向對象的語言,但這意味着要從新解決幾個難題。另外,絕大多數開發人員都具備面向對象開發的經驗,所以更容易學習如何使用Flutter進行開發。
  • 可預測,高性能。藉助Flutter,咱們但願使開發人員可以快速建立流暢的用戶體驗。爲了實現這一點,咱們須要可以在每一個動畫幀中運行大量的代碼。這意味着咱們須要一種既能提供高性能又能提供可預測性能的語言,而不會出現會致使丟幀的週期性暫停。
  • 快速內存分配。Flutter框架使用函數式流,它很大程度上依賴於底層的內存分配器,從而有效地處理小的、短時間的內存分配會很是重要,因此在缺少此功能的語言中Flutter沒法有效地工做。

綜上所述,主要的信息就是Dart在flutter中沒有VM,能夠直接經過AOT編譯器編譯成本地代碼,而且內存管理比較適合Flutter. 上面是官方說法,下面說些我的見解:從筆者對Dart的使用來看,Dart的設計目標應該是既對標Java,也對標Javascript。git

Dart vs Java

先看看 Dart和Java,客觀的來說,Dart語法層面確實比Java更有表現力,在VM層面,Dart VM在內存回收和吞吐量都進行了優化,但具體的性能對比,筆者沒有找到相關測試數據,可是在我看來只要Dart語言能流行,vm的性能就不用擔憂,畢竟Google在go(沒用vm但有GC)、javascript(v8)、dalvik(android上的java vm)上已經有了不少積累,值得注意的是Dart在flutter中已經能夠將gc作到10ms之內,因此Dart和Java相比,決勝因素並不會是在性能方面,而語法層面,Dart要比java更有表現力,最重要的是Dart對函數式編程支持要遠強於java(目前只停留在lamda表達式),而Dart不足的是生態,這會在下文討論。github

Dart vs JavaScript

JavaScript的弱類型一直被抓短,因此typeScript、coffeescript甚至是facebook的flow(雖然不是javascript的一個超集,但也經過標註和打包工具提供了靜態類型檢查)纔有市場。其實在筆者看來,目前最強大的動態化最好的腳本語言就是javascript,支持動態擴展屬性、建立函數等,用起來超爽。可是你可能聽過另外一個聲音,javascript的強大的動態化是把雙刃劍,畢竟有些人老是對本身寫的代碼不放心,他們指望有一套靜態類型檢查系統來幫助本身減小錯誤,而Dart就有靜態類型檢查(Dart2.0後加入了動態類型檢查,這在最新版的flutter中已經啓用了),而且能夠經過dart2js將dart代碼轉成js代碼,在這個層面來講,Dart和typeScript、coffeescript是差很少的,因此單獨來看,dart並不比typeScript、coffeescript有什麼明顯優點,但綜合起來看,dart既能進行服務端腳本、APP開發、web開發,這就有優點了。web

Flutter中的Dart

Flutter可以運行大多數不會直接或間接導入dart:mirrors 或 dart:html的dart代碼。Flutter中dart代碼會經過AOT編譯器編譯成本地代碼,沒有vm,而且dart團隊專門針對flutter進行了優化。編程

Dart生態

一個語言的成敗,重要的一點仍是在於生態。而生態的好壞,有兩個主要指標:第三方庫的數量和開發者數量。

Dart目前第三方庫仍是較少,而且有質量不高,即便是Dart SDK,裏面也有不少bug,dart-sdk github如今打開的issue一直維持在5000左右,在最近10天內,我提過一個P0 bug和多個features,因而可知Dart目前仍是不怎麼完善。 但值得慶幸的是,目前Dart更新迭代快了不少,這是受flutter和Fuchsia的帶動。

至於開發者,目前大多數dart使用者是flutter用戶,用dart 寫服務端腳本的應該很是少,畢竟如今在dart社區沒有一個比較著名或通過時間驗證的web server框架。從stackoverflow上dart相關的問題來看,用dart 開發js的開發者也有一些,但大概估計不會超過dart開發者的20%。

Flutter中文社區貢獻

Flutter中文網發起了一個開源項目計劃,旨在開發一系列Flutter SDK以外經常使用(實用)的Package、插件,以豐富Flutter第三方庫,爲Flutter生態貢獻來自中國開發者的力量, 目前社區已有幾個開源項目開始公測,詳情請查看: Flutter中文網開源項目 (ps:目前Flutter中文網開源項目組正在尋找有實力、有夢想、熱衷於分享的開發者加入,若是你有興趣,點進去,獲取聯繫方式)。

Dart將來

雖然Dart生態目前還不完善,但可喜的是增速很快,pub上的天天都有5個以上的新包發佈,這個數量你也許不覺得然,但事實上java 中最經常使用的包也就200個左右。雖然Dart語言自己自有亮點,可是在其對標的領域,目前都有成熟的而且不賴的解決方案,因此我以爲Dart是否成功目前來看仍是主要看flutter和 Fuchsia是否能成功。

Flutter在沒有發佈第一個正式版的狀況下,目前Github上star將近23K,熱度至關高了(固然不能和vue等前端web框架相比,都要上100k了,二者開發者羣體規模不一樣,開源時間不一樣)。 從Flutter自身來看,開發的應用程序性能確實流暢不少,比weex、rn 有明顯的性能提高。

還有,隨着Google Fuchsia OS的發佈, DART 及flutter成爲一等公民,也就是說未來具備Fuchsia OS的設備,Dart 都會成爲主要的開發語言。

最後

一些資源:

  1. Flutter資源教程,請訪問Flutter中文網
  2. Flutter http請求庫dio
  3. Flutter教程
相關文章
相關標籤/搜索