精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Flutter For Web性能優化和新場景探索

開發 前端
FFW的html渲染模式,首開速度已經接近傳統Vue.js站點;canvaskit模式的刷新幀率效率,也已經接近App端的flutter代碼。但是,后者的首屏速度,由于必要的noto字體和wasm內核文件,首開耗時依然過久。

背景

近些年隨著Flutter開發的App不斷涌現,其靈活高效的編程體驗、建設良好的開發生態和后期易維護等優點,逐漸得到開發者和企業的認可。

Flutter代碼稍作調整,即可同時編譯、打包出來App和Web/H5站點。后者即為Flutter For Web(簡寫FFW)。例如:若App內嵌了Flutter頁面,那么這些頁面就可以被重復利用,生成M站。

但是FFW直接產出的Web/H5站點,首屏加載速度普遍較慢。另外,深入使用FFW也會發現,其2種渲染模式在復雜頁面的交互上,有不同程度的卡頓問題。

針對上述性能問題的解決,作者做了較為詳盡的調研:本文首先分享了性能優化的經驗;然后引入element-embedding的概念;最后分享一種探索出的、適用于某些場景的試驗方案。

一.渲染模式及性能優化

FFW有2種渲染模式,是由同一套源碼,使用2種不同的命令,打包出來的2套編譯產物。

1.1渲染模式介紹

  • html渲染模式:Flutter采用html的custom element,CSS,canvas和SVG來渲染UI元素。值得注意的是,此模式最終產物的html標簽數量十分有限,仍以canvas繪制為核心。這也是導致其不夠“瀏覽器友好”的原因。
  • canvaskit渲染模式:Flutter將 Skia 編譯成 WebAssembly 格式,并使用 WebGL 渲染。此模式必需加載wasm內核文件和noto字體文件。此模式性能表現、瀏覽器兼容性表現更優秀。若是對首屏速度要求較少的場景,如內部Web系統,建議使用此模式。

1.2優化經驗(html渲染)

?1.2.1首屏速度優化

  • Icon font裁剪。若項目中使用到了MaterialDesign圖標字體庫,請使用最新的Flutter SDK,在編譯期間自動對字體資源進行了裁剪,并重新生成otf/ttf文件。
  • gzip開啟。若Server端開啟gzip,主Javascript文件(main.dart.js)的體積優化將超過1倍。
  • 分片和hash化。主Javascript文件體積較大,可以利用腳本在每次打包之前,將其拆分成n個子文件;在入口處增加邏輯,用戶在進入html后,并行下載n個子文件,最后動態組裝。
  • 可借助flutter_web_optimizer工具庫。打包命令:
flutter build web --web-renderer html --release --pwa-strategy none  
flutter pub run flutter_web_optimizer optimize --asset-base ./
  • 主html優化。利用傳統前端優化方法:defer、preconnect和dns-prefetch等屬性配置。

? 1.2.2 刷新幀率優化

  • build刷新相關:
  1. 局部刷新。目的是減少rebuild范圍。在大型、復雜頁面的性能優化上,可以利用StreamBuilder或Provider機制,實現局部刷新。
  2. Clean的build方法。不在build方法內進行邏輯計算。通過DevTools性能監測工具,可以發現用戶交互操作(如滾動長列表)后,build方法可能被頻繁調用。所以build方法越復雜,越可能導致卡頓等性能問題。
  3. 多使用無狀態的、靜態化的Widget。如:若Widget不涉及狀態,就封裝為StatelessWidget。又如:用得上KeeppAlive模式的Widget,在性能優化的時候,也可以加以使用,以獲得Widget的狀態保持、減少build刷新。
  • Scroll組件相關
  1. SingleChildScrollView內嵌Column。若情況為“列表item結構復雜、不統一,且item數量有限”時建議使用。
  2. ListView.builder。若情況為“列表的item結構類似,或長度很長、甚至不限”時使用。其優點是可動態復用item的資源,節省內存開銷。
  3. 可以采用自定義的“彈簧屬性”的physics。自定義的physics可調整滾動的速度、延伸、回彈效果等。
