详解小程序缓存插件(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 相关文章推荐
jquery插件jbox使用iframe关闭问题
Feb 09 Javascript
javascript 保存文件到本地实现方法
Nov 29 Javascript
javascript中节点的最近的相关节点访问方法
Mar 20 Javascript
JavaScript中使用Object.create()创建对象介绍
Dec 30 Javascript
基于JavaScript怎么实现让歌词滚动播放
Nov 03 Javascript
Node.js 文件夹目录结构创建实例代码
Jul 08 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
Aug 25 Javascript
完美的js图片轮换效果
Feb 05 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
Apr 05 Javascript
深究AngularJS中ng-drag、ng-drop的用法
Jun 12 Javascript
angular2 ng build部署后base文件路径问题详细解答
Jul 15 Javascript
详解vuex的简单使用
Mar 12 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
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
2010/03/21 PHP
php实现给图片加灰色半透明效果的方法
2014/10/20 PHP
PHP中使用匿名函数操作数据库的例子
2014/11/17 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
PHP中的traits实现代码复用使用实例
2015/05/13 PHP
PHP Cookie学习笔记
2016/08/23 PHP
Jquery 选中表格一列并对表格排序实现原理
2012/12/15 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
jQuery中is()方法用法实例
2015/01/06 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
2015/02/20 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
javascript基础语法学习笔记
2016/01/04 Javascript
AngularJS页面访问时出现页面闪烁问题的解决
2016/03/06 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
vue中本地静态图片路径写法
2018/03/06 Javascript
JavaScript代码实现txt文件的上传预览功能
2018/03/27 Javascript
js事件on动态绑定数据,绑定多个事件的方法
2018/09/15 Javascript
layui表格内放置图片,并点击放大的实例
2019/09/10 Javascript
vue 组件简介
2020/07/31 Javascript
[04:07]显微镜下的DOTA2第八期——英雄复活动作
2014/06/24 DOTA
深入理解Django中内置的用户认证
2017/10/06 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
基于Python中求和函数sum的用法详解
2018/06/28 Python
python调用百度语音REST API
2018/08/30 Python
Python3网络爬虫中的requests高级用法详解
2019/06/18 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
python语言线程标准库threading.local解读总结
2019/11/10 Python
python能否java成为主流语言吗
2020/06/22 Python
银行领导证婚词
2014/01/11 职场文书
教师档案管理制度
2014/01/23 职场文书
暑期研修感言
2014/02/17 职场文书
机关党总支领导班子整改方案
2014/09/20 职场文书
2014年小学语文工作总结
2014/12/20 职场文书
springboot实现string转json json里面带数组
2022/06/16 Java/Android