当前位置:C++技术网 > 资讯 > 记录一下微信开发的时候遇到的缓存问题

记录一下微信开发的时候遇到的缓存问题

更新时间:2017-10-15 00:07:36浏览次数:1+次

        微信进入公众号时,页面的功能不正常,但是在微信右上角点菜单刷新页面,功能又正常了。然后再次进入微信公众号,还是同样的问题。通过分析,锁定为微信缓存问题。对于这个问题,网上一些方案并不可行,所以我就自己研究了一个方法,终于彻底解决了这个问题。那叫一个爽呀。

        下面是解决问题的过程:

    1、 发现bug

     在微信端功能调试的时候,发现ios端扫码出现规律性的扫码失败,准确的说是根本无法调用扫码。刷新后可以正常扫码。安卓端没有这个情况,初步判断是缓存的问题。

2、验证bug
    缓存bug很好验证,开启jsdk的调试模式后。每次注册接口的时候都会弹出消息。在ios端表现是,第一次进入没有任何消息。刷新后就会有消息弹出。可以确认是缓存导致的问题了,能导致这现象的我也就想到缓存

3、解决bug
    知道是缓存问题了就看怎么解决了,首先的看看微信缓存了啥。我们写的应用是单页应用,所有页面的元素师通过js来渲染的,微信api注册接口也是js来完成的。首先想到js被缓存了。但是我们的js在每次发布的时候都会带上hash值。不太可能缓存很久之前的版本。不能扫码这个是开始的微信开发的时候才出现的。用微信开发工具调试后发现,js请求正常,但是没有index.html。这个文件的内容是

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="utf-8"> 
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" /> 
<title></title> 
<link rel="stylesheet" href="src/css/icon/iconfont.css"/> 
</head> 
<body> 
<div id="app"> 
</div> 
<script src="dist/build.js"></script> 
</body> 

    </html> 

    

    

    

    文件里只有一个js文件。这个文件也是我们项目的入口文件。微信直接缓存了入口文件,我只想说mmp。既然缓存了就让他缓存就好,加上
<meta http-equiv="pragma" content="no-cache"> 

    <meta http-equiv="cache-control" content="no-cache"> 

    

    上传,刷新。点击扫码无反应。wtf根本没有啥鸟用。准备上服务器改配置。但是也没查到nginx设置具体某个文件不缓存,只能放弃了。既然缓存了那就改入口吧。换一个入口文件的名字,配置公众号。但是反应太慢了。半天没反应。还是换个方法吧。既然微信会缓存首页。既然他要缓存的们的页面那就让他缓存吧。写个页面动态加载入口。首先的改变入口文件但是又能让我们的加载文件知道我们改成啥了。js在浏览器里不能读取文件,让后端加一个接口太麻烦。好像还是听蛋疼的。如果我们在index.html后面加个查询参数呢。微信会怎么做。然后我就写了个加载页面:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="utf-8"> 
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" /> 
<title></title> 
<link rel="stylesheet" href="src/css/icon/iconfont.css"/> 
</head> 
<body> 
</div> 
<script> 
window.local.href='./index.html?fackWeixin='+parseInt(new Date())
</script> 
</body> 

    </html> 

    

    每次加载后会加载index.html。在后面带个查询参数不会影响啥业务。用户也看不到。 
    上传测试。每次扫码都能成功。至此。我们这个bug算是被解决了

    顺便说一句,微信支付只有ios端才会有报错消息。