热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信小程序、微信公众号webview清除缓存、页面白屏、空白、不刷新问题

一、缓存带来的问题和原因我们在发布新版本的时候,在打开微信小程序嵌套的h5页面和微信公众号h5页面的时候,常常会发现页面还是上个版本的旧页面或者打开直接

 一、缓存带来的问题和原因

        我们在发布新版本的时候,在打开微信小程序嵌套的h5页面和微信公众号h5页面的时候,常常会发现页面还是上个版本的旧页面或者打开直接空白 白屏了,那么为什么会存在这个问题呢?

        原因是微信浏览器为了提高性能,自带缓存功能,缓存了html文件,比如页面 https://www.xxx.com/abc.html,虽然这个页面内部内容都全部替换了,但是页面路径还是同一个,还是https://www.xxx.com/abc.html,缓存就会生效,还是会请求到旧的资源;也因为有时手动清除了缓存,缓存资源不存在会造成空白的现象。

        这种可能第二天或过几个小时后就自动清除了,这个功能不能说好也不能说坏,但缓存问题确实对发布新版本造成很大的困扰,总不能让用户手动清除缓存吧,而且清除缓存后还不一定成功有效。

 二、怎么解决

        在这之前我们肯定已经做过了努力,比如服务器 cache-control 强缓存协商缓存,还有加时间戳等等,后面发现都没有用。所以我在改变 请求路径 例如https://www.xxx.com/abc.html 做尝试。

        同时我们也要知道hash路由和history路由的区别

hash 路由:监听 url 中 hash 的变化,然后渲染不同的内容,这种路由不向服务器发送请求,不需要服务端的支持;
history 路由:监听 url 中的路径变化,需要客户端和服务端共同的支持;

        vue项目默认采用的就是hash路由,带#号的路由,例如https://www.xxx.com/#/abc.vue,#后面无论改变什么内容都不会向服务器发送请求,也不会清除缓存。所以hash路由后面加版本号还是时间戳都不会有太大作用,例如https://www.xxx.com/#/abc.vue?version=1.0&t=Date.now()。采用history模式加版本号和时间戳应该是可行的,但需要nginx加一些处理。

三、具体做法

重点:既然#符号后面内容改变无效,那能不能在 #符号前面加版本号改变请求路径呢?

例如:原访问路径是  https://www.xxx.com/policy/#/abc.vue,policy是二级域名,前端项目放在hdwork-h5目录下。

在#前面加版本号就变成:https://www.xxx.com/123/policy/#/abc.vue,123是版本号的事例,这个可以自己定,是个数字就可以,这种做法简单,只需要nginx配置一下就可以了,其他流程还是原流程。以下是nginx项目的配置参考,具体以自己项目定

原理就是 当我们请求带版本号的请求路径https://www.xxx.com/123/policy/#/abc.vue时,会自动重写成 正常的访问路径https://www.xxx.com/policy/#/abc.vue,这样就达到了修改请求路径从而让微信浏览器以为这是一个新的路径,就不会有缓存的情况。

四、版本号怎么定

        版本号只要是一个数字就可以,因为nginx 正则就是 /d数字,需要其他正则自己配置。版本号的产生可以在每次前端发版的时候定义全局变量 version,也可以和后端约定,通过接口的形式获取版本号,每次发新版本,version都+1更新,版本号只要和上次就版本不一致就可以。建议还是通过接口形式获取版本号,这样比较好维护也好变更。拿到版本号后再路径上追加版本号。

https://www.xxx.com/{版本号}/policy/#/abc.vue

五、加版本号的一些问题

        有一些微信小程序需要分享二维码或者路径的,这种二维码都是比较固定的,分享出去的路径是什么就是什么了,不会有太大变化。所以对于分享出去的链接最好先把版本号去掉,等扫码进入或者链接进入时,请求接口再把版本号加上。


推荐阅读
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • 像跟踪分布式服务调用那样跟踪Go函数调用链 | Gopher Daily (2020.12.07) ʕ◔ϖ◔ʔ
    每日一谚:“Acacheisjustamemoryleakyouhaven’tmetyet.”—Mr.RogersGo技术专栏“改善Go语⾔编程质量的50个有效实践” ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
author-avatar
Graceedelweiss_602
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有