再次感謝你們對 Flutter Engage China 活動 的關注和積極參與!咱們在活動先後收到了不少來自開發者的反饋和問題,Flutter 團隊和演講嘉賓在直播 Q&A 環節中也針對部分問題在第一時間給出回覆。如今咱們將一些開發者關心的問題和回覆整理出來分享給你們,但願對您有所幫助。因爲問題數量較多,咱們分爲上下兩期發佈,上期的內容已經發布,歡迎你們 前往回顧。您也能夠觀看 Flutter Engage China 視頻回顧精彩內容:html
回答者: 楊天航 (Chris),Google Flutter 團隊工程師github
在一開始決定哪些內容應該集成到 SDK 裏的時候,咱們主要考慮這麼三個因素:api
回答者: 董韜,Google Flutter 用戶體驗研究負責人app
咱們一直在針對這個問題作優化工做。包的精簡主要包括兩個方面的工做: 第一個方面是 Flutter 團隊爲全球全部用戶作的全局優化。第二個方面是每一個 App 團隊在本身的 App 內部作的優化。框架
從第一個方面來說,咱們去年對大的編譯過程作了不少優化,主要是在 iOS 端。iOS 端產物的體積已經有了比較顯著的縮小。目前來看,想要進一步縮小包產物的話,須要更多的由開發者根據本身 App 的實際狀況作一些取捨,以及對 Flutter 引擎作必定的定製。ide
咱們最近也推出了一款工具,在 Dart DevTools 裏面,叫作 Code Size Analysis,這個工具能夠幫你們可視化包裏具體有哪些內容,每一個內容佔用了多少空間。有的時候您可能會發現,有一些資源或者有一些依賴的庫佔用了過多的空間。這個工具也會幫您解析 Flutter 引擎裏面具體的產物是什麼,若是您有計劃去對 Flutter 引擎進行定製的話,這些都會是很好的參考數據。模塊化
回答者: 袁輝輝,字節跳動 Flutter 技術負責人工具
我簡單從 App 團隊的角度來作一些補充。App 團隊想縮小包體積的話,有三個能夠作的優化。一個是壓縮,主要是咱們在代碼端和數據端,能夠對數據作一些壓縮。二是裁剪,您能夠看看哪些模塊是不使用的,好比說您是國內使用的 App,那就並不須要國際化的一些功能模塊,就能夠裁剪掉。三是系統級的優化,好比說大的編譯由 O3 變 Oz,或者是作指令集頭部的一些精簡,把 code source map 這樣的東西去掉,以及作一些混淆,到了線上以後再經過後臺平臺還原回來,能使用的手段其實不少的。post
咱們接下來會加大對外的技術輸出,後續咱們會把這些技巧再梳理一下分享給你們。
回答者: 劉森森,阿里巴巴 UC 客戶端團隊
這個問題其實能夠理解爲在這種複雜卡片的場景下,在列表作慣性滾動的時候出現的一些性能問題。這個問題很是典型,實際上在應用層有不少優化手段能夠去作。
首先咱們可使用 Flutter 提供的性能分析工具來定位問題,去發現是否在寫法上面存在着一些能夠優化的地方。好比在列表滾動的時候,是否存在 widget 構建的次數過多,或者構建的層級過深的問題,致使 UI 線程出現卡頓。咱們也可使用 Flutter 提供的 RepaintBoundary,來減小重繪的範圍。而且檢查是否使用到了 ClipPath 或者 BackdropFilter 這種可能會對 Raster 線程形成必定影響的操做,是否能夠儘可能去避免。
在優化完寫法後,能夠去評估使用 SurfaceView 做爲 FlutterView 渲染的實現。SurfaceView 從原理上來說比 TextureView 的性能更好,由於它有獨立的渲染管線。從實際測試的效果來看,SurfaceView 的幀率平均有 2~4 幀的提高。它的問題可能存在於混合開發的場景,因爲它跟 AndroidView 不兼容,會致使黑屏等兼容性問題。個人建議是,若是是開發一個完整的 Flutter App 的話,優先選用 SurfaceView;若是作混合棧開發的話,須要評估 SurfaceView 是否存在致使兼容性問題的場景,而後儘可能去使用 SurfaceView。
若是前兩步都沒有發現問題的話,可使用我分享的分幀渲染的思路,也能夠減小 UI 和 Raster 線程的繪製耗時。
https://www.bilibili.com/vide...
回到引擎層面上,UC 這邊作的一些優化也會以 PR 的形式回饋到社區,你們能夠關注咱們的進展。
回答者: 袁輝輝,字節跳動 Flutter 技術負責人
教育這一塊的話,咱們在字節內部其實用 Flutter 比較多的就是咱們的教育領域產品。我有了解到,不少公司會針對一款教育產品,按照課程進行拆分,好比數學、英語、思惟,都會拆分出一個個獨立的 App,這個開發的工做量是很是大的。在剛進入一個新的行業時,人員招聘可能一會兒跟不上來,這個時候其實咱們會很在意一個技術能不能讓研發效率實現快速提高,這時 Flutter 就是一個比較好的選擇。
昨天我還跟咱們公司外的教育公司聊到 Flutter。他們如今有一款大的 App,想要拆成不少個教育子方向的 App,可能會裂變成 3 個、5 個甚至 10 個,可是他們團隊可能 Android 和 iOS 端加在一塊兒也只有幾個開發小夥伴。聊下來的結果就是,Flutter 是一個很好的切入方式。我以爲不光是教育行業,其實對於一些新 (領域) 的 App,若是您比較注重研發效率,用 Flutter 都是一個不錯的選擇。
回答者: 劉森森,阿里巴巴 UC 客戶端團隊
高延遲渲染管線,其實它的分幀仍是以 16 毫秒爲週期輸出的,就是一個 Vsync 週期,這一點是沒有改變的。實現起來的話,主要是把本來必須在一個 Vsync 週期完成的任務增大到了兩個 Vsync 週期,因爲 UI 線程和 Raster 線程是並行的,從而增大了輸出的吞吐量,Raster 線程始終是每個 Vsync 週期輸出一幀。你們能夠結合 Android 的 DoubleBuffer 去理解,會更容易一些。在線程方面,咱們沒有新建,而是在本來的 UI 線程和 Raster 線程上去操做的。這些改動只是在引擎層,上層不用去作什麼。
回答者: 樊舟穎 (Zoey),Google Flutter 產品經理
上次在 Flutter Engage 活動 上,咱們邀請豐田來說解了一些他們如今 Flutter 的部署規劃。豐田如今尚未公佈具體的計劃,以及是否開源。若是你們有這個需求的話,咱們會和豐田聊一聊,向他們提出這方面的建議。但咱們不是豐田,不能表明他們來作出決定,若是他們後續有相關的開源計劃的話,咱們會和你們分享。
. . .
以上就是 Flutter Engage China 開發者常見問題解答 (下篇) 的內容,你們也能夠隨時回顧以前發佈的 上篇內容。若是您有任何疑問或者建議,歡迎你們在評論區或 GitHub 積極分享您的反饋與想法。