codepush热更新包减小体积-图片资源优化

本文探讨了如何减少codepush更新包的体积,尤其是针对图片资源的优化。通过理解require引入图片的原理,创建RCTImageView分类进行hook,以及提供一种不修改原生代码的js hook方案,实现了在热更新时只上传bundle,图片资源利用本地已存在的副本,降低了用户下载流量和更新失败的风险。
摘要由CSDN通过智能技术生成

场景

codepush更新包需要上传bundle+assets,当需要上传资源包体积比较大的情况下,会消耗大量用户流量且有下载失败风险,如出现紧急情况热更新下发率低下会造成极大的影响;那么如何减少更新包体积呢?

改造方案

  • 如使用拆包方案,大部分情况下只上传业务bundle,体积大概在50k以下,拆包方案参考RN拆包解决方案(一) bundle拆分
  • assets资源优化,出现大量素材资源的情况下需要优化处理,本次着重讲解图片资源加载优化

codepush增量更新图片资源

codepush已经对图片资源进行增量优化,我们来看下它的实现流程:

  • 示例1:当前版本1.0.0(1.png、2.png)-应用程序沙盒,热更新后包1.1.0(1.png、2.png)-文档沙盒,codepush需全量下载1.1.0包中的图片
  • 示例2:当前版本热更新后为1.1.0(1.png、2.png)-文档沙盒,热更新后包1.2.0(1.png、2.png、3.png)-文档沙盒,如果前后版本(1.png、2.png)md5一致,codepush只会增量下载3.png,将1.1.0中的(1.png、2.png)图片拷贝到1.2.0所在文档沙盒目录中

由此可见,首次热更新仍然需要全量下载消耗大量用户流量,还有更好的方案吗?

assets加载优化

我们可以修改RN图片加载流程,通过文档沙盒目录和本地应用程序目录结合,在更新后,判断当前bundle所在文档沙盒路径下是否存在资源,如果存在直接加载;如果没有,就从本地应用程序沙盒路径中加载代替,如果能这样处理,在没有变更图片资源的情况下,codepush只需要上传bundle文件,资源图片不需要一块打包;若要想修改RN图片加载流程,首先需要了解require图片原理

require引入图片原理

require方式返回的是一个整型, 对应一个define函数, 在bundle中体现为

//引用的地方  require方式
_react2.default.createElement(_reactNative.Image, {
    source: require(305                                      ), __source: {
    // 305 = ./Images/diary_mood_icon_alcohol_32.png
            fileName: _jsxFileName,
            lineNumber: 30
          }
        }),
 // uri 方式
_react2.default.createElement(_reactNative.Image, {
    source: {
    uir: 'https://www.baidu.com/img/bd_logo1.png', width: 100, height: 100 }, __source: {
   
            fileName: _jsxFileName,
            lineNumber: 31
          }
        })
//define地方
__d(/* RN472/Images/diary_mood_icon_alcohol_32.png */function(global, require, module, exports) {
   module.exports=require(161                                         ).registerAsset({
   "__packager_asset":true,"httpServerLocation":"/assets/Images","width":16,"height":16,"scales":[2,3],"hash":"7824b2f2a263b0bb181ff482a88fb813","name":"diary_mood_icon_alcohol_32","type":"png"}); // 161 = react-native/Libraries/Image/AssetRegistry
}, 305, null</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值