详解小程序缓存插件(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 相关文章推荐
第一个JavaScript入门基础 document.write输出
Feb 22 Javascript
js遍历td tr等html元素
Dec 13 Javascript
QQ空间顶部折页撕开效果示例代码
Jun 15 Javascript
javascript框架设计之类工厂
Jun 23 Javascript
js实现浏览器倒计时跳转页面效果
Aug 12 Javascript
JavaScript轻松创建级联函数的方法示例
Feb 10 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
May 12 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
Jul 17 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
Aug 13 Javascript
JS判断数组里是否有重复元素的方法小结
May 21 Javascript
Vue组件实现触底判断
Jun 26 Javascript
sharp.js安装过程中遇到的问题总结
Apr 02 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源代码
2009/08/21 PHP
探讨多键值cookie(php中cookie存取数组)的详解
2013/06/06 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
2018/10/12 PHP
javascript 当前日期转化为中文的实现代码
2010/05/13 Javascript
新鲜出炉的js tips提示效果
2011/04/03 Javascript
JavaScript中把数字转换为字符串的程序代码
2013/06/19 Javascript
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
函数式 JavaScript(一)简介
2014/07/07 Javascript
Javascript Memoizer浅析
2014/10/16 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
React-router v4 路由配置方法小结
2017/08/08 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
2019/10/08 jQuery
vue 组件内获取actions的response方式
2019/11/08 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
Django中处理出错页面的方法
2015/07/15 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
2018/03/14 Python
python读取和保存视频文件
2018/04/16 Python
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
Keras 实现加载预训练模型并冻结网络的层
2020/06/15 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
荷兰鞋类购物网站:Donelli
2019/05/24 全球购物
十佳少先队员演讲稿
2014/09/12 职场文书
财务整改报告范文
2014/11/05 职场文书
2015大学生求职信范文
2015/03/20 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
十八大观后感
2015/06/12 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python