Flutter技術(shù)學(xué)習(xí) -- Flutter工程環(huán)境、Dart 語言概覽

準(zhǔn)備工作

  • 安裝 Android Studio
  • 安裝 Xcode
  • 安裝 Flutter
    我們需要配置鏡像站點(diǎn)的環(huán)境變量,打開~/.bash_profile 文件,在文件最后添加以下代碼,來配置鏡像站點(diǎn)的環(huán)境變量:
// 完成鏡像的配置
export PUB_HOSTED_URL=https://pub.flutter-io.cn  
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

// 將 flutter 命令的執(zhí)行路徑追加到環(huán)境變量 PATH 中,完成Flutter SDK 的安裝
export PATH=~/Documents/flutter/bin:$PATH

hello_world 示例為例

  1. 進(jìn)入 hello_world 目錄,輸入 flutter emulators 命令,查看當(dāng)前可用的模擬器:


    image.png
  2. 我們啟動(dòng) iOS 模擬器, 運(yùn)行 Flutter 項(xiàng)目:flutter emulators --launch apple_ios_simulator

Dart 語言概覽

  1. JavaScript實(shí)際上是兩類編程語言的混合產(chǎn)物:(簡化的)函數(shù)式編程風(fēng)格與(簡化的)面向?qū)ο缶幊田L(fēng)格。所以Dart的最開始的定位也是一種運(yùn)行在瀏覽器中的腳本語言
  2. 原本JavaScript只能在瀏覽器中運(yùn)行,但是Node.js的出現(xiàn)讓它開始有能力運(yùn)行在服務(wù)端,很快手機(jī)應(yīng)用與桌面應(yīng)用也成為了JavaScript的宿主容器。進(jìn)而,JavaScript成為了前后端通吃的全棧語言。
  3. 2015 年,在聽取了大量開發(fā)者的反饋后,Google 決定將內(nèi)置的 Dart VM 引擎從 Chrome 移除,這對(duì) Dart 的發(fā)展來說是重大挫折,替代 JavaScript 就更無從談起了。
  4. 但,Dart 也借此機(jī)會(huì)開始轉(zhuǎn)型:在 Google 內(nèi)部孵化了移動(dòng)開發(fā)框架 Flutter,彎道超車進(jìn)入了移動(dòng)開發(fā)的領(lǐng)域;而在 Google 未來的操作系統(tǒng) Fuchsia 中,Dart 更是被指定為官方的開發(fā)語言。
  • Dart 的特性
    1. 同時(shí)支持JIT 與 AOT
    JIT 在運(yùn)行時(shí)即時(shí)編譯:在開發(fā)周期中使用,可以動(dòng)態(tài)下發(fā)和執(zhí)行代碼,開發(fā)測(cè)試效率高,但運(yùn)行速度和執(zhí)行性能則會(huì)因?yàn)檫\(yùn)行時(shí)即時(shí)編譯受到影響。
    AOT 即提前編譯:可以生成被直接執(zhí)行的二進(jìn)制代碼,運(yùn)行速度快、執(zhí)行性能表現(xiàn)好,但每次執(zhí)行前都需要提前編譯,開發(fā)測(cè)試效率低。
    總的來說:Dart 具有運(yùn)行速度快、執(zhí)行性能好的特點(diǎn)。
    2. 內(nèi)存分配與垃圾回收
    Dart VM 的內(nèi)存分配策略比較簡單,創(chuàng)建對(duì)象時(shí)只需要在堆上移動(dòng)指針,內(nèi)存增長始終是線性的,省去了查找可用內(nèi)存的過程。
    Dart 的垃圾回收,則是采用了多生代算法?;厥者^程中,Dart 只需要操作少量的“活躍”對(duì)象,沒有引用的大量“死亡”對(duì)象則被忽略,這樣的回收機(jī)制很適合 Flutter 框架中大量 Widget 銷毀重建的場景。
    3. 單線程模型
    Dart 是單線程模型的優(yōu)勢(shì)就體現(xiàn)出來了,因?yàn)樗烊徊淮嬖谫Y源競爭和狀態(tài)同步的問題。這就意味著,一旦某個(gè)函數(shù)開始執(zhí)行,就將執(zhí)行到這個(gè)函數(shù)結(jié)束,而不會(huì)被其他 Dart 代碼打斷。
    Dart 中并沒有線程,只有 Isolate(隔離區(qū))。Isolates 之間不會(huì)共享內(nèi)存,就像幾個(gè)運(yùn)行在不同進(jìn)程中的 worker,通過事件循環(huán)(Event Looper)在事件隊(duì)列(Event Queue)上傳遞消息通信。
    4. 無需單獨(dú)的聲明式布局語言
    Dart 聲明式編程布局易于閱讀和可視化,使得 Flutter 并不需要類似 JSX 或 XML 的聲明式布局語言。所有的布局都使用同一種格式,也使得 Flutter 很容易提供高級(jí)工具使布局更簡單。
    開發(fā)過程也不需要可視化界面構(gòu)建器,因?yàn)闊嶂剌d可以讓我們立即在手機(jī)上看到運(yùn)行效果。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容