Flutter混合棧路由實踐與優(yōu)化

一、背景及綜述

混合棧路由在使用時,仍有內(nèi)存異常;
底層代碼的修改,需要不斷踩坑。
單引擎下內(nèi)存進一步優(yōu)化,解決了打開多個 Flutter 頁面時內(nèi)存異常增長(Boost 等方案下仍有內(nèi)存異常);
規(guī)避底層代碼修改不可見導(dǎo)致的項目風(fēng)險,解決過度耦合 io.flutter 包導(dǎo)致的 sdk 更新困難。
二、混合集成面臨的問題
項目最終明確選用了單引擎復(fù)用的方案,業(yè)內(nèi)未解決而我們面臨的痛點有兩個: 1. iOS側(cè)的內(nèi)存增長異常; 2. Android側(cè) 底層修改不透明給項目帶來風(fēng)險。 在介紹TRouter之前,本節(jié)會討論問題的成因,以及為什么說業(yè)內(nèi)方案存在缺陷。

Engine 管理著 Flutter 所使用的四個線程,本身是一個較重的一個對象。
isolate 管理著 Dart 層內(nèi)存和單線程控制的運行實體。isolate 本身意思是“隔離”,每個 isolate 之間的內(nèi)存和邏輯是隔離的,所以對應(yīng)的 Engine 也是資源不共享的。
Engine 依賴于原生的某個視圖組件提供渲染的能力,比如純 Flutter 應(yīng)用就只在單獨一個 Activity/ViewController 上創(chuàng)建了 Engine 以提供 Flutter 的視圖渲染。

1. 多引擎方案

2. 單引擎瀏覽器方案



痛點一:iOS側(cè)內(nèi)存增長異常

痛點二:Android側(cè),底層不可見的修改給項目帶來風(fēng)險
三、實現(xiàn)方式及痛點解決
1. 整體框架

2. 內(nèi)存優(yōu)化



3. 底層改造
對官方代碼做最小的修改,避免有引入額外 bug 的風(fēng)險;
對代碼的變更是明確清晰的,在遇到線上問題時,可以第一時間進行分析和排查;
可復(fù)用的訴求,易于 Flutter SDK 的迭代更新。

apply plugin: 'com.tencent.fixflutter'

方案優(yōu)勢體現(xiàn)在如下兩方面:
4. 方案對比

總結(jié)來看,TRouter 混合棧的路由優(yōu)勢在于:
路由方式簡單,Dart 層資源共享,有更優(yōu)的內(nèi)存性能表現(xiàn);
項目風(fēng)險可控,底層代碼修改是可見的,F(xiàn)lutter SDK 版本適配更易行。
四、下一步做的事情
Flutter v2.0 升級與 View 級別的支持
結(jié)語

評論
圖片
表情
