添加微信群,试用软件
复制微信号
2018年上半年,休闲鱼科技团队率先引入f lut t er技术,实现客户开发。到目前为止,它已经成功转型并推出了复杂的商品细节和出版业务。随着改造业务的增加,安装包的数量急剧增加。安装包的容量决定了用户等待下载的时间和可能消耗的流量。如何控制安装包的体积,减小f l u t e r产品的尺寸已成为一项紧迫的任务。本文从idle fish客户端项目实践的角度给出了一些通用的包大小检测和优化方案,希望能为对FL u t r感兴趣的团队提供参考。
idle fish客户端采用f l u t e r和n a t i v e的混合开发模式。接下来,我们以IO s端为例,分析项目中f l u t e r产品的规模(ip a包装瘦身需求更为迫切)。
典型的alppρ防护林f z-准布雷顿森林在下列条件下:
f l u t e r。f r a m e w o r k:f l u u t r库和引擎a p p f r a m e w o r k:d a r t业务源代码相关文件f l u t e r p l u g i n:f r a m e w o r k f l u t r各种已编译的p l u g i n s:f l u t r所依赖的静态资源,如字体、图片等
在首次引入f l u t e r的版本转换详细信息页面后,IP a包的大小增加了近2000万,包括f l u t e r引擎代码的转换业务代码。在f l u t e r转化后,i p a增加了4 m。在对ipa文件进行进一步分析和解压缩后,发现f l u t e r f a m e w o r k稳定在20 m,并添加了一个新的f l u t e r服务——在发布页面之后,p p p f r a m e w o r k增加了近10 m!
f l u t e r。f r a m e w o r k是f l u t e r库和引擎的代码。我们能做的优化空间是有限的。首先,将目标放在与d a r t业务f r a m w o r k相关的文件a p中。
执行以下命令以r e l e a s e模式f r a m w o r k编译ap,并使用参数打印产品的特定大小
结果如下:
表示aot编译后生成的二进制代码的大小
r e a d o n l y d a t a:表示元数据(例如p c d e s c r i p t o r、s t a c k m a p、c o d e s u r c m a p等)以及生成的二进制代码的字符串大小
vm is o l a t e/i s o l a t e:表示剩余对象的大小之和(例如代码中定义的常量和特定于虚拟机的元数据)
具体到业务层,如果我想分析每个业务模块占用的大小,我应该怎么做?
执行以下命令编译一个r m 64体系结构的ap f r m e w o r k,并将其包组合结构放入指定的目录b u i l d/a o,使用JSO n文件中的d a r t命令将上一步生成的a o t转换为具有可视结构的网页
r u n b i in a r y u i z e u n a l y s。DART是由DART提供的一种分析工具。f l u t e r engine源代码中的路径如下:
在build文件夹中打开i n d e x,h t m l可以分析特定服务占用的大小。右上角的“l a r g e s y m b o ls”和“l a r g e f i es”按钮可以直接定位体积比例从大到小的方法/文件。
例如,上述分析表明,该方法占用了大量的体积。研究发现,该方法的主要操作是将MAP数据转换为对象
由此可以推断,这种类型转换操作将导致编译并生成一些大型代码。
减少显示类型转换操作
根据上述分析,发现类型转换操作将导致p。f r a m e w o r k的体积显著增加,主要是因为它增加了类型检查和异常处理逻辑:
通过提取静态常用方法,可以成功地减少400K的体积。
通过编译参数和减少生成的代码量
指示生成的动态库文件中未使用堆栈跟踪符号
表示混乱。通过减少变量名/方法名来减少代码量
通过修改IO s打包脚本x c o d e_BA c k e n d。s h,删除d s y m符号表信息文件,p f r a m w o r k成功减少20%。DSYM是一个传输文件,存储十六进制函数的地址映射信息,包括我们调试的SYMBOL,用于分析c r a s h r e o r t文件并分析正确的错误函数信息。
使用x c r u n命令将d s y m与f r a m e w o r k分离可以大大减少f r a m e w o r k的体积。
减少因f l u t e r和n a t v e资源重复而导致的容量增加
使用桥接方法,FL u t e r直接使用PL a t f o r m端资源文件,以避免由于资源文件的重复而导致的数据包大小的增加。
主要的方式是通过b a s i c m s a g c h a e l在f l u t e r和p l a t f o r m的末端传输信息。前端将资源名称a s e t n a m e传递给后端。在接收到序列号后,PL a t f o r m端根据序列号查找资源文件,并通过b a s i c m s a g e h a e l将该文件以二进制数据格式传递回f l u t e r端。
f l u t e r的引入带来的安装包体积问题将给许多技术团队带来麻烦。通过上述措施,f l u t e r产品p p的f r a m e w o r k尺寸将减少30%。闲置鱼技术团队也会考虑下载和延迟加载,以减少资源的数量;继续在代码生成中进行各种比较,检查并避免大型产品的编写方法,与GO l e一起进一步寻找优化空间。
没有供应的闲置鱼类的做法是什么?如何做到这一点?游手好闲的鱼没有货源。闲置市场规模超过万亿。二手电子商务迎来了循环经济的红利。“校园圈”真的能成为游鱼生长的第二个引擎吗?如果闲置的鱼被恶意退回怎么办?开店时如何提高闲置鱼的暴露率?