今天研究了一下预拉取数据,有些疑惑的地方。
- 在我的代码包(1M)中使用预加载,在代码包中发出 db.collection返回数据比预加载数据要快。预加载需要调用云函数去获取数据库数据,小程序端直接db反而更快。尤其在要预加载的数据多时(你又不想在一个云函数中多次访问不同数据库集合)那么你就需要在设置的云函数中,分别调用其他的云函数,获取相应的数据,再统一由预设的云函数返回。速度会更慢。这时候的问题就是,你在小程序中的 wx.getBackgroundFetchData会返回错误(data no found),就是说,小程序启动了,但是数据还没回来。只能通过递归等待(有隐患吧)
2 . 经测试,小程序销毁后,这个预加载的缓存数据不会销毁。而下次冷启动设置的预加载函数一样会被调用。如果网络延迟一下,那么就会导致,小程序启动后,获取的不是当次冷启动下的预加载数据,而是上一次预加载的数据。这就不对了。如果再像上面的情况那样,你永远获取的只能是上一次的预加载数据。
问题出在预加载数据的缓存,应该在小程序销毁时一起销毁。
上面测试是在工具上进行的。以上是个人心得,有不对的地方希望大佬指出。感觉现在的预加载不是很舒服。
遇到了同样的问题,调 getBackgroundFetchData 的时间比请求预拉取接口的时间还早,此时返回了上一次预拉取的数据
真机测过了,一样的问题,预数据拉取云函数,先拿本地缓存,再去调接口获取数据,这个顺序有问题。
导致的结果就是永远拿的上一次打开小程序时拉取的数据。