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

如何讓 Flutter 應用更好地使用 SVG?

開發 開發工具
本文將帶大家了解 SVG 在 Flutter 應用中的性能問題,分享 UC 瀏覽器內核技術團隊在 Flutter 應用中改進 SVG 應用的探索實踐。

SVG 作為一個強大的矢量圖標準格式,在圖片清晰度的表現力上有著位圖無法比擬的優勢。那么是否 SVG 就是絕對的首選了呢?事實可能并非如此。本文將帶大家了解 SVG 在 Flutter 應用中的性能問題,分享 UC 瀏覽器內核技術團隊在 Flutter 應用中改進 SVG 應用的探索實踐。

例說歷史

在計算機的世界里,很多空間優化都隱藏著計算消耗,比如下面這張色彩和形狀豐富的 4k 圖片(其實也可以是 8k,屏幕夠大就可以看到),壓縮后只有 5kB 大小。[[332770]][[332771]]

??

??

 

 

如果這個 5kB 用 PNG 來存儲的圖片,是下圖這個樣子。

??

??

表現力天差地別。

為了達到類似的清晰度,一般操作系統會協助應用打包時在 UI 資源中歸集多個分辨率的圖片。

??

??

32x32

 

??

??

64x64


 

??

??

256x256

 

 

??

??

1024x1024

 

上面這一個圖標,資源包占用超過 120kB,其中最大的一個版本,運行內存占用在 4MB。

這么看來,SVG 圖片應該是絕對首選吧?

并非如此。在給 Flutter 做 SVG 支持分析之前,開發者可能覺得各個移動系統 API 中沒有提供是個很大缺憾。

而經過光柵化代價數據分析后,也能理解了系統對盲目使用 SVG 帶來問題的擔憂。

比如還是上面這個 SVG 圖片,在驍龍 626 的手機上,Flutter 光柵化到 64x64 的區域需要 34ms,一個 SVG 讓應用與 60 幀流暢度徹底無緣。實測 IPhone X 需要 8ms,只能流暢顯示兩個。

另外補充一點,SVG 或者說矢量圖的應用需求是 UI 扁平化趨勢興起后才出現的。在擬物化的時期,拋開光柵化速度不說,矢量圖在顯示寫實風格的圖標時,缺陷是無法容忍的。比如 doggy,用較激進的追蹤矢量化后(右側),已經數碼感十足,存儲占用也遠超 PNG。

??

??

好在,扁平化的矢量圖在工程推進時,也在有意無意回避前面說的問題,大部分都走簡約風。所以只要避開陷阱,SVG 還是在很多場景可以做到表現優秀的。

應用現狀

Flutter 項目主線沒有支持

Flutter 的基礎組件 Skia 代碼中有 SVG 目錄,但別誤會了,Skia 只有序列化至 SVG 的功能,沒有解碼繪制 SVG 的能力。

框架開發計劃目前也沒有支持的打算:https://github.com/flutter/flutter/issues/1831

OS 也沒有支持的意向

這是可以理解的,因為龐大如 Android 和 iOS 也默認不支持:

大家的共識是,全功能的 SVG 支持工作量不小,還有性能隱患(都是拐著彎提到)。

SVG 的鍋,矢量字體方案不用背

前面 SVG 咨詢,在建議解決方案中,都提到用矢量字體解決。矢量字體:

  • 主流 OS 都自帶的支持。
  • 基本只能單色。
  • 不用依賴 xml。
  • 由于單色輸出,很多圖層繪制疊加等等不可控的性能影響要素都被排除。
  • 系統方便做位圖緩存管理(我們開發者工具后續可以再研究)。

雖然在 SVG 投入不少研究,也不得不承認,字體矢量圖輸出是目前很務實高效的方案。

配合工具流程改進 SVG 應用

SVG 作為一個強大的矢量圖標準格式,還是可以找到合適的應用的。比如多彩圖標,方便熱更新,生產工具對此格式的廣泛支持。

讓 SVG 再次偉大

在 OS 和 runtime 都拋棄 SVG 的情況下,flutter_svg 包毅然然扛起大旗,簡單快捷的給 Flutter 提供了 SVG 渲染解碼的能力,顯示出 Flutter/Dart 不俗的擴展潛能。

flutter_svg 的使用非常簡單,提供和 flutter framework 中 image_provider 類似的接口。下面兩段代碼就是分別顯示來自 asset 和網絡的 SVG 圖片:

