详解小程序缓存插件(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 AJAX实现目录浏览与编辑的代码
Oct 21 Javascript
JavaScript遍历table表格中的某行某列并打印其值
Jul 08 Javascript
Bootstrap项目实战之首页内容介绍(全)
Apr 25 Javascript
Angular 输入框实现自定义验证功能
Feb 19 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
Mar 02 Javascript
详解Angular Reactive Form 表单验证
Jul 06 Javascript
select自定义小三角样式代码(实用总结)
Aug 18 Javascript
vue axios同步请求解决方案
Sep 29 Javascript
小程序组件之仿微信通讯录的实现代码
Sep 12 Javascript
JavaScript使用表单元素验证表单的示例代码
Aug 20 Javascript
element form 校验数组每一项实例代码
Oct 10 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
Aug 03 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
收集的DedeCMS一些使用经验
2007/03/17 PHP
下拉列表多级联动dropDownList示例代码
2013/06/27 PHP
解析php5配置使用pdo
2013/07/03 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
2011/12/29 Javascript
推荐 21 款优秀的高性能 Node.js 开发框架
2014/08/18 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
2016/09/12 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
Angularjs中使用轮播图指令swiper
2017/05/30 Javascript
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
[44:58]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第二场
2018/04/06 DOTA
Python中遇到的小问题及解决方法汇总
2017/01/11 Python
TensorFlow实现Batch Normalization
2018/03/08 Python
Pyspider中给爬虫伪造随机请求头的实例
2018/05/07 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
2019/08/23 Python
对python中assert、isinstance的用法详解
2019/11/27 Python
python读取Kafka实例
2019/12/23 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
python unichr函数知识点总结
2020/12/16 Python
潘多拉珠宝英国官方网上商店:PANDORA英国
2018/06/12 全球购物
The Kooples美国官方网站:为情侣提供的法国当代时尚品牌
2019/01/03 全球购物
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
南京迈特望C/C++面试题
2012/07/09 面试题
设计模式的基本要素是什么
2014/04/21 面试题
初中生学习的自我评价
2013/11/14 职场文书
毕业生见习报告总结
2014/11/08 职场文书
党校党性分析材料
2014/12/19 职场文书
担保书范本
2015/01/20 职场文书
2019通用版新员工入职培训方案!
2019/07/11 职场文书