详解小程序缓存插件(mrc)


Posted in Javascript onAugust 17, 2018

背景

wx.request是小程序提供的API,用于发起网络请求,在频繁并且响应较慢的业务中的请求,页面白屏或者loading时间也相应比较长,然而合理的利用缓存是个很好提升界面响应速度,减少网络资源占用的手段。

mrc提供2种换成模式用于业务中使用

短期缓存

对于实时性要求相对较低的业务场景而言,可以使用短期缓存

短期缓存能够将接口数据在一定时间内缓存起来,在时间范围内再次请求的话,可以直接使用缓存数据,减少白屏或者loading时间。设置不同的缓存时间来适应不同的业务,还可以有效的节约网络资源

快照缓存

类比搜索引擎的快照,针对请求响应较慢的并且实时性又比较高的场景而言,可以使用快照缓存。

快照缓存每次请求都会先返回上一次缓存数据作为结果返回,然后再去请求,等到请求返回之后再更新缓存,业务方可以对比2次返回结果进行局部渲染

使用

mrc以一种侵入式最小的方式封装了原生的resquest API,扩展原生API的功能,可以支持promise以及2种缓存方式。

//app.js

//引入request缓存插件
import Mrc from './dist/mrc.min';

//实例化一个全局引用
App({
 wxp: new Mrc({
  prefix: '___CACHE___',   //选填,存储字段前缀,默认___CACHE___
  timeout: 600000,    //选填,缓存多长时间,单位ms,默认10分钟
 }),
})
//page.js
const app = getApp()
let {wxp} = app
Page({
 data: {

 },
 onLoad: function () {
  wxp.request({
   url: 'http://xxxxxx',
   cache: {
    enable: true,    //选填,是否开启缓存,默认false
    type: 'snapshot',   //选填,开启缓存类型,定时(timeout)、快照(snapshot),默认定时
    timeout: 600000,    //选填,定时缓存时间,使用优先级,当前配置>全局配置>默认配置
   },
  })
   .then((res) => {
    //快照缓存时会多返回一个正式请求的promise对象,用于获取正式请求的数据
    return res.req;
   })
   .then((res) => {
    console.log(res);

   })
 },
})

特性

  1. 缓存类型为快照缓存时,缓存的数据为持久缓存,timeout设置无效
  2. 缓存类型为快照缓存时,第一个then回调会带上正式请求的promise对象,用于下个then回调获取正式请求的数据
  3. 不想使用缓存时(enable=false),一样可以用mrc实例化之后的对象正常请求,支持promise

对比

类型 是否持久化 是否每次都请求 实时性
快照缓存
短期缓存

配合骨架屏来使用效果更佳!!!

详解小程序缓存插件(mrc)

总结

缓存插件的使用可以有效的提升页面打开速度,并且在频繁的网络请求中可以有效的节约服务器资源。具体的调用方式和源码,请看 github ,最后求start

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
限制复选框的最大可选数
Jul 01 Javascript
jQuery编写widget的一些技巧分享
Oct 28 Javascript
同时使用n个window onload加载实例介绍
Apr 25 Javascript
Json和Jsonp理论实例代码详解
Nov 15 Javascript
jquery批量设置属性readonly和disabled的方法
Jan 24 Javascript
javascript实现带节日和农历的日历特效
Feb 01 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
Mar 04 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
Apr 07 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
Sep 01 Javascript
jQuery深拷贝Json对象简单示例
Jul 06 Javascript
详解Vue、element-ui、axios实现省市区三级联动
May 07 Javascript
微信小程序实现蒙版弹出窗功能
Sep 17 Javascript
layui 设置table 行的高度方法
Aug 17 #Javascript
微信小程序数据分析之自定义分析的实现
Aug 17 #Javascript
jQuery实现的页面弹幕效果【测试可用】
Aug 17 #jQuery
layui的table中显示图片方法
Aug 17 #Javascript
layerUI下的绑定事件实例代码
Aug 17 #Javascript
JS实现的视频弹幕效果示例
Aug 17 #Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
Aug 17 #Javascript
You might like
国内php原创论坛
2006/10/09 PHP
php中全局变量global的使用演示代码
2011/05/18 PHP
php whois查询API制作方法
2011/06/23 PHP
is_uploaded_file函数引发的不能上传文件问题
2013/10/29 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
php中static和const关键字用法分析
2016/12/07 PHP
详解阿里云视频直播PHP-SDK接入教程
2020/07/09 PHP
用YUI做了个标签浏览效果
2007/02/20 Javascript
javascript中直接写php代码的方法
2013/07/31 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
2014/02/22 Javascript
使用js判断当前时区TimeZone是否是夏令时
2014/02/23 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
在vue中获取dom元素内容的方法
2017/07/10 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
js实现日历
2020/11/07 Javascript
教你用Python写安卓游戏外挂
2018/01/11 Python
python re模块findall()函数实例解析
2018/01/19 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
2020/03/13 Python
简单了解django处理跨域请求最佳解决方案
2020/03/25 Python
python实现图像全景拼接
2020/03/27 Python
应届毕业生应聘自荐信范文
2014/02/26 职场文书
新年寄语大全
2014/04/12 职场文书
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
小学向国旗敬礼活动方案
2014/09/27 职场文书
2015公务员试用期工作总结
2014/12/12 职场文书
安全教育的主题班会
2015/08/13 职场文书
2016年社区创先争优活动总结
2016/04/05 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang