微信内置的浏览器缓存了入口文件( SPA),导致总能访问到上个版本网站,怎么办? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Mark24
V2EX    问与答

微信内置的浏览器缓存了入口文件( SPA),导致总能访问到上个版本网站,怎么办?

  •  
  •   Mark24 2017-10-19 22:01:47 +08:00 7372 次点击
    这是一个创建于 2914 天前的主题,其中的信息可能已经有所发展或是发生改变。
    虽然老生常谈了,看了好久,也没看到一个靠谱的方法。
    可是,难道不上线,不更新了么?显然不能。这么多网站都能正常访问,所以还是想再问一遍。

    我们的具体情况是,Vue 做了一个 SPA 的触屏页面系统,接入微信公众号,给业务员使用。
    第一个版本很好,没有问题。然后改进了很多,的第二版在测试服务器上没有问题。(测试服务和线上服务一样的配置,一台机器 Nginx 一样的配置,分仅仅是不同文件夹分开储存)

    上传到线上,我们还在公众号的按钮链接给首页加了 ?v=xxx 版本控制。初次能够正常的跳转,载入,但是把页面叉掉,重新进入,页面就是老的状态。由于线上代码已经被干掉,所以访问不正常。

    网上的策略,比如添加不缓存的 meta 头,js,css 已经用 webpack 使用 hash 命名方式,Nginx 配置 不采用缓存,公众号链接使用域名+版本号,更改服务器上 index.html 入口文件的名字,让 Nginx 重新指定。好了,能做的,我们都做了。

    现在依然有部分机器,还会在以往的上版本页面出现加载问题。

    我现在觉得只能是用户手机微信的本地缓存,但是无论是刷新,还是清缓存,取消关注公众账号再重新关注,还是退出登录微信再重新登陆,都是部分有效,貌似没有看到一个 100% 的方法。

    现在有两个想法:
    1.有没有一种方式,能够主动清理掉缓存。

    2.突然想到的,是不是内部所有的 url 都要加上 ?v=xxx 版本,那 SPA 的路由跳转。。。。
    突然想到内部授权的是 vue-router 的跳转。但是这样的话,其不是很烦么?

    ----

    感觉很烦躁,时间不是花在解决有价值的问题上。。。而是在这儿死磕微信。。
    我真心的觉得,每个 App 内置一个 Chrome 就好了,别搞这些没用的。业界毒瘤啊。
    微信的文档,客服,均没有找到有价值的信息。
    8 条回复    2018-04-04 18:18:09 +08:00
    isbase
        1
    isbase  
       2017-10-20 01:14:07 +08:00 via Android   1
    可以在 Nginx 里对 html 启用 etag 和发送 cache-control no-store
    phy25
        2
    phy25  
       2017-10-20 01:57:37 +08:00 via Android
    debugx5.qq.com 可清缓存。
    Mark24
        3
    Mark24  
    OP
       2017-10-20 08:28:16 +08:00
    @phy25 这个安卓和苹果并不能同时打开。而且也不指望用户能用这个。体验太差了。
    ctx331
        4
    ctx331  
       2017-10-20 09:11:52 +08:00 via Android
    我也遇到这个问题 改了 webpack 配置 ,js 的 chunkhash 不加在文件名后,而是加在 search 后了。至少先保证页面能正常访问,不会因为 js 文件名改变导致找不到 js 文件而出错。

    其实用户点右上角三个点,再点刷新,多刷几次也就好了,可惜不是根本的解决办法。

    最后这个问题似乎只出现在部分微信版本中,,只有个别用户遇到。
    node
        5
    node  
       2017-10-20 09:18:04 +08:00   1
    你在公众号的按钮里给链接加上?v=xxx,这个 xxx 是固定的吗?我是做成一个 302 跳转链接,每次跳转到一个随机数的 xxx,用到现在貌似没有再被缓存过,这个动态跳转可以用 js 实现,也可以直接在 nginx 或者 openresty 里用 lua 写一下
        6
    Mark24  
    OP
       2017-12-15 16:59:50 +08:00
    也不需要去除服务器缓存之类的。
    归根结底是微信缓存了页面。
    -----
    每个页面,跳转的时候,加上 ?v=xx 的时间戳有效
    但是微信也对,诸如 v,t 常用名字,做了一些缓存策略,要起个特别的名字 比如 ?vt=<timestamp>

    如果是单页面,很方便,只要入口跳转的时候,加

    如果是多页面,麻烦点,进入每个页面都要加

    总之,让你下次的页面,看起来和上次的 url 不一样就对了
    亲测,有效。已经上线。

    时间太久,都忘了终结这个帖子。
    Mark24
        7
    Mark24  
    OP
       2017-12-15 17:00:13 +08:00
    @node #5 感谢,感谢币已发
    luojiyin87
        8
    luojiyin87  
       2018-04-04 18:18:09 +08:00   2
    如果是用 Nginx 控制缓存 可以加上
    expires -1;
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2180 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 00:50 PVG 08:50 LAX 17:50 JFK 20:50
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86