精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

麻豆av一区二区三区久久| 欧美高清在线播放| 成人免费在线观看视频网站| av在线资源站| 国产一区二区三区国产| 久久99亚洲热视| 李丽珍裸体午夜理伦片| 一区二区电影免费观看| 综合久久给合久久狠狠狠97色 | 韩国美女久久| 国产精品毛片大码女人| 国产成人免费电影| 欧美激情一区二区三区免费观看 | 成人综合在线观看| 国产成人avxxxxx在线看| 亚洲波多野结衣| 欧美三级电影在线| 在线成人免费观看| 91精品91久久久中77777老牛| 亚洲乱亚洲乱妇| 9l国产精品久久久久麻豆| 国产欧美精品一区二区三区-老狼| 国产性生活网站| 清纯唯美综合亚洲| 日韩av网址在线观看| 欧美国产日韩另类| 日本综合视频| 性感美女久久精品| 欧美爱爱视频网站| 成人高清免费观看mv| www.一区二区| 999在线观看免费大全电视剧| 中文字幕69页| 日韩一级免费| 欧美剧在线观看| 99热99这里只有精品| 亚洲人成伊人成综合图片| 欧美大片在线观看| 久久精品亚洲天堂| 欧美成人福利| 欧美伊人精品成人久久综合97| 国产精品www在线观看| 麻豆电影在线播放| 国产精品女同互慰在线看| 欧美日韩在线一二三| 亚洲av电影一区| 成人av网站在线观看| 亚洲永久免费观看| 国产女人爽到高潮a毛片| 美女网站久久| 国产成人精品一区二区在线| 欧美精品韩国精品| 午夜亚洲伦理| 热99精品里视频精品| 成人午夜视频在线播放| av不卡免费看| 欧美亚洲国产日韩2020| 欧美三级一区二区三区| 99精品视频免费观看| 97视频免费在线看| 成年免费在线观看| 亚洲综合99| 日本成人精品在线| 久久精品无码av| 久久亚洲电影| 国产精品国模在线| 亚洲天堂免费av| 久久国内精品视频| 国产又爽又黄的激情精品视频| 最近中文字幕在线免费观看| 美女网站在线免费欧美精品| 成人免费观看a| www.久久成人| 成人午夜又粗又硬又大| 韩国成人动漫在线观看| 国产专区在线播放| 国产精品久久网站| 无码人妻精品一区二区三区99v| 成人免费网址| 五月天国产精品| 国产av无码专区亚洲精品| 香蕉成人影院| 欧美一级国产精品| 特级西西人体wwwww| 欧美人妖在线| 欧美xxxx18性欧美| 日本一区二区欧美| 日韩影院在线观看| 91亚洲精品丁香在线观看| 特黄视频在线观看| 欧美国产日产图区| 日韩成人手机在线| 都市激情亚洲一区| 91精品国产色综合久久ai换脸 | 久久久亚洲国产美女国产盗摄| 欧洲精品码一区二区三区免费看| 日本电影全部在线观看网站视频| 亚洲国产中文字幕在线视频综合| 欧美日韩中文在线视频| 国产高清视频一区二区| 亚洲精品资源在线| 欧美做爰爽爽爽爽爽爽| 久久高清国产| 7777奇米亚洲综合久久| 免费一级在线观看| 亚洲一区二区三区美女| 妺妺窝人体色www在线观看| 日韩一区网站| 中日韩美女免费视频网址在线观看 | 久久精品成人一区二区三区| 国产真实的和子乱拍在线观看| 日韩精品乱码av一区二区| 国产精品成人一区二区三区| 成人激情电影在线看| 图片区小说区区亚洲影院| 亚洲天堂网2018| 国产午夜一区| 97久久精品视频| av 一区二区三区| 国产婷婷色一区二区三区四区 | 日本三级在线观看网站| 欧美无砖砖区免费| 欧美图片第一页| 亚洲看片免费| 99re国产视频| 国产不卡在线| 欧美色综合天天久久综合精品| av在线播放网址| 中文字幕乱码亚洲无线精品一区| 国产成+人+综合+亚洲欧美丁香花| 性做久久久久久久| 亚洲另类一区二区| 成人黄色一级大片| 日韩片欧美片| 国产男女猛烈无遮挡91| 啊v视频在线| 欧洲精品一区二区三区在线观看| 女同性恋一区二区三区| 亚洲国产清纯| 国产精品美女诱惑| 黄视频在线免费看| 精品国产亚洲在线| 久久久一二三区| 国产suv精品一区二区883| 一区二区三区四区国产| 韩国成人在线| 一区二区三区精品99久久| 国产剧情在线视频| 2019国产精品| 午夜激情在线观看视频| 欧美精品系列| 国产美女久久久| 免费在线视频欧美| 欧美卡1卡2卡| 中文字幕av播放| 国产乱理伦片在线观看夜一区| 国产又黄又爽免费视频| 精品国产亚洲一区二区三区| 欧美成人亚洲成人| 开心激情综合网| 黑人欧美xxxx| 高潮毛片无遮挡| 蜜臀va亚洲va欧美va天堂| 亚洲日本精品| 日本精品在线观看| 81精品国产乱码久久久久久| 日韩电影在线观看完整版| 一本色道综合亚洲| 国产人与禽zoz0性伦| 国产揄拍国内精品对白| 九九热只有这里有精品| 欧美亚洲国产日韩| 国产999精品久久久影片官网| www.黄在线观看| 91精品欧美久久久久久动漫| 久久亚洲成人av| 久久综合国产精品| 在线观看国产一级片| 欧美日韩网址| 欧美日韩在线精品| www999久久| 97人人爽人人喊人人模波多| av在线天堂| 日韩精品一区二区三区中文精品| 日韩美女视频网站| 中文字幕不卡在线| 国产综合内射日韩久| 久久久亚洲人| 麻豆一区二区三区在线观看| 日本亚洲不卡| 成人写真视频福利网| 岛国在线视频网站| 日韩中文字幕视频在线| 熟妇人妻系列aⅴ无码专区友真希 熟妇人妻av无码一区二区三区 | 国产欧美日韩视频一区二区三区| 怡红院成人在线| 久久国产精品久久久久久久久久| 无码精品人妻一区二区| 在线播放亚洲一区| 在线观看亚洲天堂| 亚洲乱码国产乱码精品精的特点| 双性尿奴穿贞c带憋尿| 国产一区二区三区不卡在线观看| 久久久久久久久久久视频| 真实国产乱子伦精品一区二区三区| 九九99久久| 成人h动漫精品一区二区下载| 中文字幕在线不卡一区| 朝桐光av一区二区三区| 国产一区二区在线观看免费| 粗暴91大变态调教| 亚洲视频高清| 伊人情人网综合| 亚洲人挤奶视频| 国产日韩在线一区二区三区| 欧美网站免费| 亲爱的老师9免费观看全集电视剧| av毛片在线看| 视频在线观看99| 免费a级毛片在线观看| 337p日本欧洲亚洲大胆精品| 国产精品视频a| 欧美性猛交一区二区三区精品| 日韩美女视频网站| 亚洲一区在线视频| 久久久久亚洲av无码专区体验| 日本一区二区视频在线观看| 国产精品边吃奶边做爽| 成人精品一区二区三区中文字幕 | 久久久精品91| 中文字幕一区在线观看视频| 波多野结衣一二三四区| 26uuu亚洲综合色欧美| aaa黄色大片| 国产福利精品一区| 亚洲欧美一区二区三区不卡| 美女mm1313爽爽久久久蜜臀| 男操女免费网站| 日韩国产精品久久| 91香蕉视频导航| 日本视频一区二区三区| 日本熟妇人妻xxxxx| 久久久久久久高潮| www.亚洲天堂网| 久久国产66| 日韩中文字幕组| 可以免费看不卡的av网站| 久久美女福利视频| 久久综合九色| 人人爽人人av| 日本大胆欧美人术艺术动态| 91福利国产成人精品播放| 美女任你摸久久| www.夜夜爽| 极品少妇xxxx精品少妇| 久久精品国产露脸对白| 久久成人av少妇免费| 99精品视频国产| 国产乱子轮精品视频| av影片在线播放| 成人免费视频app| 美国黄色一级毛片| 久久久久久久综合| 林心如三级全黄裸体| 自拍偷拍亚洲欧美日韩| 久久机热这里只有精品| 亚洲成人777| 欧美日韩一级黄色片| 欧美三级一区二区| 国产成人精品一区二区无码呦 | 久久国产劲爆∧v内射| www.日韩av| 人妻少妇无码精品视频区| 国产精品久久久久久久午夜片| 欧美成人777| 亚洲高清久久久| 国产精品乱子伦| 欧美日韩一区小说| www.国产欧美| 日韩精品在线免费| 免费大片在线观看www| 久久99热精品这里久久精品| 在线天堂资源www在线污| 国产精品男女猛烈高潮激情| 日韩三级精品| 蜜桃成人免费视频| 五月久久久综合一区二区小说| 日本国产中文字幕| 久久激情网站| 能看毛片的网站| 久久久99精品免费观看不卡| 久久国产美女视频| 欧美日韩综合视频| 国产又大又长又粗| 日韩经典一区二区三区| 麻豆系列在线观看| 38少妇精品导航| 95精品视频| 蜜桃999成人看片在线观看| 亚洲精品888| 东京热加勒比无码少妇| 国产精品一区三区| 你懂得视频在线观看| 亚洲a一区二区| 91在线视频国产| 精品在线小视频| 伊人手机在线| 国产精品久久999| 精品av导航| 黄色网络在线观看| 日av在线不卡| 日韩片在线观看| 一区二区三区精密机械公司| 五月婷婷丁香在线| 日韩激情av在线播放| 中文字幕中文字幕在线中高清免费版| 国产成人精品999| 日韩av不卡一区| 成人小视频在线观看免费| 免费在线观看一区二区三区| 精品国产人妻一区二区三区| 亚洲猫色日本管| 中文字幕乱码中文字幕| 国产视频综合在线| 99thz桃花论族在线播放| 91久久极品少妇xxxxⅹ软件| 欧美aaaa视频| 激情视频免费网站| 国产欧美日韩一区二区三区在线观看| 成年人午夜视频| 精品久久国产字幕高潮| 国产色在线观看| 91青草视频久久| 91免费精品| 亚洲一级免费在线观看| 国产日韩三级在线| 日本高清不卡码| 亚洲免费视频网站| 自拍偷拍亚洲视频| 欧美日韩亚洲综合一区二区三区激情在线 | 久一区二区三区| 日韩精品一区二区三区蜜臀| 97超碰资源站在线观看| 亚洲a在线观看| 欧美激情黄色片| 亚洲综合激情视频| 中文字幕在线不卡一区| 国产精品一区二区黑人巨大| 久热爱精品视频线路一| 香蕉免费一区二区三区在线观看| 性做爰过程免费播放| 国产白丝精品91爽爽久久| 久久亚洲AV无码| 日韩av网站大全| 亚洲天堂一区二区| 亚洲三级一区| 国产一区二区在线观看免费| 久久97人妻无码一区二区三区| 精品日韩成人av| 国产不卡123| 欧美日韩精品免费在线观看视频| 噜噜噜久久亚洲精品国产品小说| 日本乱子伦xxxx| 欧美日韩午夜影院| 综合久久2019| 国产一区二区三区高清视频| 先锋亚洲精品| 9.1片黄在线观看| 欧美一卡二卡在线| 18aaaa精品欧美大片h| 欧美日韩国产高清视频| 久88久久88久久久| 久久久久人妻一区精品色欧美| 日韩大片在线观看视频| 欧美日韩视频免费观看| 超碰免费在线公开| 成a人片亚洲日本久久| 中文字幕精品无| 欧美猛男性生活免费| 女人抽搐喷水高潮国产精品| 三年中国国语在线播放免费| 亚洲色图.com| 午夜性色福利视频| 国产精品视频网| 激情另类综合| 2019男人天堂| 日韩女优电影在线观看| 欧美无毛视频| 青青在线免费视频| 久久久精品综合| 亚洲AV无码精品自拍| 国产精品高潮在线| 亚洲视频久久| 精品一区二区在线观看视频| 日韩欧美亚洲国产另类| 99re66热这里只有精品4| www.xxx麻豆| 国产精品日产欧美久久久久| 免费观看国产精品| 成人精品久久av网站|