class AhCustomScrollPhysics extends ScrollPhysics {
  const AhCustomScrollPhysics({ScrollPhysics? parent}) : super(parent: parent);

  @override
  AhCustomScrollPhysics applyTo(ScrollPhysics? ancestor) {
    return AhCustomScrollPhysics(parent: buildParent(ancestor));
  }

  @override
  SpringDescription get spring => SpringDescription.withDampingRatio(
        mass: 0.1,   //質量,控制滾動的慣性
        stiffness: double.maxFinite, //剛性,滾動收尾速度
        ratio: 0.1,  //damping: 0.1, //阻尼,俗稱摩擦力
      );

1.3優化經驗(canvaskit渲染)

?1.3.1首屏速度優化

  • wasm內核處理

在主html里配置canvaskit.wasm加載路徑的前綴(最新FlutterSDK支持的功能)。

或者存放在國內CDN并使用url前綴。

否則此文件會從Google的一個外網CDN匹配和下載,國內訪問速度較慢。

goCanvaskit = () => {
        console.log(target);
        _flutter.loader.loadEntrypoint({
            entrypointUrl: "./flutter_canvaskit/main.dart.js", 
            onEntrypointLoaded: async (engineInitializer) => {
                let appRunnerCanvaskit = await engineInitializer.initializeEngine({
                    hostElement: target,
                    canvasKitBaseUrl: "./flutter_canvaskit/canvaskit/", //前綴處理
                });
                await appRunnerCanvaskit.runApp();
                console.log("canvaskit loaded.");
            }
        });
    };

  • noto字體處理。

在入口處(main.dart)里主動下載、加載noto字體。

否則,此文件將從外網CDN匹配和下載;并且加載過程中,界面的文字會展示亂碼。

var fontLoader2 = FontLoader("Noto Sans SC");
fontLoader2.addFont(fetchFont2());
await fontLoader2.load()
Future<ByteData> fetchFont2() async {
  var url = Uri.parse(
    'http://{your-cdn-host}/ah-assets/k3kXo84MPvpLmixcA63oeALhL4iJ-Q7m8w%20%281%29.otf'
  );
  final response = await http.get(url);
  if (response.statusCode == 200) {
    return ByteData.view(response.bodyBytes.buffer);
  } else {
    throw Exception('Failed to load font');
  }
}

?1.3.2刷新幀率優化

同html的刷新幀率優化。

1.4首屏優化數據

html模式數據分析對比

抽樣測速的數據抽樣測速的數據

同內容的、Vue.js線上版本,抽樣測速數據同內容的、Vue.js線上版本,抽樣測速數據

首次加載, js大文件列表首次加載, js大文件列表

1.5分析結果

FFW的html渲染模式,首開速度已經接近傳統Vue.js站點;canvaskit模式的刷新幀率效率,也已經接近App端的flutter代碼。但是,后者的首屏速度,由于必要的noto字體和wasm內核文件,首開耗時依然過久。

另外,html模式在刷新幀率上有略卡頓的問題。這是由于渲染產物使用了較少的html標簽,主要仍依靠canvas繪制;而主流瀏覽器對于canvas繪制的優化,遠沒有html標簽、DOM樹成熟。

Google團隊已經將canvaskit渲染模式作為未來優化的方向。為了提升加載速度,在 112 或更高版本的 Chromium中優化了wasm的底層支持,以縮小wasm的體積和提升性能表現。但是短期內現狀難以得到有效解決。

所以問題歸結為:首開速度和交互性能,不能兼得。

最新的element-embedding技術,為解決此“二選一”難題提供了新的思路。

二. element-embedding新功能

element-embedding是Flutter SDK 3.7的新功能;在2023年的Flutter Forward大會上被推出。在Github的Flutter Sample項目,有兩個demo:html+js集成和Angular.js集成。

圖片圖片

? 特性:

