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

Flutter瘦身大作战

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

作者:闲鱼技术-三莅

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

背景

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

分享给朋友:

相关文章

闲鱼如何发布商品才能获得好的排名?

闲鱼如何发布商品才能获得好的排名?

  现在有很多小伙伴在交换或者转让二手物品,都使用闲鱼这个APP,不仅仅是因为它是阿里旗下的,安全有保证,并且这个APP本身也是有很多优势,可以说是二手交易界的大佬,但是有的人宝贝上架之后就有人来咨询,而有的人却是好几天也没有人来问情况,其实导致这种情况的关键是在于我们处理的方法问题,没有按照正确的操作方式进行,因为闲鱼的基本功能就是发布闲置物品,所以很多时候不是发布之后立马就有效果。那么在闲鱼到底应该怎么去卖闲置物品?怎么去有技巧的上架呢?   技巧一就是选择发布的时间,我们可以选择周末全天或者每天晚上八点之后,午饭早饭时间也是可以的,另外,选择发布的账号,尽量选择一些信用分比较高的账...

闲鱼曝光下降原因终于找到了!

闲鱼曝光下降原因终于找到了!

  【闲鱼流量暴增系统】闲鱼曝光下降原因终于找到了!      2020年08月10日   闲鱼排名   106 views   0   首先,我来介绍一下商品曝光度下降的原因。   【闲鱼流量暴增系统】在闲鱼上,卖同一商品的商家不止一家,闲鱼为了能够均匀分配流量,闲鱼官方会把曝光度分流,这样你就不能拿到高的曝光量。   那么如何拿到高曝光量呢?   你必须要从你的标题、闲鱼圈子、闲鱼商品维护等方面下手。优化标题,加入闲鱼鱼塘,每天擦脸和编辑自己的商品等操作都能提高你的商品曝光量,你一定要每天维护你的商品。   闲鱼流量下降的原因还有...

闲鱼助手如何使用呢

闲鱼助手如何使用呢

  【闲鱼浏览量】闲鱼助手如何使用呢      2020年11月25日   闲鱼浏览量   54 views   0   闲鱼平台一直都是很受人欢迎的,在这个平台上可以出售一些自己不要的产品。当然了,平台上的产品大部分都是半成新或者是9成新的,性能方面还是很可靠的,有很多店主都会选择把自己用不到的产品卖出去,这个时候如果有闲鱼助手就会方便得多,今天就一起看一下闲鱼助手如何操作。   第一种方式:1,首先如果想要使用闲鱼助手的话,那么首先应该先注册一个账号,这个时候可以点击登录,要注意这边的账号大多数都是8位数的,所以一定要记住。   2,在注册完...

闲鱼降权恢复,有几种方法可以实现?

闲鱼降权恢复,有几种方法可以实现?

  在闲鱼店铺的经营中有些时候是存在隐形降权或者降权的,如此一来就很难在平台上面发现自己的店铺和店铺的商品,这样便会导致店铺没有流量,日复一日的走向关门。其实闲鱼店铺降权是可以恢复的,那么闲鱼降权恢复有几种方法呢?接下来同大家说一说。   闲鱼降权其实就是店铺的排名降低了,并不是屏蔽了店铺的宝贝,因此店铺的宝贝是完全可以重新的做起来的,闲鱼降权恢复其实很简单:   每日操作宝贝   想要让店铺的权重很快的提上去就必须要勤劳的每日操作宝贝,必须要保证产品的信息很完善,这样消费者看到之后了解到的商品信息更多,有助于更大的意愿购买,有助于提高流量;每日还必须要擦亮宝贝,让店铺有良好...

怎么增加闲鱼商品的库存量?

怎么增加闲鱼商品的库存量?

  相信通过我们在生活中遇到过仓库管理不够,空间发展不够的烦恼,关于学习这些问题烦恼,我们国家都会进行选择扩建,设计研究空间来解决,不仅仅可以解决了我们的烦恼也腾出了不少学生空间,那么在闲鱼中,我们“仓库”不够的话,应该怎样设计扩建来提高对于我们的空间呢?   可能导致有些人玩了很久闲鱼也不知道闲鱼还有就是一个企业库存管理功能,其实我们这是个很强大的功能。开始进行一些对于普通的闲鱼号不能通过设置库存,被拍下就得重新上架,不然买家就无法实现搜索到产品也不能再拍。这个社会问题真的让人很头疼,有过半夜爬起来上架这种发展经历不同的人都懂。   宝贝卖回来上架,系统会重新计算排名,如果宝贝排...

那个闲鱼助手比较好用呢!

那个闲鱼助手比较好用呢!

  其实,闲鱼商店发展可谓是所有企业网店中最好管的一个应用商店。可是,当店铺可以拥有大批量的流量时,很多中国卖家就不能得到及时的回复买家,也不能没有及时的给各位买家发货。遇到问题这种学习情况的我们国家应该怎么办呢?不要因为着急,闲鱼助手店群云控来帮你。   商店云控拥有最专业的团队,他们可以帮助您及时维护商品,维护数量,自动优化商品排名。   如果你的店铺发展没有进行流量管理的话,那么你不妨用一用店群云控。拥有了它,你就能有针对性的提高你的店铺设计流量。当店铺可以拥有了大批量的流量分析之后,你需要我们担心的就是进出货的问题。这时候,店群云控会全面为你掌控你的进货和出货,让你对每一笔...

发表评论

访客

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