微信小程序系列之使用缓存在本地模拟服务器数据库
现在将data.js这个文件视作是本地数据库的初始化数据,要做的第一件事就是讲这些初始化数据装进缓存中,以形成数据库的初始化数据
整个应用程序的生命周期,类比一下页面的生命周期,在页面的js文件中,我们使用Page(object)来注册页面,并在object中指定页面的生命周期函数,同样可以在app.js中使用App(object)来注册小程序,并在object中指定小程序的生命周期函数
onLaunch 监听小程序的初始化,当小程序初始化完成时,会触发onLaunch(全局只触发一次)
onShow 监听小程序的显示,当小程序启动或者从后台进入前台时,会触发onShow的事件
onHide 监听小程序的隐藏,当小程序从前台进入到后台时
onError 监听小程序的错误,发生错误时会触发onError
当然,还可以自己任意添加函数到Objectc参数中,用this可以访问这些函数和数据
最好的初始化数据是在应用程序启动时
在app.js中植入数据
var dataObj=require("data/data.js")
App({
onLaunch:function(){//初始化
wx.setStorage({//缓存数据
key: 'postData',
data: 'dataObj.postList',//需要存储的内容
success:function(res){//缓存成功。调用
},
fail: function (res) {//缓存失败调用函数
},
complete: function (res) {//缓存完整,调用
},
})
}
})
在上面代码中,首先通过require加载data.js作为初始化数据,在应用程序中onLaunch使用wx.setStorage方法将数据存入到缓存中(key:"postData" data:"dataObj.postList")
只要用户不主动清除缓存,则缓存一直存在
缓存以key:value键值对的形式存在,很类似于服务器流行的memcache或者redis缓存型数据库
小程序提供了一系列API用来操作缓存,包括:存储,读取,移除,清除全部,和获取缓存信息
请注意清除和移除,删除某一个key的缓存,请使用wx.removeStrorage方法,删除所有的wx.clearStorage,不存在过期时间,如果想清除缓存,则需要主动调用清除缓存的API
所有的异步API都会有success,fail,complete
key用来设置缓存的键,data是用来缓存的数据
异步缓存:
var dataObj=require("data/data.js")
App({
onLaunch:function(){
// wx.setStorage({//异步缓存
// key: 'postData',
// data: 'dataObj.postList',
// success:function(res){
// },
// fail: function () {
// },
// complete: function () {
// },
// })
//同步缓存
wx.setStorageSync('postData', 'dataObj.postList')
}
})
同步缓存的方法wx.setStorageSync是在异步方法名中wx.setStorageSync后面加上Sync,其他的异步方法也是加上sync,,没有success,fail,complete方法,建议优先使用同步方法
小程序每一次启动就会执行一次require和一次setStorageSync,这是非常麻烦的,我们应当让数据库在不存在时候,才会缓存数据。要不然每一次数据修改就会被初始化数据覆盖
App({//数据初始化判断
onLaunch:function(){
// wx.setStorage({//异步缓存
// key: 'postData',
// data: 'dataObj.postList',
// success:function(res){
// },
// fail: function () {
// },
// complete: function () {
// },
// })
//同步缓存
优化缓存的初始化判断:
var storageData=wx.getStorageSync('postData');
if(!storageData){
var dataObj = require("data/data.js");
wx.setStorageSync('postData', 'dataObj.postList')
}
// wx.setStorageSync('postData', 'dataObj.postList')
}
})
wx.getStorageSync(key)这个方法可以首先获取指定的key的值缓存内容,如果没有则指定的key的缓存不存在,先清除所有的缓存,wx.clearStorage(),才开始初始化数据库,避免了每次都要初始化数据库
第一次写文章,不足之处多多指教
网友评论