当前位置:首页 > 闲鱼技术 > 正文内容

Flutter瘦身大作战

xianyu3年前 (2021-03-09)闲鱼技术204

作者:闲鱼技术-三莅

微信号:ccjun91
添加微信, 免费测试软件
复制微信号

背景

闲鱼技术团队于2018年上半年率先引入了Flutter技术实现客户端开发,到目前为止成功改造并上线了复杂的商品详情和发布业务。随着改造业务的增多,安装包体积急剧上增。安装包体积决定了用户等待下载的时间和可能会耗费的流量,如何控制安装包体积,减小flutter产物的大小成为当务之急。本文从闲鱼客户端项目实践角度给出了一些通用的包大小检测以及优化方案,希望为对Flutter感兴趣的团队提供参考。

闲鱼客户端采用的Flutter和Native混合开发的模式,下面我们以ios端为例分析项目中flutter产物的大小(ipa包瘦身需求更为急切)。

ios工程对Flutter有如下依赖:

  • Flutter.framework : Flutter库和引擎
  • App.framework: dart业务源码相关文件
  • Flutter Plugin:编译出来的各种plugin的framework
  • flutter_assets:Flutter依赖的静态资源,如字体,图片等

第一次引入flutter版本改造详情页后,ipa包大小增加近20M,其中包括flutter引擎代码+被改造业务代码,继续发布页flutter改造后,ipa增加4M+。进一步分析解压ipa文件后发现Flutter.framework稳定保持在20M+的大小, 增加新的flutter业务——发布页之后,App.framework增幅近10M!

Flutter.framework是Flutter库和引擎的代码,我们能做的优化空间有限,先把目标放在dart业务相关的文件App.framework上。

Flutter产物大小分析

执行如下命令编译出一个release模式下的App.framework,并使用参数打印出产物具体大小

结果如下:

Instructions:代表AOT编译后生成的二进制代码大小

ReadOnlyData:代表生成二进制代码的元数据(例如PcDescriptor, StackMap,CodeSourceMap等)和字符串大小

VMIsolate/Isolate:代表剩下的对象的大小总和(例如代码中定义的常量和虚拟机特定元数据)

具体到业务层,想要分析各个业务模块所占用的大小该怎么办呢?

  1. 执行如下命令编译出一个arm64架构的App.framework,并将它的包组成结构放到指定目录build/aot.json文件中
  2. 使用dart命令将上一步生成的aot.json文件转化成结构可视化的网页

run_binary_size_analysis.dart是dart提供的一个分析工具,在flutter引擎源码中路径如下:

  1. 打开生成文件夹中的index.html即可分析具体业务所占用的大小,右上角的Large Symbols和Large Files按钮可以直接定位体积占比从大到小的方法/文件。

举个例子,上面的分析显示方法占用了大量体积,跟踪发现这个方法主要的操作是将Map数据转化成对象

由此我们可以推断这种类型转换的操作会导致编译生成一些体积很大的代码。

优化措施

  1. 减少显示类型转换操作

按照上述分析发现显示的类型转换  这类操作会导致App.framework体积显著增加,主要是它会增加类型检查以及抛出异常的处理逻辑:

通过提取静态公用方法的方式可以成功减少400k+体积。

  1. 通过编译参数 和减小生成代码的体积

表示在生成的动态库文件中,不使用堆栈跟踪符号

表示混淆,通过减少变量名/方法名的方式减小代码体积

  1. 通过修改ios打包脚本xcode_backend.sh,删除dSYM符号表信息文件,App.framework成功减小20%的大小。dSYM 是保存 16 进制函数地址映射信息的中转文件,包含我们调试的 symbols,用来分析 crash report 文件,解析出正确的错误函数信息。

使用xcrun命令将dSYM从framework中剥离出来,可以大大减小App.framework的体积。

  1. 减少flutter和native资源重复造成的体积增大

利用桥接的方式,flutter直接使用Platform端资源文件,避免因为资源文件重复导致的包大小增加问题。

主要方式是通过BasicMessageChannel在Flutter和Platform端传递信息。Flutter端将资源名AssetName传递给Platform端,Platform端接收到AssetName后,根据name定位到资源文件,并将该文件以二进制数据格式,通过BasicMessageChannel传递回Flutter端。

总结

引入Flutter带来的安装包体积问题会给很多技术团队带来困扰。通过以上措施,Flutter产物App.framework的大小减少30%+,闲鱼技术团队后续也会考虑采取下载并懒加载等方式减少资源占用的体积;继续代码生成中的各种对比,排查避免较大产物的写法,同时也会和Google一起进一步寻找优化空间。

<

扫描二维码推送至手机访问。

版权声明:本文由中客网络发布,如需转载请注明出处。

本文链接:http://www.zzzmc.cc/61.html

分享给朋友:

相关文章

闲鱼曝光小米众筹新品,和漫威合作,整套售价达9999元?

