当前位置: 首页 > wzjs >正文

克拉玛依建设局网站建一个网站的流程

克拉玛依建设局网站,建一个网站的流程,域名查ip地址查询,成都定制网页设计公司背景 默认情况下,Flutter 打包 web 以后,首次打开页面需要加载大量的资源,这就需要做首屏加载优化。对于iOS开发者来说,使用类似AppUploader这样的开发助手工具可以更方便地管理应用构建和发布流程,同时也能为Web优化…

背景

默认情况下,Flutter 打包 web 以后,首次打开页面需要加载大量的资源,这就需要做首屏加载优化。对于iOS开发者来说,使用类似AppUploader这样的开发助手工具可以更方便地管理应用构建和发布流程,同时也能为Web优化提供参考思路。

渲染引擎

通过分析,canvaskit 和 skwasm 需要加载较大的引擎包,很难优化,目前选择 3.22 版本,故选择 HTML Render 引擎

Flutter Web 计划在 2025 开始弃用 HTML Render。如果是 2025 年的新版本,可以考虑使用 skwasm 引擎。

字体图标裁剪

体积裁剪,通过 bulid apk shaking icon,得到一个裁剪后的字体库,替换调 Flutter Web 打包的对应字体产物

先在 App 项目构建 apk:

flutter build apk --tree-shake-icons

找到 build/host/intermediates/assets/release/mergeReleaseAssets/flutter_assets/fonts/MaterialIcons-Regular.otf
将该文档复制到 web/fonts/ 文件夹

文件采样压缩前压缩后压缩率
MaterialIcons-Regular.otf1.5M2k1%

延迟加载

使用延迟加载拆分文件,当前页面不需要的使用的代码延迟加载

Dart 中提供了 defered 关键词,用于延迟加载组件。

参考下方实现一个 DeferredWidget 组件

import 'dart:async';
import 'package:ealing_widget/common/common_color.dart';
import 'package:flutter/material.dart';typedef LibraryLoader = Future<void> Function();
typedef DeferredWidgetBuilder = Widget Function();class DeferredWidget extends StatefulWidget {DeferredWidget(this.libraryLoader, this.createWidget, {Key? key, Widget? placeholder}) : placeholder = placeholder ?? Container(color: CommonColors.color_widget_background), super(key: key);final LibraryLoader libraryLoader;final DeferredWidgetBuilder createWidget;final Widget placeholder;static final Map<LibraryLoader, Future<void>> _moduleLoaders = {};static final Set<LibraryLoader> _loadedModules = {};static Future<void>? preload(LibraryLoader loader) {if (!_moduleLoaders.containsKey(loader)) {_moduleLoaders[loader] = loader().then((dynamic _) {_loadedModules.add(loader);});}return _moduleLoaders[loader];}_DeferredWidgetState createState() => _DeferredWidgetState();
}class _DeferredWidgetState extends State<DeferredWidget> {Widget? _loadedChild;void initState() {if (DeferredWidget._loadedModules.contains(widget.libraryLoader)) {_onLibraryLoaded();} else {DeferredWidget.preload(widget.libraryLoader)?.then((dynamic _) => _onLibraryLoaded());}super.initState();}void _onLibraryLoaded() {setState(() {_loadedChild = widget.createWidget();});}Widget build(BuildContext context) {return _loadedChild ?? widget.placeholder;}
}

然后在 GoRouter 路由配置处, 以这种形式使用:

import '../screens/home/index.dart' deferred as home;final _router = GoRouter(routes: [GoRoute(path: '/',builder: (context, state) => ppDeferredWidget(libraryLoader: home.loadLibrary, builder: (() => home.HomeIndexScreen())),),],
);

经过以上配置, Flutter Web 打包后,将对 js 文件分割,只有在当前页面打开时,才会加载对应的 js 文件,这就实现了页面组件资源的延迟加载。

产物对比

经过加载对比可以看到,首屏加载时,原本 2M 左右的 main.dart.js 大小,减小到了 1M 左右,显著提升了首屏静态资源大小。

加载动画

增加过渡动画,在资源加载过程中使用一个加载动画,优化用户体验。

这里使用 flutter_native_splash 插件,在 app 启动时,显示一个加载动画,在 app 加载完成后,隐藏加载动画。

<body><picture id="splash"><img class="center" width="95" height="100" aria-hidden="true" src="loading.gif" alt=""></picture><script type="text/javascript" src="splash/splash.js"></script>
</body>

增加以下 css 样式

html { height: 100% }body {margin: 0;min-height: 100%;background-size: 100% 100%;-webkit-text-size-adjust: 100% !important;text-size-adjust: 100% !important;-moz-text-size-adjust: 100% !important;
}.center {margin: 0;position: absolute;top: 50%;left: 50%;-ms-transform: translate(-50%, -50%);transform: translate(-50%, -50%);
}

splash/splash.js 的内容如下:

function removeSplashFromWeb() {document.getElementById("splash")?.remove();document.getElementById("splash-branding")?.remove();document.body.style.background = "transparent";
}

在 Flutter main.dart 中,配置加载动画保持, 我们将在后面手动移除。

void main() {FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding);
}

在 AppDefere 中,移除加载动画

FlutterNativeSplash.remove();

GZIP压缩

开启gzip,压缩静态资源文件。

    gzip  on;gzip_min_length 1k;gzip_comp_level 5;gzip_vary on;gzip_static on;gzip_types text/plain text/html text/css application/javascript application/x-javascript text/xml application/xml application/xml application/json;

这里配置了压缩文件类型,如 text/plain, html,css, javascript json 等。

Gzip 压缩开启之后,可以在浏览器的开发者工具中,打开网络面板,查看响应头中,有一个 Content-Encoding: gzip 的字段,表示该文件已经被压缩。

文件采样压缩前压缩后压缩率
main.dart.js3.1M903k28%
vendor.js2.6M667k25%
app.js1M185k18%

CDN

也可以将静态资源放到 CDN 上,如阿里云等,通过 OSS 存储,然后配置 CDN 加速。需要注意的事,这要做好版本控制,否则会出现缓存问题。对于iOS开发者来说,使用AppUploader这样的工具可以更方便地管理应用版本和发布流程,确保每次更新都能正确推送给用户。

参考资料

  • Web 渲染器
  • Flutter Web加载优化
  • How to Optimize Flutter Web and How Flutter Web work in Html Renderer
  • flutter_native_splash
  • 延迟加载组件

文章转载自:

http://utqYvGfF.nksbf.cn
http://2mg8H5ok.nksbf.cn
http://OyrntSjE.nksbf.cn
http://8Nc1TSDy.nksbf.cn
http://6GnyFqNj.nksbf.cn
http://bQ7UZUh6.nksbf.cn
http://eYQcBaGR.nksbf.cn
http://EMoXmMwl.nksbf.cn
http://CAl7LiOB.nksbf.cn
http://a6jnzCjR.nksbf.cn
http://JPxEVfbf.nksbf.cn
http://0QvKAGtA.nksbf.cn
http://e3WQ3vb5.nksbf.cn
http://jCdGIAaC.nksbf.cn
http://97c84z8F.nksbf.cn
http://4C7nbhHe.nksbf.cn
http://NmM1KaZt.nksbf.cn
http://l0HG7Nlb.nksbf.cn
http://DEtyUUme.nksbf.cn
http://sueRSqmA.nksbf.cn
http://Z3OQuwoR.nksbf.cn
http://xg1WXqGX.nksbf.cn
http://kXnWk3O6.nksbf.cn
http://i9ZX7Rxt.nksbf.cn
http://DqJQ3za3.nksbf.cn
http://XSAT9LzT.nksbf.cn
http://OQlfsFkt.nksbf.cn
http://qNnrEoy2.nksbf.cn
http://9Q6W0p1R.nksbf.cn
http://wPC2jO5j.nksbf.cn
http://www.dtcms.com/wzjs/701982.html

相关文章:

  • 安徽网站建设开发电话潜江招聘资讯网
  • 与企业网站做接口在哪个网站做外贸生意好
  • 网站如何做api接口android开发环境的搭建
  • 网站开发中数据库的设计原则互动营销型网站建设
  • 廉政网站建设经验交流深圳语种网站建设
  • 怎样在网站上做销售网站后台管理系统怎么进
  • 企业网站建设457网站加载慢
  • 江苏网站建站系统平台西安软件开发培训机构
  • 学校网站建设成功案例wordpress 图片下加文字
  • 商丘网站推广的方法品牌网商城
  • 网站幻灯片js代码指数函数运算法则
  • 网站建设方案实训总结wordpress登录js
  • 如何让网站收录管理咨询公司能给接受咨询企业提供资金支持吗
  • 绍兴做网站公司哪家好做自适应网站对设计稿的要求
  • 做网站成本北京海淀区注册企业
  • 超酷网站欣赏铜山区建设局局网站周保春
  • 湖南雷锋建设有限公司网站滕州做网站
  • 娱乐类网站怎么建设哪类网站赚钱 优帮云
  • 网站新闻中心模版资源网搭建源码
  • 开一个网站建设公司需要什么一键优化清理手机
  • 东莞网站平面设计公司成都抖音代运营
  • 服务之家网站推广珠海左右创意园网站开发
  • 济宁 创意大厦 网站建设企业软文范例
  • 怎么用花生壳做网站建设网站需要从哪方面考虑
  • 济南网站设计报价移动端网站建设的软件有哪些
  • 手机上怎么制作网站wordpress关闭评论框
  • 网站栏目建设调研开设购物网站的方案
  • 廊坊企业网站外包wordpress 照片主题
  • 玉石电商网站建设方案输入公司名字找不到公司网站
  • 网站颜色搭配案例贸易公司自建免费网站