  1. Flutter的渲染產物,可以作為一個div里的canvas繪制層,而被宿主使用;
  2. 這個div可以在任何合適的時機被開啟渲染(否則不會加載);
  3. Flutter的代碼與它的宿主代碼(Angular.js或Vue.js等),可以通過js函數通信。

? 優點:

  1. 低侵入性:與傳統Vue.js等項目的“混合”,不影響宿主的首屏加載速度等。
  2. 可交互性:通過js函數即可完成與宿主的通信。
  3. 增加了FFW的使用場景。

三. 替換AB方案

3.1利用FFW打包2種渲染產物

利用FFW可以方便地打包2種渲染產物的特性:

  1. 首屏速度較快,使用html渲染產物。
  2. 后續交互性能為了更順滑,使用canvaskit渲染產物。

3.2目標是切換過程中用戶無感

  1. 前者內嵌1個后者的隱藏element-embedding。它會在前者加載完畢后“延遲加載”。
  2. 在合適的時機,把前者的“狀態參數”傳遞給后者。
  3. 后者更新狀態后,“靜默替換”展示。

3.3方案描述

圖片圖片

  1. html渲染產物作為“宿主”,首先被加載。
  2. canvaskit渲染產物是一個內部隱藏的element-embedding。
  3. 當用戶每一次交互“操作”后,都判斷一下canvaskit是否渲染完畢。
  4. 如果canvaskit已經渲染完畢,則傳參、切換、展示。
  5. 用戶的操作狀態得以保持。由于用戶的交互狀態(滾動位置、切換位置等)通過傳參得到保持,切換的過程“近乎無感”。

3.4應用場景

 頁面交互(滾動、點擊、切換等)操作不太復雜的場景。 

