时间:2021-05-18
需求
提交小程序审核时,有一个体验测评,产品让我们根据小程序的体验测评报告去优化小程序。
其中有一项是网络请求的优化,给我们出了很大的难题。
文档中是这样解释的:3分钟以内同一个url请求不出现两次回包大于128KB且一模一样的内容
看到这个问题的时候,首先想到的是在响应头上加上cache-control,经过测试发现小程序并不支持网路请求缓存。搜索发现官方明确答复,小程序不支持网络请求缓存:wx.request不支持http缓存
既然官方不支持网络请求缓存,那只能自己想办法解决这个问题了。
先来看一下需求:3分钟内,同一请求只能请求一次。
分析
分析:
前两点比较好实现,虽然小程序不支持网络请求缓存,但我们还是可以利用cache-control来实现这个功能。
首先网络请求需不需要情缓存统一交给服务端去做,服务端在处理GET请求时,统一加上响应头cache-control,如果需要缓存就用max-age=180,如果不需要做网络请求就用no-cache。前端根据响应头信息自己做前端缓存。
其中的难点是前端如何知道服务端数据有没更新,如果服务端数据更新了,前端还是使用缓存这是有问题的。
经过一番思考后发现,前端提交数据后,相应的GET请求数据会更新,也就是说前端只要有数据提交,就应该把缓存清空。
这有一个难点,当前端提交数据时,前端是不知道哪些GET请求会因此更新数据,所以这个问题我们没有解决,我的方法比较粗暴:只要前端提交了数据,就将所有缓存清空。这是一个治标不治本的问题。
实现
公司项目封装了HTTP请求
拦截请求,如果是GET请求,检查缓存,
缓存网络请求
两个工具函数
设置网络请求
处理网络缓存
响应头全部变成小写,在小程序中,无法确定响应头的大小写会导致报错,所以统一处理响应头
总结
有一点没有说,就是这个缓存是保存在哪里的?
既没有用localStorage,也没有用globalapp,用的是类的静态属性。
这样做有3个好处:
我在使用时遇到一个坑,是因为自己没有理解:类能保存数据的,不能保存状态,但类的对象是既可以保存数据,也可以保存状态的。
最后,此方法还是有很大的优化空间。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
微信小程序网络请求GET微信小程序开发中网络请求必不可少,今天说说最简单的请求.后续会尝试上传下载,Socket这些.1.一个微信小程序,同时只能有5个网络请求
微信小程序网络API:微信小程序网络API发起请求微信小程序网络API上传、下载微信小程序网络APIWebsocketwx.uploadFile(OBJECT)
微信小程序之网络请求简单封装实例详解在微信小程序中实现网络请求相对于Android来说感觉简单很多,我们只需要使用其提供的API就可以解决网络请求问题。普通HT
微信小程序解决请求服务器手机预览请求不到数据的方法微信小程序的文档中明确说明了所有的请求是必须使用https的,以没用过https,由于小程序,不得不接触到ht
微信小程序清除缓存怎么实现?微信小程序怎么清除缓存?有一些用户表示微信小程序的缓存太多,想要清楚微信小程序缓存却不知道怎么去做,接下来小编为大家介绍微信小程