V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xi_lin
V2EX  ›  前端开发

求教下 bfcache 失效的问题

  •  
  •   xi_lin · 2018-05-24 11:52:17 +08:00 · 3245 次点击
    这是一个创建于 2376 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前我们的网站在微信里 bfcache 处于失效的状态,每次返回都变成完全刷新,用户体验比较差。

    查过不少资料,比较全的一个列表是这里

    另外,有issue说 vue 2.5 以后也会有影响。

    尝试过屏蔽 MessageChannel,仍旧无效。不知道是不是什么时候引入的第三方库导致的 bug。

    有没有大佬指导一下这种东西怎么调试比较好?

    我目前想到最笨的方法是从头开始建项目,一点点加东西来测试

    第 1 条附言  ·  2018-05-24 15:12:33 +08:00
    第 2 条附言  ·  2018-05-24 15:30:04 +08:00

    safari有个隐藏开头

    defaults write com.apple.Safari IncludeInternalDebugMenu 1
    

    开启后可以看到一个Show Back/Foward Cache Window,但是我开启后这个窗口中数据始终为空

    第 3 条附言  ·  2018-05-24 15:52:09 +08:00
    https://github.com/WebKit/webkit/blob/master/Source/WebCore/history/PageCache.cpp

    过一了遍 canCache 的条件,感觉我只剩 build 一个 debug 版本来看这条路了
    第 4 条附言  ·  2018-05-25 12:35:03 +08:00
    通过 WebKit 调试确定了:就是使用 MessageChannel 导致 bfcache 失效,会让页面中存在无法休眠的 activeDOMObject

    除了 vue 会使用以外,core-js 里的_task 也可能使用

    目前我们的解决方法是`window.MessageChannel = null`
    4 条回复    2019-04-12 12:33:10 +08:00
    hkongm
        1
    hkongm  
       2019-04-10 10:48:14 +08:00
    同样问题,试试这个暴力方法咋样。。。
    xi_lin
        2
    xi_lin  
    OP
       2019-04-10 15:39:57 +08:00
    @hkongm 还有问题的话你就得重复我的步骤源码编译一下调试了。
    最近发现一个新的坑,chrome 默认是不支持 bfcache 的,miui 的自带浏览器为了实行返回不刷新,似乎每一个跳转都是用新页打开的,只是旧页面用户不可见
    hkongm
        3
    hkongm  
       2019-04-11 17:59:29 +08:00
    今天的进度 vue-loader / vue-cli 的坑,团队小伙伴发现的
    页面干净的引用 vue.min.js 就没问题,cli build 后就完蛋
    xi_lin
        4
    xi_lin  
    OP
       2019-04-12 12:33:10 +08:00
    @hkongm 看我 append 的信息,不一定是 vue 用的,vue 会优先用 setImmediate,而 babel 的 polyfill 里 core-js 会给它补上。有可能是别的库用到
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1213 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:43 · PVG 01:43 · LAX 09:43 · JFK 12:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.