太子河网站建设公司创新互联公司,太子河网站设计制作,有大型网站制作公司丰富经验。已为太子河数千家提供企业网站建设服务。企业网站搭建\外贸营销网站建设要多少钱,请找那个售后服务好的太子河做网站的公司定做!
近些年随着Flutter开发的App不断涌现,其灵活高效的编程体验、建设良好的开发生态和后期易维护等优点,逐渐得到开发者和企业的认可。
Flutter代码稍作调整,即可同时编译、打包出来App和Web/H5站点。后者即为Flutter For Web(简写FFW)。例如:若App内嵌了Flutter页面,那么这些页面就可以被重复利用,生成M站。
但是FFW直接产出的Web/H5站点,首屏加载速度普遍较慢。另外,深入使用FFW也会发现,其2种渲染模式在复杂页面的交互上,有不同程度的卡顿问题。
针对上述性能问题的解决,作者做了较为详尽的调研:本文首先分享了性能优化的经验;然后引入element-embedding的概念;最后分享一种探索出的、适用于某些场景的试验方案。
FFW有2种渲染模式,是由同一套源码,使用2种不同的命令,打包出来的2套编译产物。
flutter build web --web-renderer html --release --pwa-strategy none
flutter pub run flutter_web_optimizer optimize --asset-base ./
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, //阻尼,俗称摩擦力
);
在主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.");
}
});
};
在入口处(main.dart)里主动下载、加载noto字体。
否则,此文件将从外网CDN匹配和下载;并且加载过程中,界面的文字会展示乱码。
var fontLoader2 = FontLoader("Noto Sans SC");
fontLoader2.addFont(fetchFont2());
await fontLoader2.load()
Future 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');
}
}
同html的刷新帧率优化。
html模式数据分析对比
抽样测速的数据
同内容的、Vue.js线上版本,抽样测速数据
首次加载, js大文件列表
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是Flutter SDK 3.7的新功能;在2023年的Flutter Forward大会上被推出。在Github的Flutter Sample项目,有两个demo:html+js集成和Angular.js集成。
图片
► 特性:
► 优点:
利用FFW可以方便地打包2种渲染产物的特性:
图片
页面交互(滚动、点击、切换等)操作不太复杂的场景。
在纯Web开发领域,传统框架(Vue.js,React.js等)仍是优先的选择。但是,经过技术探索,仍能找到FFW的一些应用场景。尤其App端Flutter代码转为Web/H5的需求很强时,可以考虑使用本文最后讲述的、经过优化和重新架构的FFW方案。
魏子博
■ 经销商技术部-移动APP团队
■ 之家新人,移动端全栈开发经验。
网页标题:FlutterForWeb性能优化和新场景探索
URL标题:http://www.csdahua.cn/qtweb/news42/295442.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网