React Native UI Kitten的ApplicationProvider导致启动过慢该如何解决?
可行解决思路
- 提前合并主题配置,不要在JSX属性中实时执行对象合并。ApplicationProvider初始化阶段会全量遍历主题属性,运行时合并会额外增加初始化耗时,将合并操作提前到组件外部,仅执行一次即可。
- 按需配置图标包,禁止全量加载内置图标。UI Kitten默认会自动加载全量Eva图标映射表,仅这一项就会增加2-3秒的启动耗时。如果不需要用到内置图标可以传入空的图标配置,用到的话仅注册项目中实际使用的图标即可。
- 确认测试环境是否为Release包。Debug环境下的启动耗时包含大量开发工具附加逻辑(比如SourceMap解析、热更新校验),参考价值极低,必须打Release包测试实际用户侧的启动耗时。
- 升级UI Kitten到5.1.0以上稳定版本。4.x版本的ApplicationProvider存在明显的初始化性能缺陷,5.x版本重构了主题解析逻辑,官方实测启动速度提升70%以上。
- 调整Provider挂载时机。如果首屏不需要用到UI Kitten组件,不要将ApplicationProvider包在根组件最外层,可以等首屏渲染完成后再挂载包含Provider的业务路由栈,将Provider的初始化耗时从启动时间中剥离。
- 开启Hermes引擎。UI Kitten的主题配置是大体积JSON对象,Hermes对静态JSON的解析速度远高于传统JS引擎,开启后可明显降低主题解析耗时。
优化后代码示例
// 组件外部提前完成主题合并,仅执行一次 const customTheme = Object.assign({}, eva.light, theme); // 仅注册实际用到的图标,不要全量导入EvaIconsPack const customIconPack = { name: 'app-icons', icons: { // 按需添加用到的图标资源 back: require('./src/assets/icons/back.png'), home: require('./src/assets/icons/home.png'), } }; export default function App() { return ( <ApplicationProvider {...eva} theme={customTheme} iconProvider={customIconPack}> <Text>{'Test'}</Text> </ApplicationProvider> ); }
内容的提问来源于stack exchange,提问作者user1885498
相关产品推荐
相关产品推荐

