React Native 0.31 Bundle 预加载优化

本文探讨了React Native应用启动时出现白屏的原因,并提供了一种解决方案:通过预加载技术来减少首次启动时的加载时间,提升用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍
使用 React Native 开发混合应用的过程中,我们在打完 bundle 进 release 包后,会发现第一次进入页面(React 的 Activity)会有一个短暂的白屏过程(在真机上近 **1秒**,在模拟器上比较快,在 **200毫秒** 左右),而且在完全退出后再进入,仍然会有这个白屏。

仔细查看加载过程(其实猜猜都能知道)后可以发现,这个过程就是在加载我们的 js bundle,通常即便是一个小的 RN 应用(混合应用中的子业务),也会动辄到 1MB 的大小,除非是完整的 RN 应用,可以把这个当做是启动速度,否则这样的加载速度都是对用户体验的很大伤害。

于是我们决定进行 Bundle 预加载的优化。

项目源码上传在:markzhai/react-native-preloader ( https://github.com/markzhai/react-native-preloader),稍后会上传到 maven,版本号会和 rn 保持一致。

耗时操作
ReactActivityonCreate 方法:
打点后可以发现耗时的其实是

- createRootView();
- startReactApplication();

这两个操作,所以考虑只需要提前创建 ReactRootView 进行 render,之后直接挂载该 view 上去即可。

预加载
创建预加载类 ReactPreLoader
在 init 操作中,我们通过 ReactInfo 缓存把 view 缓存在本地的 ArrayMap。

值得注意的是 onDestroy,在 ReactActivity 销毁后,我们需要把 view 从 parent 上卸载下来。
使用预加载的 view
使用预加载的 View,就需要侵入 activity 的创建过程,我们无法再使用 RN 库提供的 `ReactActivity`,只能建立自己的,以下列出修改的方法,其他方法照抄 ReactActivity:
使用
在进入该 RN activity 的上一个 activity 调用:
ReactPreLoader.init(this, ReactDemoActivity.reactInfo);
ReactCardActivity 继承我们自己的 ReactActivity:
优化后可以达到瞬间加载。
已知的坑
由于进行了预加载,目前已知的问题是 Modal 无法显示 —— 因为 Modal 在 Android 的实现使用了 Dialog,而该 View 将创建 ReactRootView 的 context 作为参数传给了 Dialog,而不是实际运行时所在的 Activity context。查看源码可以验证(com.facebook.react.views.modal)。

TimePickerAndroid 这类 picker 则没有问题。见 issue 9496( https://github.com/facebook/react-native/issues/9496)

作为规避方案,目前使用 MutableContextWrapper 进行 context 替换。见 GitHub 上的具体实现。

点击下方“阅读原文”查看更多
↓↓↓
内容概要:本文档详细介绍了基于Simscape的弹簧隔振系统建模与优化设计的大作业。作业背景在于机械工程领域的振动控制技术,尤其是弹簧隔振系统在汽车悬架和精密仪器隔振等方面的应用。文档的任务包括使用Simscape Multibody建立包含质量块、弹簧、阻尼器和基础激励源的物理模型,并添加传感器测量质量块的位移、速度和加速度。参数设定部分明确了质量块质量、弹簧刚度、阻尼系数、激励幅值和激励频率的初始值范围。动态分析涵盖了自由振动分析、简谐激励响应和传递率分析,具体包括计算固有频率、测量振动衰减周期、记录稳态响应振幅、绘制幅频特性曲线以及分析不同阻尼比对传递率的影响。最后,参数优化的目标是在5-15Hz频段内使传递率小于0.2,优化变量为弹簧刚度和阻尼系数,并使用合适的优化函数进行约束优化。 适合人群:机械工程专业学生或从事振动控制相关工作的技术人员。 使用场景及目标:①学习如何使用MATLAB/Simscape建立物理模型并进行仿真分析;②掌握振动系统的动态特性分析方法;③理解并应用参数优化方法提高隔振效果。 阅读建议:此文档不仅涉及理论分析,还包含详细的建模步骤和优化方法,因此在学习过程中应结合实际操作,按照文档提供的模型和脚本进行实践,同时参考文献资料加深对隔振器发展与作用的理解。
标题SpringBoot基于微信小程序的垃圾分类信息系统研究AI更换标题第1章引言介绍研究的背景、意义、国内外在垃圾分类信息系统方面的研究现状以及论文的研究方法和创新点。1.1研究背景与垃圾分类的重要性分析当前垃圾分类的现状和问题,以及微信小程序在垃圾分类中的潜在应用。1.2国内外研究现状及发展趋势概述国内外在垃圾分类信息系统方面的研究进展和未来发展趋势。1.3研究目的与创新点明确本研究的目的,并阐述论文在垃圾分类信息系统方面的创新之处。第2章相关理论基础介绍SpringBoot框架、微信小程序以及垃圾分类相关的理论基础。2.1SpringBoot框架概述简述SpringBoot框架的特点、优势及其在开发中的应用。2.2微信小程序技术阐述微信小程序的基本原理、开发流程和功能特点。2.3垃圾分类理论与技术介绍垃圾分类的基本概念、分类方法以及相关的技术手段。第3章系统设计与实现详细阐述基于SpringBoot和微信小程序的垃圾分类信息系统的设计方案和实现过程。3.1系统架构设计给出系统的整体架构,包括前端、后端和数据库的设计。3.2系统功能模块设计详细介绍系统的各个功能模块,如用户管理、垃圾分类识别、数据统计等。3.3系统实现与测试阐述系统的具体实现过程,包括开发环境、关键代码实现以及系统测试等。第4章系统应用与性能分析对实现的垃圾分类信息系统进行实际应用和性能分析。4.1系统应用案例介绍系统在实际场景中的应用情况,如小区、学校等场所的垃圾分类管理。4.2系统性能测试与分析对系统的性能进行测试和分析,包括响应时间、准确性等指标。第5章结论与展望总结论文的研究成果,指出研究的不足之处,并对未来的研究方向进行展望。5.1研究结论概括论文的主要研究结论和创新点,评价系统在垃圾分类中的应用效果。5.2研究展望分析当前研究的局限性,提出未来可能的研究方向和改进措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值