wxpage
wxpage copied to clipboard
实现预加载有问题***
当第一个页面调用preload的时候会提前加载第二个页面的数据?那如果当已经跳转到第二个页面时,预加载的数据还没有完全读取完毕,怎么办?是不是还得从头开始走一遍第二个页面的读取逻辑?有没有什么办法能让它读完呢?
一般预加载是使用提前生成Promise实例执行加载流程,只要在Promise的回调后就不需要关心异步逻辑是进行中 or 完成
一般预加载是使用提前生成Promise实例执行加载流程,只要在Promise的回调后就不需要关心异步逻辑是进行中 or 完成
稍微有点不明白,我需要在哪里执行Promise?第一个页面还是第二个页面?有相关的示例代码吗?
// 页面index
Page.P('index', {
clickToDetail() {
this.$preload('detail')
}
})
// 页面detail
Page.P('detail', {
onPreload() {
this.$put('detail_preload_fetch', this.fetch())
},
onLoad() {
;(this.$take('detail_preload_fetch')||this.fetch()).then(data=>{
console.log(data)
// do somthing
})
},
fetch() {
return fetch('xxx')
}
})
嗯嗯,终于明白了,谢谢大侠! 但是这样的话,其实还是存在一个问题,就是还是有可能this.$take('detail_preload_fetch')暂时还没有数据,那这样的话就执行的是this.fetch()的返回数据。如果是这样,那么本次跳转其实就没有达到预加载的效果,对吧?当然这个要看网络情况,如果网络良好,多半跳转还是能够在onLoad时拿到缓存数据的。不知道我理解的有问题吗?
中间利用的是小程序页面实例化的时间差,不管怎样,请求都是被提前发起了,必然会起到优化效果
中间利用的是小程序页面实例化的时间差,不管怎样,请求都是被提前发起了,必然会起到优化效果
这样理解也对,嗯。感谢。
文档不是讲$preload的数据不一定会被用到 这种预加载的数据一般会保存在storage内,因为用户不一定会马上访问页面,而把数据存在全局变量会增加小程序占用的内存。微信会毫不犹豫的把内存占用过大的小程序给杀掉 如果这样的话 put take 就不适用了吧
文档不是讲$preload的数据不一定会被用到 这种预加载的数据一般会保存在storage内,因为用户不一定会马上访问页面,而把数据存在全局变量会增加小程序占用的内存。微信会毫不犹豫的把内存占用过大的小程序给杀掉 如果这样的话 put take 就不适用了吧
这就需要你的判断了,我的页面大多是消息页用户需要停留一段时间,这个时间我就会把页面可以触及的链接给预加载了,而在当前页面的unload中我又注册了一个清除所有子页面预加载数据的逻辑。这样的话能有效减少页面的内存占用。