闲鱼曝光小米众筹新品,和漫威合作,整套售价达9999元?

  闲鱼曝光小米众筹新品,和漫威合作,整套售价达9999元?      2020年09月03日   闲鱼流量   105 views   0   【闲鱼浏览量】近日,奇迹的父亲,被称为斯坦李的死亡,就像四英雄之一许多复仇者消失,许多奇迹球迷致敬网络的记忆,“我们的超级英雄只是去了另一个平行宇宙。”就在同一天,官方还宣布小米产品,铜大师奇迹的主题手办登陆小米集资。   铜师傅是小米发展生态链企业,今年7月9日小米公司上市需要仪式上,小米手机创始人雷军赠送给港交所主席的“纯铜骑牛米兔”,以及对于小米科技集团通过上市进行定制的2万套“纯铜点赞米兔”均出自铜师...

在闲鱼上卖货有哪些吸引买家的技巧?

在闲鱼上卖货有哪些吸引买家的技巧?

  【闲鱼助手】在闲鱼上卖货有哪些吸引买家的技巧?      2020年10月12日   闲鱼助手   62 views   0   想要提高店铺的曝光量、店铺流量、商品的出单量,就要在一开始就通过商品吸引到买家们的目光。在闲鱼上卖货有什么技巧能够吸引到买家的们的目光呢?下面就让我来分享我的技巧。   技巧一:低价。低价总能吸引到大众的目光,所以吸引大众目光最好的方法就是低价。但是价格也不宜太低,太低的价格会让买家对该商品的质量产生怀疑,所以你应该定一个合适但是偏低的价格。这句话让许多卖家犯难:怎样的价格合适偏低?   其实只要价格定在20到15...

在闲鱼上怎样才能轻松地挣到钱?不要着急,挣钱小攻略等着你

在闲鱼上怎样才能轻松地挣到钱?不要着急,挣钱小攻略等着你

  【闲鱼批量上架软件】随着电商时代的到来,越来越多的人凭借着开网店挣到了自己的房子与车子,于是很多人都不满足于通过工作挣到一些小钱,他们想要通过开网店这一副业捞到一大笔金。而在闲鱼上开店不需要本金,也不需要过多人脉,于是大部分人群把自己的副业主战场转到闲鱼。在闲鱼上应该怎样才能轻松地挣到钱呢?不要着急,下面就让我来分享我的挣钱小攻略。   想要在闲鱼上挣到钱,那就要养号+货源。拥有一个优质的账号能让你的店铺流量源源不断,拥有一处稳定的货源能让你的店铺回头客无限增加,所以你一定要做好养好和寻找货源这两项。   【闲鱼批量上架软件】首先我来谈谈养号。如果你只是在观望闲鱼,还没有真正实...

闲鱼技巧,怎么提高自己的排名

闲鱼技巧,怎么提高自己的排名

  【闲鱼批量上架软件】随着闲鱼商家入驻的越来越多,新手小白也很多,但是很多的新手小白都不知道闲鱼怎么去提高自己的排名,没有排名就比不过其他的竞争对手,所以闲鱼的排名是很重要的,今天我就来分享一下怎样提高自己的闲鱼排名。   我们闲鱼的排名是根据自己的账号来给的,如果登录闲鱼的账号,芝麻信用很高,那自然而然的,自己发布的商品排名也会高,但是如果自己的信誉分很低,那商品排名也会很低。所以我们应该选择一个芝麻信用比较高的账号,来开通我们的闲鱼账号。   【闲鱼批量上架软件】每一个闲鱼宝贝的左下角都有一个超赞,当浏览你的人多了,点超赞的人也多了,闲鱼就会给你一个头衔,那这样我们的商品排名...

闲鱼有什么卖东西的技巧

闲鱼有什么卖东西的技巧

  【闲鱼排名】闲鱼有什么卖东西的技巧      2020年09月24日   闲鱼排名   59 views   0   【闲鱼浏览量】闲鱼是一个很大的二手交易平台,随着用户的越来越多,商家也在越来越多,我们作为商家应该怎么才能够比同行卖的东西多,更有竞争力,今天我就为大家来分享一下,闲鱼有什么卖东西的技巧。   1.你必须完善自己的个人信息   作为消费者的角度来想,自己在购买东西时,店家的信息也应该有足够的保障,每个人都想和他交易的人是可靠有效的,所以我觉得在闲鱼上卖东西,第一个重点就是完善自己的个人信息,真人身份验证至关重要,如果你有微博的...

闲鱼卖不出东西怎么办?总是出单难?

闲鱼卖不出东西怎么办?总是出单难?

  【闲鱼批量上架软件】近年来我国的电子商务发展真的是很快,自从有了网上购物,人们的生活变得更加便利,现在网上购物已经成为我们日常生活中非常重要的一部分,而我国也是网上购物最多的国家,我们对网购的需求很大,这就催生了很多电子商务平台的出现。   但是要说最成功的肯定是电子商务界的巨头---阿里巴巴,其名下的用户依然是超多,就闲鱼而言就有很高的流量。   但是玩的人多了,慢慢商品就也不好卖了,想要卖好商品还要要找一些可靠的方法,闲鱼里面也有很多的学问需要我们去学习。   【闲鱼批量上架软件】1、研究同行流量较高的商品。找出你所发布的宝贝类目中,做的比较好的10个同行,研究他们的...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。