SvgPicture.asset( 
'assets/adsmall.svg',
placeholderBuilder: (BuildContext context) => Container(
child: const CircularProgressIndicator()),
),

SvgPicture.network(
'https://raw.githubusercontent.com/dnfield/flutter_svg/master/example/assets/deborah_ufw/new-camera.svg',
placeholderBuilder: (BuildContext context) => Container(
child: const CircularProgressIndicator()),
),

用工具避坑

不能對 SVG 的性能隱患坐視不理。

UC 瀏覽器內核技術團隊開發了一個【資源面板】工具,可以方便地連接 Flutter 應用,實時顯示資源分配的內存,對其中的 SVG 圖片,資源面板提供了預覽和獲取光柵化損耗的功能。

??

??

通過記錄和對比 SVG 在實際移動設備上的光柵化損耗,我們可以方便地識別出有隱患的 SVG 文件,將 SVG 的應用安排妥當。

??

??

通過實際 Rasterization Cost 的對比可以看到,簡約風格的圖標,時間消耗到 16.66ms 來說在驍龍 626 上也還是可以接受的。

實現原理

flutter_svg

flutter_svg 是一個 dart package,提供解析來自 network、asset、memory 等 SVG 的能力。

由于解析結果并不是 ui.Image 這樣的位圖,所以 flutter_svg 并沒有和 ImageCache 協作,而是自己實現了一套 PictureCache , PictureCache 中緩存的是 ui.Picture ,這個類實際是 skia 引擎的 SkPicture Wrapper,二進制方式記錄具體的 SVG 繪制指令。

ui.Picture 類占用的內存不會很大,緩存基本上是為了避免反復 parse xml。

比如 SvgPicture.asset 的構造接口如下:

SvgPicture.asset( 
String assetName, {
Key key,
this.matchTextDirection = false,
AssetBundle bundle,
String package,
this.width,
this.height,
this.fit = BoxFit.contain,
this.alignment = Alignment.center,
this.allowDrawingOutsideViewBox = false,
this.placeholderBuilder,
Color color,
BlendMode colorBlendMode = BlendMode.srcIn,
this.semanticsLabel,
this.excludeFromSemantics = false,
}) : pictureProvider = ExactAssetPicture(
allowDrawingOutsideViewBox == true
? svgStringDecoderOutsideViewBox
: svgStringDecoder,
assetName,
bundle: bundle,
package: package,
colorFilter: _getColorFilter(color, colorBlendMode)),
super(key: key);

SvgPicture 的 _picture,由 pictureProvider 的 stream 通知更新:

void _resolveImage() { 
final PictureStream newStream = widget.pictureProvider
.resolve(createLocalPictureConfiguration(context));
assert(newStream != null);
_updateSourceStream(newStream);
}

pictureProvider 的 stream 由 來自 pictureCache 的 completer 填充 ui.Picture 。

// in PictureProvider<T>.resolve 
stream.setCompleter(
_cache.putIfAbsent(
key,
() => load(key, onError: onError),
),
);

Debug 和 Profile 模式下,通過添加配合代碼,開發者工具可以在 PictureCache 中查詢所有現存的 SvgPicture 。

光柵化時間獲取

光柵化的發起接口是 ui.Picutre.toImage 方法,具體的計時在 rasterizer 線程。

??

??

??

??

補充說明

Android VectorDrawable

Android 提供了一套 VectorDrawable 方案,是一個簡化版的 SVG , 格式和特性不完全兼容,提供轉換工具。從文檔來看,確實是擔心過度復雜的 SVG 影響性能。參考文檔:https://developer.android.com/studio/write/vector-asset-studio

單獨 SVG 位圖緩存優化

目前 Flutter 用的是一次性光柵化輸出每幀的模式,和 chromium 的 cc 按區域構建位圖再合成不同,如果在光柵化輸出時標記 SVG 的 Picture,緩存這部分位圖可以提升幀數,代價當然是內存損耗。

這個功能目前純用 Dart 無法方便實現,因為在 dart.ui 線程中,RenderPicture 無法預見具體的光柵化分辨率。

 

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2018-10-11 09:40:53

前端JavaScript編程語言

2021-02-25 22:17:19

開發技術編程

2019-03-22 14:20:26

管理多云云計算

2013-05-02 14:39:11

iOS開發iOS應用崩潰解決

2022-09-12 23:53:53

JavaScript條件判斷開發

