评论

Webview、Skyline 混用切换耗时吗?

把混用速度提升到最快~

在学习 Skyline 的过程中,许多开发者会有一个疑问:是否可以将小程序的部分页面迁移到 Skyline?

对 Skyline 感兴趣但还没有完全决定是否要使用的开发者来说,可能只想先尝试一下 Skyline 的功能。

实际上,Skyline 支持最小粒度的页面配置,意味着我们可以为某个页面单独开启 Skyline,而不必将整个小程序迁移到 Skyline 上。

开发者可以更加灵活地使用 Skyline,并逐步将小程序迁移到 Skyline 上,从而获得更好的性能和用户体验。


我们知道 Webview 和 Skyline 是两个渲染引擎,对于 Webview 和 Skyline 混用,大家又有新的疑问:当进行页面切换的时,混用是否会增加耗时?


这里需要分三种情况:

1、Skyline -> Webview:这种情况取决于 app.json 里配置的全局 renderer,即小程序设置的默认渲染引擎

  • 如果全局 renderer 是 Skyline,那么 Webview 不会被预加载,此时 Skyline 跳转 Webview 耗时会增加,开发者需要手动调用 wx.preloadWebview 做预加载
  • 如果全局 renderer 是 Webview,由于 Webview 默认会预加载,所以 Skyline -> Webview 和 Webview -> Webview 耗时一样,不会增加耗时。

2、Webview -> Skyline:Skyline 默认都不会被预加载,开发者需要手动调用 wx.preloadSkylineView 做预加载

3、Skyline -> Skyline:速度变快,因为多个页面复用同一个 Skyline 实例。

 

根据上述三种情况的分析,为了保证混用渲染引擎的页面切换耗时最短,我们需要在以下时机进行预加载。

wx.preloadWebview

当 Skyline 页面跳转到 Webview 页面时并且全局 renderer 是 Skyline

由于 Skyline 不影响渲染线程,所以预加载 Webview 的时机只需要在主要逻辑完成后即可

// Skyline page.js
Page({
	onShow() {
      // 等待执行完主要逻辑后进行预加载
      wx.preloadWebview()
    }
})


wx.preloadSkylineView

当 Webview 页面跳转 Skyline 页面时,因为 Skyline 默认不预加载,所以我们需要手动预加载。

建议大家在 Skyline 页面的 onShow 生命周期里延迟一段时间后调用,这样可以保证在 Skyline 页面被返回时也能够重新预加载。

注意:预加载会影响当前页面的渲染,建议异步延迟去执行预加载操作

// Webview page.js
Page({
	onShow() {
      // 延迟 200ms 预加载 Skyline
      // 建议这个延迟时机在页面渲染完成之后
      setTimeout(() => {
        wx.preloadSkylineView()
      }, 200)
    }
})


做好预加载是提高 Webview 和 Skyline 混用体验的有效方式,需要根据实际情况进行调整和优化,以达到最佳的预加载效果。

最后一次编辑于  03-07  
点赞 3
收藏
评论

1 个评论

  • 林俊宇
    林俊宇
    03-07

    挺好的

    03-07
    赞同
    回复
登录 后发表内容