解决微信浏览器缓存站点入口文件(IIS部署Vue项目)


Posted in Javascript onJune 17, 2019

最近开发的微信公众号项目中(项目采用Vue + Vux 构建,站点部署在IIS8.5上),遇到个非常奇葩的问题,发布站点内容后,通过微信打开网址发现是空白页面(后来验证是微信浏览器缓存了入口文件-index.html,顾之前版本的index页面找不到对应的js,因为我们每次发布会将之前的版本放至另外的备份目录),但关闭网页再次去打开又是正常的。最初开发内部测试时该问题没有引起关注,因为开发人员大部分都是android的手机,后来测试发现,某些android机型不是必现此问题,但是苹果(IOS)机型,每次都是必然发生。

百度千百回#

在客户反馈此问题后,如噩梦般的探索解决过程就此开始了。因为在开发机器上根本无法测试,每次都必须打包发布。并且,在问题发生后,团队内部最初讨论并不认为是缓存了站点的入口文件(某些android机型不会发生此现象),而是缓存了其他js文件,所以一开始的解决方向就是错误的,导致浪费了很多时间。

1. Vue项目打包发布时,文件加上版本号#

其实在用vue-cli 3.0脚手架构建的Vue项目,打包过程中输出的静态文件名已经做了hash处理, webpack.prod.conf.js 中配置如下:

output: {
  path: config.build.assetsRoot,
  filename: utils.assetsPath('js/[name].[chunkhash].js'),
  chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
 },

但我们还是尝试在此处加上时间戳,如:

'js/[id].[chunkhash]'+ new Date().getTime() +'.js'

结果是此方案没有生效,失败次数1。

2. 尝试将Vue-Router 的history模式改为hash模式#

这种思路,还是延续了前一种方案的错误思路,认为是浏览器缓存了某些js文件,由于js文件找不到报错,导致页面空白。想要通过路由的hash模式 + 文件的版本号,来解决此问题。因为我们的项目是采用的history模式(微信授权和站点部署在IIS某个子目录下的原因)。

后来验证这是完全的错误思路,失败次数2。

3. 路由跳转前拦截处理#

尝试此方案的时候,已经知晓产生该问题的原因,是由于微信浏览器缓存了入口文件(index.html),是想尝试在访问某个页面时,先执行跳转至加了版本号的index页面。具体实现思路:

router.beforeEach((to, from, next){
  // 实现某些跳转逻辑
}

因为最终的尝试失败了,这里就不再撰述逻辑,失败次数3。

4. 给微信公众号菜单链接加上特定版本号#

该方案只能是用于临时解决,内部做调测还可以,但如果用于正式生产环境,会非常麻烦,需要每次发布更新后,都去更改微信公众号的菜单链接。如下引用所示,在链接上加版本号:

http://yqwx.xx.com/index.html?vt=1234

因为这种方案,几乎不可能用于生产环境,失败次数4.

5. 尝试将站点部署到nginx上#

我们的项目是部署在IIS上的,但百度“微信浏览器缓存入口文件”问题,几乎所有文章中提到的网站都是部署在nginx上,有些解决此问题的方案,都是设置nginx,如以下几篇参考文中所例的设置:

location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|js)$ {
  root  /mnt/dat1/test/tes-app;
  #### kill cache
  add_header Last-Modified $date_gmt;
  add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
  if_modified_since off;
  expires off;
  etag off;
}

我们也尝试了安装nginx, 不过受项目其他因素影响,后来放弃了此方案,失败次数5。

蓦然回首,它在此处#

虽然以上几种解决方案的尝试,都以失败告终,但至少我们知晓了造成该问题的原因是由于微信浏览器缓存了站点入口文件(index.html),并尝试去从Web服务器(IIS)的配置去解决(因为在nginx上可以设置某些缓存,那么在IIS上应该也是可以的)。

最终的解决方案非常简单的,简单到我们都怀疑人生,哈哈。

在IIS中配置, 如下图所示:

解决微信浏览器缓存站点入口文件(IIS部署Vue项目)

解决微信浏览器缓存站点入口文件(IIS部署Vue项目)

解决该问题的过程是非常痛苦的,顾以此文记录,以示我们踩过的坑。

总结

以上所述是小编给大家介绍的解决微信浏览器缓存站点入口文件(IIS部署Vue项目),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
IE和Firefox在JavaScript应用中的兼容性探讨
Apr 01 Javascript
Mootools 1.2教程(2) DOM选择器
Sep 14 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
May 21 Javascript
JQuery异步加载无限下拉框级联功能实现示例
Feb 19 Javascript
javascript模拟map输出与去除重复项的方法
Feb 09 Javascript
Jquery跨浏览器文本复制插件Zero Clipboard的使用方法
Feb 28 Javascript
jQuery实现判断上传图片类型和大小的方法示例
Apr 11 jQuery
利用Vue实现一个markdown编辑器实例代码
May 19 Javascript
JavaScript直接调用函数与call调用的区别实例分析
May 22 Javascript
详解JS深拷贝与浅拷贝
Aug 04 Javascript
jQuery实现评论模块
Aug 19 jQuery
javascript实现计算器功能详解流程
Nov 01 Javascript
通过说明与示例了解js五种设计模式
Jun 17 #Javascript
简单了解vue.js数组的常用操作
Jun 17 #Javascript
送你43道JS面试题(收藏)
Jun 17 #Javascript
通过实例学习React中事件节流防抖
Jun 17 #Javascript
如何解决js函数防抖、节流出现的问题
Jun 17 #Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
Jun 17 #Javascript
通过js给网页加上水印背景实例
Jun 17 #Javascript
You might like
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
PHP分页函数代码(简单实用型)
2010/12/02 PHP
Symfony控制层深入详解
2016/03/17 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
JS 统计时间
2021/03/09 Javascript
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
2013/08/02 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
JQuery以JSON方式提交数据到服务端示例代码
2014/05/05 Javascript
js实现键盘Enter键提交表单的方法
2015/05/27 Javascript
CSS中position属性之fixed实现div居中
2015/12/14 Javascript
JavaScript+html5 canvas绘制缤纷多彩的三角形效果完整实例
2016/01/26 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
vue将后台数据时间戳转换成日期格式
2019/07/31 Javascript
jQuery实现日历效果
2020/09/11 jQuery
浅谈Vue使用Cascader级联选择器数据回显中的坑
2020/10/31 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
2015/03/31 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
python实现程序重启和系统重启方式
2020/04/16 Python
Python sorted对list和dict排序
2020/06/09 Python
美国最大的在线寄售和旧货店:Swap.com
2018/08/27 全球购物
小学生优秀评语大全
2014/04/22 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
2014幼儿园教师师德师风演讲稿
2014/09/10 职场文书
灵山大佛导游词
2015/02/04 职场文书
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers