【技術圈】Flutter 1.12、Firefox 71、V8 8.0 一大把新特性來襲

速覽

  • Flutter 1.12發佈
  • V8 發佈 8.0 版本,內存佔用量大幅下降
  • WICG引入了展現鎖定,實現更快的Web渲染
  • Firefox 71 發佈
  • 360 加入 Ecma 參與 JavaScript 語言標準制定

Flutter 1.12 發佈

Flutter 1.121.9.x 的版本在經歷 6 次 hotfix 之後,才帶來的 stable 大版本更新。該版本解決了 4571 個報錯,合併了 1905 份 pr,同時本次發佈也是 Flutter 一年內的第五個穩定版本。

框架

  • 完全支持 iOS 13 暗色模式
    • 完全支持 iOS 13 主題模式是 Flutter 1.12 的一大亮點,包括支持 Cupertino 小部件的暗色模式。
    • 為了讓 Flutter App 看起來更像原生 App,我們還改進了滾動條保真度,提供了自適應的 CupertinoAlertDialog 填充,並允許為 CupertinoDatePicker 設定最小和最大日期限制。
  • 支持將全屏 Flutter 實例添加到 App
    • 提供了穩定的平台集成 API(Java、Kotlin、Objective-C 和 Swift),包括一組新的 Android 平台 API
    • 可以在內嵌的 Flutter 模塊里使用插件。
  • Flutter 1.12master、devbeta 都提供了改進的 Web 支持。
  • macOS 的支持很快也會實現,目前正在從技術預覽階段進入到 alpha 階段,masterdev 已經可用。

SDK

  • 建議開發者將 Android 項目遷移到 AndroidXSDK 的瘦身,增加了 google_fonts 字體的支持等。
  • Android 插件的改進 Android plugins APIs,比以前更加簡單明了,分割了 FlutterPlugin and MethodCallHandler ,同時提供 ActivityAwareServiceAware 作為獨立支持。
  • 新增加了不兼容的 breaking change,比如: PageView 啟用 RenderSliverFillViewportWidgetsBinding 中的 attachRootWidget 被替換為 scheduleAttachRootWidget
  • 增加 MediaQuery.systemGestureInsets 支持 Android Q的手勢導航;

開發工具

  • DartPad
    • 你可以在不安裝任何東西的情況下嘗試 Dart 的新特性。新版的 DartPad 現在支持 Flutter
  • Hot UI
    • 如果你在本地安裝了 Flutter 工具,就會在 IntelliJ/Android StudioFlutter 插件中看到一個新的預覽功能。你可以在 IDE 中直接看到你正在開發的小部件。
  • Spuernova
    • Spuernova 中可以通過 Sketch 文件就可以生成 Flutter 代碼

V8 發佈 8.0 版本,內存佔用量大幅下降

JavaScript 引擎 V8 團隊在官宣推出 8.0 版本。這次更新的重點主要集中在錯誤修復及性能改善上,正式的版本將在數周后隨着谷歌 Chrome 80 穩定版一起發佈。

V8 是一個由 Google 開發的開源 JavaScript 引擎,用於 Google ChromeChromium 中。Lars Bak 是這個項目的組長,以 V8 發動機為其命名。V8 在運行之前將JavaScript 編譯成了機器代碼,而非位元組碼或是解釋執行它,以此提升性能。更進一步,使用了如內聯緩存(inline caching``)等方法來提高性能。有了這些功能,JavaScript 程序與 V8 引擎的速度媲美二進制編譯。

V8 引擎的這次更新,對內存佔用量與速度都進行了優化。V8 堆包含了很多東西,例如浮點值、字符串字符、編譯代碼以及標定值,開發團隊發現這些標記值佔據了堆的很大一部分空間。標定值與系統指針一樣大,32 位寬度對應 32 位架構,64 位寬度對應 64 位架構。當開發團隊對比 32 位版本與 64 位版本時發現,每個標記值使用了兩倍的堆內存。因為高位可以由低位合成,所以只需要將唯一的低位存儲到堆中就能實現降低內存的佔用量,平均可節省 40% 堆內存,這一方法被稱為「指針壓縮」。

新版本在 JavaScript 方面出現了兩個新特性 ── Optional ChainingNullish Coalescing

  • Optional Chaining:在編寫屬性訪問鏈時,我們經常需要檢查中間值是否為空。沒有經過錯誤檢查的鏈可能會扔出,而經過了明確的錯誤檢查的鏈是冗長的,並且會產生不必要的結果,即檢查所有的真實值,而不是只檢查非空值。可選鏈(Optional Chaining)允許我們編寫更精鍊、魯棒性更強的屬性訪問鏈,檢查中間值是否為空。如果中間值為空,則整個表達式的計算結果為未定義的。
  • Nullish Coalescing:一個新的用於處理默認值的短路二進制操作符。

具體使用可查看:https://v8.dev/blog/v8-release-80 」

WICG引入了展現鎖定,實現更快的Web渲染

該提案適應多種使用場景,包括快速展現非常大的HTML文檔,滾動顯示大量內容,異步預渲染不可見的內容供後續展現,以及更快速地度量布局。該提案試圖在不破壞Web特性和布局計算的情況下避免加載和渲染不可見的內容,並且為開發人員提供一種靈活性,使其能夠在不向終端用戶屏幕展現的情況下將內容預先渲染出來。

目前,DOM 是原子渲染的,隨着站點和應用規模的增長,渲染也會耗費越來越長的時間。現在,我們所採用的技術包括隱藏不可見的內容或虛擬化,但是這些方式有一些限制,並且有可靠性方面的潛在問題。

展現鎖定提案引入了三個新特性:

  • rendersubtree 屬性,控制一個 DOM 子樹是否要渲染。該屬性可以被瀏覽器或其他的用戶終端所修改,並且會觸發一個 MutationObserver 事件,開發人員可以對事件進行響應。
  • content-size 屬性,為 rendersubtree 屬性標記為不可見的內容分配一個佔位符的大小。
  • Element 對象的 updateRendering 方法,預渲染 rendersubtree 屬性標記為不可見的子樹中的內容。

在現今的Web瀏覽器中,目前還沒有該提案的實現。該提案還處於早期階段。 」

Firefox 71 發佈

Firefox 71 現已正式發佈。該版本添加了許多新的開發人員工具功能,其中包括 Web 套接字消息檢查器,控制台多行編輯器模式,登錄事件以及網絡面板全文搜索。

新功能

  • 對集成的密碼管理器 Lockwise 的改進
    • Firefox 現在可以識別子域,並將通過 Lockwise 自動填充域登錄信息
    • 使用屏幕閱讀器的用戶現在可以使用 Firefox Monitor 的集成違規警
  • 有關實際使用的增強跟蹤保護的更多信息
    • Firefox 阻止加密礦工時的通知
    • 通過單擊地址欄防護欄,可以訪問保護面板中被阻止的跟蹤器的運行記錄
  • 畫中畫(PIP)功能:允許將視頻包含在一個單獨的小窗口中,無論您用戶從標籤到標籤還是在 Firefox 瀏覽器之外切換,仍可以觀看。

修復

  • 各種安全修復程序。
  • HTML 重新實現了配置頁面

開發者

  • DevTools 的網絡面板現在可以 檢查 WebSocket 消息,並自動格式化各種框架格式
  • Console 的新多行編輯器模式提供了類似於 IDE 的體驗,可方便地在較長的代碼段上進行迭代
  • 網絡面板的新資源阻止功能可以模擬跟蹤保護,安全性,服務中斷和不良連接的影響,以進行更可靠的測試
  • 在美國,DevTools的新增功能面板中的每個版本都可以找到更多功能和改進

360 加入 Ecma 參與 JavaScript 語言標準制定

360 成為 Ecma 會員,奇舞團將代表公司參與 TC39 的工作,制定 JavaScript 語言標準。在 12 月舉辦的 Ecma118 次會員大會上,360 代表也見證了阿里巴巴、華為和 Sujitech 等另外 3 家中國公司被批准為 Ecma 會員。