详解小程序缓存插件(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 相关文章推荐
统一接口:为FireFox添加IE的方法和属性的js代码
Mar 25 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
Jan 13 Javascript
js onload处理html页面加载之后的事件
Oct 30 Javascript
JS实现网页背景颜色与select框中颜色同时变化的方法
Feb 27 Javascript
jQuery平滑旋转幻灯片特效代码分享
Sep 07 Javascript
兼容浏览器的js事件绑定函数(详解)
May 09 Javascript
JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位
Jun 21 Javascript
基于JavaScript实现无缝滚动效果
Jul 21 Javascript
vue2 router 动态传参,多个参数的实例
Nov 10 Javascript
微信端调取相册和摄像头功能,实现图片上传,并上传到服务器
May 16 Javascript
解决layer.msg 不居中 ifram中的问题
Sep 05 Javascript
axios如何取消重复无用的请求详解
Dec 15 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
索尼SONY ICF-7600A(W)电路分析
2021/03/01 无线电
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/03/02 无线电
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
JavaScript 学习笔记(九)call和apply方法
2010/01/11 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
js和jquery对dom节点的操作(创建/追加)
2013/04/21 Javascript
用js实现控件的隐藏及style.visibility的使用
2013/06/14 Javascript
js里取容器大小、定位、距离等属性搜集整理
2013/08/19 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
2014/03/05 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
JavaScript中的await/async的作用和用法
2016/10/31 Javascript
javascript 中模板方法单例的实现方法
2017/10/17 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
用最少的JS代码写出贪吃蛇游戏
2018/01/12 Javascript
php 解压zip压缩包内容到指定目录的实例
2018/01/23 Javascript
JavaScript设计模式之代理模式简单实例教程
2018/07/03 Javascript
vue2.0的虚拟DOM渲染思路分析
2018/08/09 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
2018/09/01 Javascript
浅谈js闭包理解
2019/04/01 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
2021/02/07 Vue.js
基于python的七种经典排序算法(推荐)
2016/12/08 Python
Python简单操作sqlite3的方法示例
2017/03/22 Python
Python中常见的异常总结
2018/02/20 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
十分钟利用Python制作属于你自己的个性logo
2018/05/07 Python
Python实现基于C/S架构的聊天室功能详解
2018/07/07 Python
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
自荐书封面下载
2013/11/29 职场文书
工商企业管理实习自我鉴定
2013/12/04 职场文书
挑战杯创业计划书的写作指南
2014/01/07 职场文书
2014年感恩节活动策划方案
2014/10/06 职场文书
初中生散播谣言检讨书
2014/11/17 职场文书
小学生差生评语
2014/12/29 职场文书
幼儿园家长心得体会
2016/01/21 职场文书