🚀 一、最核心:减少首屏 JS 执行时间
首屏慢,80%问题在这里
✅ 1. 拆包(Code Splitting)
把非首屏代码延迟加载:
const DetailPage = React.lazy(() => import('./DetailPage'));
RN中可以用:
React.lazy + Suspense- 或动态 import
👉 重点:
- 首页只保留“骨架 + 核心组件”
- 其他页面全部延迟加载
✅ 2. 精简 bundle 体积
检查打包体积:
npx react-native-bundle-visualizer
优化点:
- 删除没用的库
- lodash → 按需引入
- moment → dayjs(更小)
✅ 3. 开启 Hermes 引擎(强烈推荐)
这是 RN 官方优化 JS 执行的关键:
enableHermes: true
效果:
- 启动更快
- 内存更低
- JS解析更快
⚡ 二、减少首屏渲染压力
✅ 4. 首屏组件“瘦身”
避免一上来渲染太多:
❌ 错误:
- 大列表直接渲染
- 多个复杂组件同时加载
✅ 正确:
- 只渲染“第一屏可见内容”
- 下面的用懒加载
✅ 5. 使用虚拟列表(必须)
列表必须用:
FlatListSectionList
关键配置:
<FlatList
initialNumToRender={5}
maxToRenderPerBatch={5}
windowSize={3}
/>
👉 能明显减少首屏卡顿
✅ 6. Skeleton 骨架屏
不要等数据再渲染:
👉 先渲染占位 UI(骨架屏),提升“感知速度”
🌐 三、优化网络请求
✅ 7. 并发请求 + 提前请求
Promise.all([api1(), api2()])
👉 避免串行请求拖慢首屏
✅ 8. 数据缓存(很关键)
- AsyncStorage / MMKV
- 启动直接读缓存 → 再刷新
👉 首屏几乎“秒开”
🧠 四、避免 JS 线程阻塞
✅ 9. 延迟非关键任务
InteractionManager.runAfterInteractions(() => {
// 非首屏逻辑
});
👉 比如:
- 日志上报
- 埋点
- 次要接口
✅ 10. 避免同步重计算
❌ 错误:
- 大 JSON 解析
- 复杂计算在 render
✅ 解决:
- useMemo / useCallback
- 或放到后台线程(如 JSI / Native)
🖼️ 五、图片优化(很容易被忽略)
✅ 11. 图片优化
- 使用 WebP
- 控制尺寸(不要超大图)
- 使用缓存库:
👉 推荐:
react-native-fast-image
🧩 六、原生层优化(进阶)
✅ 12. 启动页优化(Native)
- 提前初始化 RN Bridge
- Android:预加载 JS Bundle
- iOS:减少阻塞主线程
✅ 13. 使用 TurboModules / Fabric(新架构)
如果你项目升级了 RN 新架构:
👉 优势:
- 渲染更快
- Bridge 更高效
📊 七、如何定位性能问题(你这种经验很适合做)
推荐工具:
- React DevTools Profiler
- Flipper(官方神器)
- Systrace / Perf Monitor
👉 重点看:
- JS FPS
- UI FPS
- 首屏耗时
🧾 总结(优先级排序)
最值得你先做的👇:
1️⃣ Hermes(立竿见影)
2️⃣ 拆包 + 减 bundle
3️⃣ FlatList + 限制首屏渲染
4️⃣ 数据缓存
5️⃣ InteractionManager 延迟任务