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

Flutter瘦身大作战

xianyu4年前 (2021-03-09)闲鱼技术314

作者:闲鱼技术-三莅

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

背景

闲鱼技术团队于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

分享给朋友:

相关文章

排名过低,你有过这种烦恼吗?

排名过低,你有过这种烦恼吗?

  排名过低,你有过这种烦恼吗?      2021年01月08日   闲鱼流量   52 views   0   用闲鱼卖东西的卖家相信都会有这种烦恼,那便是排名过低。排名过低会影响什么呢?其实排名过低便意味你的浏览量下降,很少有人能看到你的东西。你所上架的商品无人问津, 商品卖不出去,就没有收入。这对于许多人来说是非常痛苦的。那么为什么会排名过低呢?真正的原因在这儿。   关于排名过低的问题,其实总体上来说就是四个原因。   原因一:你的闲鱼权重下降。在闲鱼上,权重越高,你的浏览量也越高。如果你的权重不高的话,那么你的浏览量就会下降,你的排名...

关于卖货的选品技巧和方法!

关于卖货的选品技巧和方法!

  【闲鱼流量】关于卖货的选品技巧和方法!      2020年08月05日   闲鱼流量   59 views   0   大家在运营闲鱼时应该会发现这里面其实有很多技巧和方法,会使用的人可以像鲨鱼一样畅游,但是如果不会的话,就只能像咸鱼一样,那么我们如何做到像鲨鱼一样呢?别急,跟着小编,每天探索新玩法,各种技巧说不停,那么今天我们来说一说为什么别人做到一天十几单,日利润过千呢?其实这和我们的宝贝选品有着不可分割的联系,那么关于我们的选品的技巧和方法都有哪些呢?接下来就跟小编一起来看看吧!   【闲鱼流量】一:从闲鱼定义看,闲鱼既然是二手交易平台处理...

闲鱼店铺的具体操作有哪些攻略?攻略大全等着你

闲鱼店铺的具体操作有哪些攻略?攻略大全等着你

  【闲鱼排名】闲鱼店铺的具体操作有哪些攻略?攻略大全等着你      2020年10月07日   闲鱼排名   56 views   0   无论是工作、学习,还是生活,我们都需要一套有序列的方针。在闲鱼上卖货也是如此,想要在闲鱼上拥有属于自己的一桶金,那么就要拥有一套具体的操作攻略。操作攻略有哪些?下面就让我来分享我的独家攻略。   攻略一:除了养号之外,我们应该如何提高店铺的流量?其实,我们还可以通过将商品加入鱼塘、分享至朋友圈,让更多的人看到我们的商品,这样就能为我们的商品带来更多的流量。以上就是普通攻略,还有一个重点攻略就是保持商品的垂直性。...

闲鱼上的销售技巧,怎么获取大量的流量?

闲鱼上的销售技巧,怎么获取大量的流量?

  【闲鱼助手】闲鱼上的销售技巧,怎么获取大量的流量?      2020年09月14日   闲鱼助手   89 views   0   【闲鱼浏览量】众所周知,闲鱼是一个很大的二手交易平台,所以很多的人都想在上面把物品售卖出去,但是一直都不会有人来咨询,所以就更不会有人来买了,这会让人很头痛,那我们应该怎样快速地销售出自己的闲鱼物品的?我就带大家来了解一下。   如果想要在闲鱼赚钱,我们所选择的商品价格一定要低,有很多的批发网站可以选择,因为我们作为闲鱼卖家,主要是靠信息差来赚钱。比我们只要价格比较低,有比较好的货源就可以了,就像抖音引流里面的那一些...

闲鱼上买三七?多方资源对接破解农产品滞销难题

闲鱼上买三七?多方资源对接破解农产品滞销难题

  图集   新华网云南文山市3月8日电(沈美)近年来,我国农产品质量水平不断提升,但农产品滞销现象仍时有发生。如何将优质农产品卖出去,最大限度地推动农产品产业健康发展,成为农业从业者、企业家以及当地政府必须思考的问题。3月7日,2018文山三七滋补养生节暨闲鱼助力农产品上行战略发布会在云南省文山壮族苗族自治州文山市人民政府政务汇报厅举行。发布会上,云南省文山市人民政府、贵州省平坝区人民政府、砚山县人民政府与闲鱼平台签订中小农户农产品上行战略合作协议,闲鱼平台将对文山三七及特色农产品进行全网推广。这意味着,闲鱼除了可以为消费者提供二手商品交易功能之外,还将为消费者提供大量原产地优质农产品...

闲鱼收到危机交易,如何解除?

闲鱼收到危机交易,如何解除?

  【闲鱼浏览量】闲鱼收到危机交易,如何解除?      2020年09月17日   闲鱼浏览量   78 views   0   【闲鱼浏览量】闲鱼危机交易,也就是涉及到了我们支付财产安全的不安全交易,一般来说,出现这种危机交易的话,都是因为站外引导引起的,那么出现这种违规,我们是否可以解除呢?   答案当然是肯定的,我们可以自己进行一个解除,我们可以向闲鱼客服反馈,一般首次发生,写下一个保证书,就可以解除了,非常简单的操作,但是这个机会每个人都是只有一次的,那么这次之后如果再出现这种情况,我们该怎么办呢?   【闲鱼浏览量】其实也不是没有办法...

发表评论

访客

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