如何在Weex中正确使用WXPrerenderManager实现页面预渲染?
如何正确使用WXPrerenderManager实现Weex页面预渲染?
嘿,我刚好对Weex的预渲染机制挺熟悉的,你在Playground里看到的只是获取预渲染实例的后半段逻辑,添加预渲染任务的部分确实没在Demo里展示出来——这部分一般是在App启动初期或者用户可能跳转页面之前提前配置的。下面我给你梳理完整的正确用法:
1. 先搞懂WXPrerenderManager的核心逻辑
WXPrerenderManager是Weex官方用来做页面预渲染的管理类,它会提前帮你创建好WXSDKInstance并完成页面渲染,等你需要展示页面时直接复用这个已经渲染好的实例,以此大幅提升页面打开速度。它和ConfigCenter的配合,主要是用来统一管理哪些页面需要预渲染、预渲染的参数这类配置。
2. 第一步:添加预渲染任务(两种方式可选)
要实现预渲染,首先得告诉WXPrerenderManager“我要预渲染哪个页面”,这里有两种常用方式:
方式一:通过ConfigCenter统一配置(推荐)
如果你的项目已经在用ConfigCenter管理Weex配置,用这种方式更规范。在App启动时(比如AppDelegate的didFinishLaunchingWithOptions里)添加预渲染任务:
// 先初始化ConfigCenter(如果还没初始化) [WXConfigCenter setup]; // 构造预渲染任务的配置字典 NSDictionary *prerenderTaskConfig = @{ @"url": @"https://your-high-frequency-page.js", // 要预渲染的Weex页面URL @"params": @{@"userId": @"12345"}, // 页面初始化需要的参数 @"timeout": @3000 // 预渲染超时时间(可选,单位毫秒) }; // 把任务添加到ConfigCenter [[WXConfigCenter defaultCenter] addPrerenderTask:prerenderTaskConfig forKey:@"high-frequency-page-task"];
方式二:直接调用WXPrerenderManager的API添加
如果不需要通过ConfigCenter管理,也可以直接给WXPrerenderManager加任务:
// 创建预渲染参数对象 WXPrerenderParam *param = [[WXPrerenderParam alloc] init]; param.url = @"https://your-high-frequency-page.js"; param.params = @{@"userId": @"12345"}; param.timeout = 3000; // 超时时间 // 添加预渲染任务 [WXPrerenderManager addPrerenderTaskWithParam:param key:@"high-frequency-page-task"];
3. 第二步:在需要展示页面时复用预渲染实例
这部分就是你在Playground里看到的逻辑了,当你要打开Weex页面时,先检查有没有已经预渲染好的实例,有的话直接拿来用:
NSString *targetPageUrl = @"https://your-high-frequency-page.js"; WXSDKInstance *weexInstance = [[WXSDKInstance alloc] init]; // 检查该URL对应的预渲染任务是否存在 if ([WXPrerenderManager isTaskExist:targetPageUrl]) { // 获取预渲染好的实例 weexInstance = [WXPrerenderManager instanceFromUrl:targetPageUrl]; // 注意:获取实例后,这个预渲染任务会被自动移除,不能重复复用同一个实例 } // 后续正常配置实例的属性 weexInstance.viewController = self; weexInstance.frame = self.view.bounds; // 这里的renderWithURL其实不会重新渲染,因为实例已经预渲染好了 [weexInstance renderWithURL:[NSURL URLWithString:targetPageUrl] options:@{} data:nil]; // 添加渲染好的视图到当前页面 [self.view addSubview:weexInstance.rootView];
4. 几个关键注意事项
- 预渲染时机要选对:一定要在用户可能跳转页面之前触发预渲染,比如App启动完成后、首页加载好后,预渲染用户大概率会点击的二级页面。如果等用户点击时才加任务,那预渲染就没意义了。
- 实例只能复用一次:每个预渲染任务对应的实例只能被取走一次,取走后任务就被移除了。如果需要多次打开同一个页面,要重新添加预渲染任务。
- 参数要一致:预渲染时传入的
params要和实际打开页面时的参数保持一致,不然可能出现页面数据展示异常的情况。 - 注意内存占用:预渲染会占用额外内存,别贪多,只给高频访问的页面做预渲染。如果某个预渲染任务没用上,记得调用
[WXPrerenderManager removePrerenderTaskForKey:@"your-task-key"]移除任务释放内存。
内容的提问来源于stack exchange,提问作者yiyang
相关产品推荐
相关产品推荐

