multiprocessing.queue取数据要加锁么_干货 | 小程序多页面接口数据缓存
小程序里面多个页面,有时候会需要用到同一个接口的数据。而这些数据全局来说只需要拉取一遍,如果要存到缓存,要怎么保证其他页面取缓存的时候,数据已经拉取回来了呢?
答案是多页面接口数据缓存实现。
思路设计
其实这种场景和实现方式,与小程序关系并不大,很多常见的应用开发都会遇到。这次刚好在小程序里用到了,就顺便做下记录。
在这里,我们假设需要全局拉取一个用户信息。在涉及异步请求中,我们常用的方式是封装成一个Promise:
- 方法统一对外返回一个Promise。
- 加锁,在请求中不再请求,返回缓存的Promise。
- 若已有缓存,则返回一个马上resolve的Promise。
稍作优化
这种情况下,我们在一个生命周期中都会只请求一次,其他都只会在缓存中获取。我们还可以做些调整:
- 将数据写入本地缓存,小程序启用的时候获取。
- 提供强制拉取新数据的配置控制,这里用needRefresh参数控制。
- 使用上节《小程序的登录与静默续期》封装的request方法来发起请求。
我们来更新下代码:
Tips:前面也提到过,小程序的设计很大程度上考虑了管控力。
在这里,为了保证小程序不乱用任意域名的服务,wx.request请求的域名需要在小程序管理平台进行配置,如果小程序正式版使用wx.request请求未配置的域名,在控制台会有相应的报错。
参考
- 《小程序网络API》
- 《小程序开发指南》
结束语
前面我们也提到,小程序里面发起请求,都会经过 Native 发起。在应用开发实践中,对一些原理的掌握,很多时候能更多地提升我们解决问题的效率,也能对项目整体有更好的认知。
文章来源:腾讯工程师 王贝珊
multiprocessing.queue取数据要加锁么_干货 | 小程序多页面接口数据缓存相关推荐
- 前端wxml取后台js变量值_微信小程序云开发教程WXML入门数据绑定
同学们大家好,我是小伊同学,今天带领大家学习WXML部分一个重要的知识点,数据绑定. 简单来讲,数据绑定就是通过双重花括号将一个变量绑定到界面上. 首先,我们为什么要将变量绑定到页面上呢?因为在制作一 ...
- 微信小程序之获取接口数据展示
上篇说到获取编辑框文本,没看过去看看. 本片介绍简单的接口数据获取,并且展示,采取模拟数据,拉取数据方式方法.文章最后附上DEMO 本篇暂未考虑美化问题,只看功能.如图: 一.简单介绍 1> w ...
- 微信小程序页面栈_微信小程序之页面传值(路由、页面栈、globalData、缓存)
1. 通过url带参数传递 1.1 固定参数传递 例如,从 list 页面到 detail 页面, 传递一个或多个固定值 list页面传值: 点此进入 detail detail页面取值: onLoa ...
- 微信小程序页面栈_微信小程序使用页面栈改变上一页面的数据
微信小程序中如果从一个页面中进入下一个页面,如果下个页面的数据有删除或者增加再返回上一个页面的时候,就会导致页面不刷新(数据加载函数在onload中),从而造成数据不一致的情况.其实在微信小程序中是可 ...
- 小程序数据框有重影_微信小程序云开发数据库增删改查
1.添加数据 onLoad: function (options) { this.adddemo(); }, adddemo:function() { const db = wx.cloud.data ...
- 商户后台返回数据签名错误_微信小程序 用户信息开放数据校验与解密
服务端获取开放数据 小程序可以通过各种前端接口获取微信提供的开放数据.考虑到开发者服务端也需要获取这些开放数据,微信提供了两种获取方式: 方式一:开发者后台校验与解密开放数据 方式二:云调用直接获取开 ...
- 小程序数据框有重影_微信小程序input重影什么原因?怎么解决重影?
微信小程序input重影什么原因?怎么解决重影?微信小程序input输入框输入出现了重影的情况,这是什么原因呢?又该怎么去解决微信小程序input重影问题. 微信小程序input重影怎么办? 问题描述 ...
- 微信小程序怎么把获取的值传到引用组件内_微信小程序如何将接口获取的数据传递给自定义组件...
2019-07-11 回答 不知道你是什么意思.帮你改了下 class program { static int n = 4; int i, m; dsd[] a = new dsd[n]; publ ...
- 闲鱼有微信小程序吗_微信小程序商品展示页面(仿咸鱼)
项目中做了一个商品发布展示的页面,记录下来 解决问题: 想在setData中更改数组具体下标中的某个值 let one = "lowMoney[" + 0 + "].mo ...
最新文章
- Vue.js 技术揭秘学习 (1) new Vue 发生了什么
- BitMap的原理和实现
- html表单php比较三个值大小,PHP比较三个数大小实现办法
- 企业远程接入配置 不宜贪小失大
- CentOS安装ClickHouse
- python字符串(连载二)|字符串内置函数原来还可以这么玩!
- Laravel核心解读--Facades
- python + opencv: 解决不能读取视频的问题
- 怎么自动缩进_Python 的缩进是不是反人类的设计?
- mysql 优化器_mysql之优化器、执行计划、简单优化
- python求立方尾不变_蓝桥杯—立方尾不变,有些数字的立方的末尾正好是该数字本身...
- 05 ZooKeeper分布式RMI协调实战
- BZOJ4033 [HAOI2015]树上染色 【树形dp】
- fcntl函数的SET用法
- git里面的文件怎么删不掉_.git目录删不掉
- 如何在苹果手机上进行自动化测试!!!!!可以尝试配置一下
- 如何衡量开发人员生产力的 10 个技巧
- 数学中的圆周率符号怎么输入
- 优化UE4性能 、减少DrawCall——材质中使用自定义基元数据
- cad渐开线齿轮轮廓绘制_CAD画齿轮的方法
热门文章
- spring bean依赖_Spring @Configuration并将bean依赖项作为方法参数注入
- 纪事本 乱码_纪事地图和Yahoo Cloud服务基准
- ArrayList clone()– ArrayList深拷贝和浅拷贝
- c 遍历文件 递归遍历_将递归文件系统遍历转换为流
- JUnit 5和Selenium –改善项目配置
- Spring MVC绑定,无设置器
- 使用React Native和Spring Boot构建一个移动应用
- Apache Ant 1.9.13和1.10.5发布–支持Java 11单文件源程序
- 跟踪反应流–将Spring Cloud Sleuth与Boot 2结合使用
- jca使用_使用JCA的密码学–提供者中的服务