2015-02-26 09:19:00

2020-11-24 12:07:57

阿里云serverless容器

2012-02-08 16:19:09

ibmdw

2012-02-14 12:50:13

ibmdw

2015-11-18 09:56:24

數據中心監控

2015-08-21 10:38:26

DaaS

2014-10-29 09:55:58

程序員代碼

2021-01-28 14:53:19

PHP編碼開發

2017-10-12 15:20:57

數據中心遷移數據云端

2022-05-06 15:58:44

物聯網社區物聯網應用

2022-05-05 16:49:12

物聯網社區應急

2011-07-19 09:22:20

活動目錄

2015-03-12 15:00:00

編程12條自問更好地編程

2012-12-20 09:46:42

應用虛擬化

2023-11-09 11:48:41

點贊
收藏

51CTO技術棧公眾號

国产精品久久久久影院色老大| 综合av在线| 日韩欧美在线国产| 一区二区冒白浆视频| 国产精品久久久久久久久毛片| 欧美日本免费| 亚洲精品资源在线| 亚洲精品在线视频播放| 99色在线观看| 国产精品久久久久久久久免费丝袜 | 国产精品电影一区| 欧美特级一级片| 欧美丝袜足交| 91精品国产麻豆| 日本在线观看a| 永久免费网站在线| 久久久久久久久99精品| 91在线播放国产| 精品免费囯产一区二区三区| 一本一道久久a久久精品蜜桃| 亚洲国产成人精品久久| 在线看三级电影| 久久91导航| 成人欧美一区二区三区黑人麻豆| 懂色一区二区三区av片| 国产精品成人无码| 亚洲国产精品一区制服丝袜| 日韩一区二区在线视频| 欧美一区二区三区成人精品| 日韩一级淫片| 欧美日本国产一区| 国产精品久久久久9999小说| www欧美xxxx| 国产精品福利电影一区二区三区四区| 精品视频第一区| av资源免费看| 久久精品国产成人一区二区三区| 3344国产精品免费看| 亚洲国产精品免费在线观看| 成人免费看片39| 欧美a v在线播放| 91影院在线播放| 麻豆九一精品爱看视频在线观看免费| 九色91av视频| 国产白丝一区二区三区 | 亚洲一区二区高清| 亚洲午夜精品福利| 免费播放片a高清在线观看| 成人亚洲一区二区一| 成人福利视频在线观看| 中文字幕无线码一区 | 另类小说第一页| 自拍视频在线看| 亚洲成av人片一区二区梦乃| 91精品国产毛片武则天| 黄色成人在线| ㊣最新国产の精品bt伙计久久| 小说区图片区图片区另类灬| 国产小视频在线| 久久免费看少妇高潮| 六月婷婷久久| 经典三级在线| 国产情人综合久久777777| 日韩动漫在线观看| 国产在线观看高清视频| 日本一区二区久久| 亚洲福利av在线| 香蕉视频网站在线观看| 最新国产成人在线观看| 欧美日韩亚洲国产成人| 曰本三级在线| 午夜精品福利视频网站| 国产成人亚洲精品无码h在线| 一区二区三区电影大全| 欧美性猛交xxxx黑人交| av在线网址导航| 懂色av色香蕉一区二区蜜桃| 日韩免费视频一区二区| av直播在线观看| 欧美熟乱15p| 久久九九全国免费精品观看| 欧美成人手机视频| 国产精品夜夜夜| 国产v综合ⅴ日韩v欧美大片| 最近国语视频在线观看免费播放| 黄色小说综合网站| 国产精品免费在线播放| 国产特黄在线| 最新成人av在线| 日韩a∨精品日韩在线观看| 欧美动物xxx| 4438成人网| yy1111111| 成人激情视频| 久热精品在线视频| 永久免费看片在线播放| 青青草精品视频| 18成人在线| 日韩欧美亚洲系列| 国产精品福利影院| 免费av手机在线观看| 澳门av一区二区三区| 日韩一区二区免费高清| 日韩在线免费观看av| 亚洲欧洲中文字幕| 欧美在线日韩在线| 国产片在线播放| 2023国产精品| 国产高清不卡无码视频| 久九九久频精品短视频| 欧美哺乳videos| 欧美大波大乳巨大乳| 黄色精品一区| 国产精品偷伦视频免费观看国产| 国产精品久久久久久久久久久久久久久久久久 | 亚洲精品乱码久久久久久久久 | 中文在线资源| 欧美一区午夜视频在线观看 | 国产成人精品免费看视频| 久久久久久久综合狠狠综合| 屁屁影院ccyy国产第一页| 精品日本视频| 国产视频精品久久久| 久久精品这里只有精品| 蜜桃久久av一区| 欧美成人一区二区在线| 福利在线导航136| 欧美日韩精品欧美日韩精品| 日本黄色网址大全| 精品成人免费| 99视频国产精品免费观看| 在线观看完整版免费| 色婷婷综合久久久久中文一区二区| 日韩高清一二三区| 一区二区电影| 91精品视频在线播放| 午夜看片在线免费| 欧美日韩一区久久| 亚洲色图第四色| 三级久久三级久久久| 麻豆av一区| 2022成人影院| 亚洲欧洲日夜超级视频| 精品成人一区二区三区免费视频| 亚洲午夜精品网| 欧美在线a视频| 99re6这里只有精品| 国产成人综合精品在线| 黄色在线视频观看网站| 岛国av一区二区三区| 日本黄色免费观看| 亚洲激情欧美| 国语精品中文字幕| 亚洲免费福利| 亚洲精品日韩在线| 中文字幕在线欧美| 国产欧美日韩一区二区三区在线观看 | 国模私拍一区二区三区| 国产999久久久| 一级日本不卡的影视| 亚洲少妇中文字幕| 亚洲视频1区| 麻豆亚洲一区| 日韩精品三区| 色偷偷噜噜噜亚洲男人的天堂| 在线观看中文字幕码| 国产精品久久久久久久久图文区 | 欧美成人福利| 欧美成人免费一级人片100| 成人高潮片免费视频| 亚洲国产欧美在线| 好吊日免费视频| 日韩av中文字幕一区二区| 亚洲图片都市激情| 视频一区日韩| 538国产精品视频一区二区| 青青草在线免费视频| 欧美日免费三级在线| 成年人av电影| 97se亚洲国产综合在线| 亚洲爆乳无码专区| 91精品国产视频| 国产在线精品一区二区中文| 日韩和的一区二在线| 久久91精品国产| 深夜影院在线观看| 欧美日韩亚洲综合在线| 久久97人妻无码一区二区三区| 99精品1区2区| 中文字幕1234区| 最新日韩在线| 亚洲午夜精品久久久久久浪潮| 99re热精品视频| 国产福利视频一区| 日本小视频在线免费观看| 亚洲欧洲自拍偷拍| av一区二区三| 在线观看www91| 国产精品99精品| 国产亚洲午夜高清国产拍精品| aaa一级黄色片| 久久久噜噜噜久久狠狠50岁| 日本一本草久p| 国产麻豆精品久久| 91最新在线免费观看| 中文字幕一区久| 欧美区在线播放| 国产福利片在线| 精品国产91洋老外米糕| 国产又黄又粗又猛又爽| 欧美色播在线播放| 黑人巨大精品一区二区在线| 国产午夜久久久久| 性囗交免费视频观看| 精品一区二区三区的国产在线播放| 精品无码一区二区三区在线| 我不卡影院28| 先锋在线资源一区二区三区| 人人精品视频| 国产精品一区在线观看| 国产精品一区免费在线 | 18禁裸男晨勃露j毛免费观看| 日韩成人精品一区二区| 欧美国产视频在线观看| 91精品丝袜国产高跟在线| 91精品久久久久久久久青青| 在线成人av观看| 午夜精品久久久久久久白皮肤| www国产在线观看 | free性欧美| 久久福利视频网| 看女生喷水的网站在线观看| 一区二区三区 在线观看视| 人人妻人人澡人人爽久久av| 日韩一区二区三区精品视频| 国产欧美一级片| 91精品国产色综合久久久蜜香臀| 老熟妇一区二区三区啪啪| 一本色道久久综合狠狠躁的推荐| 国产女同在线观看| 亚洲成av人片观看| 日本中文字幕免费| 精品国产精品自拍| 日韩免费av片| 亚洲 欧美综合在线网络| 国产一级片免费| 亚洲一卡二卡三卡四卡| 久久久久无码国产精品| 亚洲在线中文字幕| 精品一区二区三区四| 洋洋av久久久久久久一区| 青青草手机视频在线观看| 国产精品家庭影院| 91久久国产综合| 亚洲精品免费在线| 国产在线视频二区| 欧美视频在线免费| 国产三级理论片| 欧美美女喷水视频| 国产欧美日韩成人| 精品国产一区二区三区久久久蜜月 | 免费在线亚洲欧美| 亚洲一二三区av| 精品在线免费观看| 国产又粗又猛又爽又黄| 成人免费看视频| 国产偷人妻精品一区| 国产日韩欧美精品一区| av黄色免费在线观看| 一区二区久久久| 久久久精品免费看| 在线观看欧美精品| 999av视频| 日韩av一区在线| 成人免费高清在线播放| 久久夜色精品国产| av女在线播放| 国产福利精品在线| 欧美成人一级| 久久精品一区二区三区不卡免费视频 | 久久激情久久| 五月天婷婷亚洲| 成人爱爱电影网址| 欧美 日韩 国产 成人 在线观看| 中文字幕一区二区视频| 精品一级少妇久久久久久久| 色婷婷久久久久swag精品| 91中文字幕在线播放| 亚洲第一色中文字幕| 国产黄在线播放| 欧美成人午夜激情视频| 天堂中文av在线资源库| 国产精品一区久久久| 国内精品麻豆美女在线播放视频| 日韩精品伦理第一区| 欧美阿v一级看视频| 免费日韩中文字幕| 国产成人高清在线| 欧洲av一区二区三区| 亚洲一区影音先锋| 免费看污视频的网站| 日韩三级视频在线观看| 成人在线免费电影| 久久久久国产精品一区| 国模一区二区| 精品国产一区二区三| 久久裸体网站| 欧美日韩黄色一级片| 黄色资源网久久资源365| 四虎影成人精品a片| 亚洲综合一区二区| 国产精品成人久久久| 精品一区二区三区三区| 成人日日夜夜| 国产精品美乳在线观看| 猫咪成人在线观看| 精品无码av无码免费专区| 免费在线看成人av| 国产精品无码久久久久久| 一区二区三区精密机械公司| 在线播放国产一区| 一本色道久久88精品综合| 国产福利片在线观看| 97人人模人人爽人人喊38tv| 99久久亚洲精品蜜臀| 麻豆传传媒久久久爱| 不卡av在线免费观看| 欧美日韩免费一区二区| 欧美日高清视频| 国产福利小视频在线观看| 热久久免费视频精品| 美女一区二区在线观看| 免费拍拍拍网站| 国产成人亚洲综合a∨猫咪| 99热在线观看精品| 欧美日韩在线免费视频| 国产精品一二三区视频| 欧美综合一区第一页| 日本天堂一区| 久久国产亚洲精品无码| 成人av网址在线观看| www.99re7.com| 精品精品欲导航| 污网站在线免费看| 99热99热| 亚洲激精日韩激精欧美精品| 久久久精品人妻一区二区三区| 亚洲自拍偷拍麻豆| 高清毛片aaaaaaaaa片| 欧美激情日韩图片| 成人h动漫免费观看网站| 国产成a人亚洲精v品在线观看| 国产99久久久精品| 黄色一级片在线| 精品1区2区在线观看| www成人免费观看| 久久精品五月婷婷| 久久只有精品| 岛国片在线免费观看| 91麻豆精品国产91久久久| 国产三区在线观看| 国产精品theporn88| 日韩一级大片| 法国空姐电影在线观看| 在线观看区一区二| 麻豆电影在线播放| αv一区二区三区| av不卡在线| 性欧美一区二区| 欧美一区二区在线免费播放| 手机av免费在线| 激情视频在线观看一区二区三区| 久久婷婷丁香| 成人在线观看高清| 亚洲激情自拍图| 素人啪啪色综合| 日本一级淫片演员| eeuss影院一区二区三区| 日本视频免费观看| 精品国产依人香蕉在线精品| 97视频一区| 亚洲成人av免费看| 亚洲精品亚洲人成人网在线播放| 好吊视频一二三区| 国产精品久久久久久久久影视| 中文字幕亚洲精品乱码| 波多野结衣有码| 欧美另类高清zo欧美| h片在线观看视频免费| 日本最新一区二区三区视频观看| 国产在线播精品第三| 日韩 欧美 综合| 中文字幕欧美精品在线 | 日韩欧美国产二区| 国产成人综合精品三级| 少妇高潮av久久久久久| 久久国产精品久久国产精品| 极品美女一区二区三区| 三上悠亚 电影| 欧美亚洲综合色|