ReactNativeSeperateBundle icon indicating copy to clipboard operation
ReactNativeSeperateBundle copied to clipboard

怎么生成业务bundel 和common.bundle 文件的patch

Open yellowChao opened this issue 8 years ago • 12 comments

怎么生成业务bundel 和common.bundle 文件的patch

yellowChao avatar Apr 13 '17 09:04 yellowChao

@yellowChao

使用的是diff_and_patch算法。

我采用的是该算法的python版本,安装了之后,使用我更新的脚本 就可以直接打包了

当然,diff算法有很多种,你可以采用其他的。只要你的diff算法和native中的合并算法是同一套就没问题。

njafei avatar Apr 17 '17 03:04 njafei

哦,那你这个应该是个脚步,在app每次build前执行吧。还有这个只是解决了初始化包的大小是吧,麻烦问下你对优化加载jsbundle有什么解决方案吗☺️

yellowChao avatar Apr 17 '17 03:04 yellowChao

@yellowChao 这个脚本,是在发布前执行的,我的构想是,用起来像cocoapod一样,几个项目同时开发的话,最好只使用其他组的release包。

这方案并不是为了解决初始化包的问题,而是为了解决多小组、多项目协作的效率低问题,另外可以为了以后做web bundle做一个准备。

优化加载jsbundle的话,没什么好的办法,主要是两条:

  • 预加载,在app启动后,后台提前加载
  • 缓存jsbundle,而不是每次都去读取

另外这个方案,理论上会优化加载的jsbundle的时候,但是效果有限。

njafei avatar Apr 17 '17 03:04 njafei

@njafei 你好,能不能具体讲解下生成业务bundel 和common.bundle 文件的patch

otawa811 avatar Jun 28 '17 05:06 otawa811

@otawa811 请参考我给出的脚本打包脚本

和demo一起,就可以看到是怎么打包的了

简单讲,就是先打出common包,然后打出各个业务的包,做一个diff算法的工作

njafei avatar Jun 29 '17 07:06 njafei

@njafei demo里通过原生界面加载不同的包,这个是native+rn吗,有没有纯rn的加载方式

otawa811 avatar Jun 29 '17 08:06 otawa811

@otawa811

纯rn? rn本来就是要通过RCTView来承载的,你说的纯RN是什么意思?RN没法脱离iOS或者Android平台的

njafei avatar Jun 30 '17 05:06 njafei

python seprateBundle.py ./bundle/common.android.jsbundle ./bundle/business.android.jsbundle 生成出来的 business.patch 怎么比 business.bundle 还大呢 common.android.jsbundle 520k business.android.jsbundle 900k business.patch 1.6M

52myu avatar Jun 30 '17 10:06 52myu

@52myu

因为这个除了两者的代码差之外,还有用于记录的标志位,所以会大一些

njafei avatar Jul 10 '17 02:07 njafei

2017-09-13 11 49 03 2017-09-13 11 49 20 2017-09-13 11 49 39

我生成的文件大小是没问题的

520K + 4K = 524K

poorbug avatar Sep 13 '17 03:09 poorbug

@poorbug 包确实会大一些,但是拆包的原因很多,让包变小并不是一个优先级非常高的需求,诸如:热更新、代码运行隔离的优先级会更高些。其他的拆包方案,也基本会让包变大,而不是变小,空间时间不可能同时变小。

当然,不同的公司,不同的情况需求肯定是不一样的,这里只提供一种可能性。

njafei avatar Sep 13 '17 06:09 njafei

File "seperateBundle.py", line 4, in import diff_match_patch as dmp_module ImportError: No module named diff_match_patch

执行脚本时报这个错,diff_match_patch要怎么使用呢?

不好意思,自己已经解决了,对这个不太熟悉。 把diff_match_patch.py文件导入项目中就好了

JohnDn avatar Dec 13 '17 06:12 JohnDn