 最后

在純Web開發領域,傳統框架(Vue.js,React.js等)仍是優先的選擇。但是,經過技術探索,仍能找到FFW的一些應用場景。尤其App端Flutter代碼轉為Web/H5的需求很強時,可以考慮使用本文最后講述的、經過優化和重新架構的FFW方案。

作者簡介

魏子博魏子博

■ 經銷商技術部-移動APP團隊

■ 之家新人,移動端全棧開發經驗。

責任編輯:武曉燕 來源: 之家技術
相關推薦

2011-01-07 12:56:18

Web性能優化

2014-12-10 10:12:02

Web

2022-03-02 11:13:50

Web前端開發

2020-03-30 14:00:21

Flutter前端代碼

2022-07-08 09:38:27

攜程酒店Flutter技術跨平臺整合

2015-08-17 10:35:56

Web性能優化

2013-01-22 15:27:23

WebWeb前端

2015-06-23 16:36:11

Web性能優化

2012-01-10 16:22:25

Web

2023-10-31 12:50:35

智能優化探索

2025-04-03 03:55:00

2021-12-28 17:57:45

ESNoSQL數據庫

2023-10-06 23:14:07

VLAN網絡性能

2015-09-15 10:40:26

HTTP2 WEB 性能優化

2014-03-19 14:34:06

JQuery高性能

2022-08-01 14:59:57

Web前端后端

2015-09-15 10:46:29

2015-09-15 10:54:54

HTTP2 WEB 性能優化

2010-05-28 10:23:59

JavaScriptWeb

2012-12-24 09:55:15

JavaJava WebJava優化
點贊
收藏

51CTO技術棧公眾號

一区二区三区日韩精品| 久久久伦理片| 中文字幕在线播放不卡一区| 亚洲jizzjizz日本少妇| 国产一级在线免费观看| 欧美日日夜夜| 欧美日韩美女一区二区| 福利视频免费在线观看| 久香视频在线观看| 韩国av一区二区三区四区| 欧美国产激情18| 亚洲日本精品视频| 日韩影片在线观看| 91久久精品网| r级无码视频在线观看| 成人午夜电影在线观看| 国产91精品一区二区麻豆网站| 日本一区二区三区四区视频| 九九热精品免费视频| 奇米色欧美一区二区三区| 555夜色666亚洲国产免| 欧美一级黄色片视频| 日本h片在线| 国产精品久久久久影院色老大| 国产一区在线免费观看| 国产免费福利视频| 日韩电影免费一区| 欧美精品福利在线| 精品国产视频一区二区三区| 国产一区不卡| 亚洲精品一区二区网址| 韩国一区二区三区四区| 粉嫩av国产一区二区三区| 日本道在线观看一区二区| 国产主播自拍av| 呦呦在线视频| 亚洲私人影院在线观看| 亚洲一区二区三区色| 九九在线视频| 久久综合狠狠综合| 国产视频在线观看一区| 丰满熟妇人妻中文字幕| 国产福利一区二区三区视频在线| 国产视频福利一区| 少妇又紧又色又爽又刺激视频 | 成人午夜视频在线播放| 在线成人欧美| 久久人人爽人人| 激情五月婷婷在线| 欧美精品日韩| 欧美日韩国产成人高清视频| 中文字幕另类日韩欧美亚洲嫩草| 久久网站免费观看| 中文字幕不卡av| jizzjizzjizz国产| 日韩欧美1区| 日韩亚洲第一页| 久久久久久久久久97| 91欧美国产| 久久久久99精品久久久久| 婷婷伊人五月天| 午夜国产精品视频| 欧美激情一区二区三区成人| 五月天综合在线| 99日韩精品| 国产91网红主播在线观看| 超碰在线免费97| 久久精品国产99国产精品| 国产欧美日韩中文字幕在线| 国产免费无遮挡| 国产成a人亚洲精| 精品国产综合久久| 精品久久av| 亚洲欧美在线高清| 蜜臀av.com| 成年人在线网站| 色天使久久综合网天天| 欧美精品久久久久久久久25p| 日日夜夜亚洲精品| 精品少妇一区二区三区免费观看| 国产乱码在线| 日本视频一区二区| 国产日产久久高清欧美一区| 国产免费不卡av| 国产91综合一区在线观看| 国产欧美一区二区三区不卡高清| 男女污污视频在线观看| 国产精品热久久久久夜色精品三区| 亚洲一区二区在| 丰满诱人av在线播放| 色婷婷av一区二区| 亚洲国产欧美91| 亚洲人挤奶视频| 久久天天躁狠狠躁夜夜躁2014| 精品在线视频免费| 日本不卡123| 成人午夜电影免费在线观看| 久久经典视频| 一区二区三区免费看视频| 国产午夜伦鲁鲁| 24小时成人在线视频| 亚洲精品720p| 久久av红桃一区二区禁漫| 最新国产乱人伦偷精品免费网站| 国产精品劲爆视频| 老牛影视av牛牛影视av| 国产精品午夜免费| www.av蜜桃| 国产精品国产亚洲精品| 亚洲精品色婷婷福利天堂| 永久免费未视频| 午夜亚洲一区| av一区二区三区免费| а天堂8中文最新版在线官网| 亚洲黄色小视频| 手机在线成人免费视频| 欧美激情久久久久久久久久久| 中文国产成人精品久久一| 国产福利拍拍拍| 国产美女一区二区三区| 日韩黄色影视| 中文字幕在线高清| 欧美不卡视频一区| av最新在线观看| 日韩在线一区二区三区| 国产精品久久久一区二区三区| 欧美成人xxx| 色婷婷av一区二区| 美国黄色一级毛片| 亚洲青涩在线| 春色成人在线视频| 直接在线观看的三级网址| 欧美日韩第一区日日骚| theav精尽人亡av| 国产亚洲在线观看| 国产乱人伦精品一区二区| av片哪里在线观看| 91精品在线麻豆| 欧美日韩黄色网| 麻豆视频免费在线播放| 亚洲激情另类| 国产日韩一区二区| av丝袜在线| 精品免费国产二区三区| 玖玖爱免费视频| 国产乱码精品一品二品| 手机福利在线视频| 国产aa精品| 欧美乱大交xxxxx另类电影| 国产免费的av| 一区二区三区欧美视频| 少妇极品熟妇人妻无码| 亚洲一级网站| 精品福利影视| 在线免费看h| 国产亚洲欧美日韩一区二区| 国产天堂第一区| 中文字幕在线不卡| 无套内谢丰满少妇中文字幕| 欧美日韩亚洲一区在线观看| 国产91免费视频| а√天堂中文资源在线bt| 亚洲精品永久免费| 亚洲精品一区二三区| 国产精品无圣光一区二区| 色91精品久久久久久久久| 最新国产精品| 精品国产福利| 久久青青视频| 日韩视频一区在线| www.av在线.com| 精品国产成人av| www..com.cn蕾丝视频在线观看免费版| 蜜桃av一区二区在线观看| 国产日韩视频在线播放| 涩爱av色老久久精品偷偷鲁| 91极品女神在线| 成人免费高清在线播放| 91精品国产欧美一区二区18| 久久香蕉精品视频| 91日韩在线专区| 日韩肉感妇bbwbbwbbw| 一区二区不卡| 欧美日韩另类综合| 一区二区三区日本视频| 午夜精品久久久久久久99黑人| 久久精品蜜桃| 日韩视频免费观看高清完整版在线观看 | 久久精品国产亚洲AV无码男同 | 国产大屁股喷水视频在线观看| 国产精品一色哟哟哟| 日韩久久一级片| 综合久久99| 欧美日韩精品免费观看视一区二区| 亚洲成人毛片| 欧美又大又硬又粗bbbbb| 里番在线观看网站| 亚洲国产精品一区二区三区| 在线免费av片| 欧美日韩另类字幕中文| 成人免费精品动漫网站| 91麻豆国产福利在线观看| 亚洲理论中文字幕| 久久视频一区| 国产玉足脚交久久欧美| 国产精品国产一区| 久久国产主播精品| 美女精品久久| 国产精品色婷婷视频| 密臀av在线播放| 欧美久久精品午夜青青大伊人| 美女欧美视频在线观看免费 | 日本韩国一区二区| 精品无码一区二区三区电影桃花 | 2024国产精品视频| 久草福利在线观看| 久久电影国产免费久久电影| 亚洲 高清 成人 动漫| 国产精品99一区二区| 亚洲一区高清| 中国av一区| 久久99精品久久久久久水蜜桃 | 久久超碰亚洲| 大桥未久女教师av一区二区| 91香蕉嫩草影院入口| 欧美成人app| 国产成人一区二区三区| 色黄视频在线观看| 欧美丰满老妇厨房牲生活 | 国产一区二区三区不卡视频网站| 国产在线一区二区三区欧美| 成人福利一区| av资源站久久亚洲| 亚洲国产中文在线| 亚洲一区美女视频在线观看免费| 国产欧美自拍| 国产精品美女av| 国产成人亚洲一区二区三区| 国产精品电影观看| 97欧美成人| 国产精品免费一区| 欧美成人高清视频在线观看| 国产精品美腿一区在线看| 欧美日韩视频免费观看| 人九九综合九九宗合| 密臀av在线播放| 欧美一二三视频| videos性欧美另类高清| 欧美最顶级丰满的aⅴ艳星| 手机在线理论片| 91精品国产91久久久久久最新| 人人草在线视频| 清纯唯美亚洲激情| 88xx成人网| 亚洲一区中文字幕在线观看| 日韩一区二区三区高清在线观看| 动漫精品视频| 欧美日韩一本| 日韩久久在线| 外国成人免费视频| 精品视频在线观看一区二区| 亚洲精品精选| 激情五月开心婷婷| 蜜桃精品视频在线| 麻豆网站免费观看| 99久久er热在这里只有精品15 | 天天操天天干天天综合网| 男人的天堂一区二区| 91激情五月电影| 国产偷人爽久久久久久老妇app| 欧美日韩一区三区四区| 无码人妻精品一区二区| 欧美日韩夫妻久久| 东京干手机福利视频| 亚洲欧美在线看| av在线播放av| 欧美高清在线播放| 欧美成人影院| 97伦理在线四区| 亚洲免费专区| 亚洲 欧洲 日韩| 99亚洲精品| 亚洲久久中文字幕| 成人一级视频在线观看| 日本精品在线观看视频| 亚洲精品你懂的| 日本中文字幕免费| 欧美三区在线观看| 成人免费观看在线视频| 中日韩美女免费视频网站在线观看 | 亚洲国产成人精品一区二区三区| 日韩高清有码在线| 日本在线视频网| 欧美亚洲国产成人精品| 中文字幕日本一区| 看欧美日韩国产| 欧美不卡视频| 黄色国产小视频| 不卡欧美aaaaa| 国产免费久久久久| 欧美性猛交xxxx富婆| av中文字幕免费| 在线观看不卡av| av女在线播放| 444亚洲人体| 欧美一级淫片| 日韩免费一级视频| 国产精选一区二区三区| 日韩丰满少妇无码内射| 亚洲一区二区三区四区在线| 最近中文字幕在线观看视频| 亚洲精品国产电影| 成人a在线视频免费观看| 日本成人精品在线| 成人av午夜电影| 综合 欧美 亚洲日本| 天天操天天干天天综合网| 国产免费av电影| 在线看欧美日韩| 亚洲黄色网址| 国产伦精品一区二区三区视频黑人| 久久综合99| 中文字幕国产传媒| 久久久一区二区三区捆绑**| 国产在线视频你懂的| 91精品国产高清一区二区三区蜜臀 | 蜜桃视频在线观看播放| 在线观看av的网站| 在线精品国产成人综合| 亚洲美女炮图| 国产伦精品一区二区三区高清版| 一区二区三区网站| www.日本一区| 国产欧美日韩在线| 毛片在线免费视频| 日韩av在线直播| 两个人看的在线视频www| 国产一级特黄a大片99| 欧美日本中文| 99久久久久久中文字幕一区| 欧美日韩一区二区三区在线视频| 欧美激情一级片一区二区| 日本人视频jizz页码69| 国产偷国产偷精品高清尤物 | 亚洲熟女一区二区| 一区二区三区精品| 亚洲精品国产av| 久久久久久国产精品| gogo人体一区| 日韩国产欧美亚洲| 2022国产精品视频| 无码人妻一区二区三区线| 亚洲人成在线观看网站高清| 不卡一二三区| 欧美专区一二三| 日韩国产在线观看一区| 成人无码av片在线观看| 欧美日韩高清在线播放| 动漫一区在线| 97欧洲一区二区精品免费| 亚洲性人人天天夜夜摸| 网站免费在线观看| 色老综合老女人久久久| 香蕉视频网站在线观看| 91超碰在线电影| aa级大片欧美三级| a资源在线观看| 欧美一区午夜视频在线观看| 搞黄网站在线看| 欧美精品亚洲精品| 老汉av免费一区二区三区| 日韩在线中文字幕视频| 精品国产污污免费网站入口| 国产网站在线| 亚洲精品一区二区三区四区五区| 加勒比av一区二区| 国产一级黄色av| 亚洲欧美在线磁力| 国产视频一区二区在线播放| 99视频在线免费播放| 国产日韩一级二级三级| 国产极品久久久| 欧美在线视频免费| 天天做天天爱天天综合网| 国产国语老龄妇女a片| 一本久久综合亚洲鲁鲁五月天| 日本在线人成| 国产综合 伊人色| 激情图片小说一区| 成人精品在线看| 俺去啦;欧美日韩| 日韩超碰人人爽人人做人人添| jizz18女人| 欧美日韩国产中字| 国产黄色在线网站| 美日韩精品免费| 国产成人高清视频| 中文字幕av影视| 97超碰色婷婷| 欧美欧美全黄|