据我了解, History.js是HTML5 History/State APIs的 polyfill 。因此,在现代浏览器上,它应该简单地使用popstate来监听 URL 的变化。那么,为什么在最新的 Chrome 上我可以看到计时器每 250 毫秒触发一次?这似乎很浪费,每隔几秒钟就会触发一次垃圾收集器。
查看这个官方History.js 演示。
据我了解, History.js是HTML5 History/State APIs的 polyfill 。因此,在现代浏览器上,它应该简单地使用popstate来监听 URL 的变化。那么,为什么在最新的 Chrome 上我可以看到计时器每 250 毫秒触发一次?这似乎很浪费,每隔几秒钟就会触发一次垃圾收集器。
查看这个官方History.js 演示。
我不知道 History.js 代码,但通读它,我相信@apsillers 是正确的。
它被配置为队列项之间的间隔为 250 毫秒。该队列中的一些排队功能需要获取历史状态。这些项目通过将其称为忙来强制刷新暂停。
至于为什么在 HTML5 浏览器中发生这种情况,在我看来,History.JS 不只是切换开关,如果它是 HTML5,然后什么也不做。在他们的github 上,它声明了他们的目标之一是:
为所有 HTML5 浏览器提供交叉兼容的体验(它们都实现了 HTML5 History API 略有不同,导致不同的行为,有时甚至是错误 - History.js 修复了这个问题,确保整个 HTML5 浏览器的体验与预期的一样/相同/很棒)
如果 History.js 仍在做一些涉及排队的工作,我猜他们会使用忙超时。