JavaScript .hashchange 性能。它会带来任何放缓吗?

Posted

技术标签:

【中文标题】JavaScript .hashchange 性能。它会带来任何放缓吗?【英文标题】:JavaScript .hashchange performance. Can it bring any slowdown? 【发布时间】:2011-04-02 08:58:02 【问题描述】:

jQuery hashchange event

对我来说,这似乎是目前最成熟的解决方案(如果我错了,请纠正我)。 我真的很喜欢这个用于处理浏览器哈希的插件。它在某些情况下大大简化了 js 代码。

我真的很想开始广泛使用它,但我有一个问题要问你。

根据来源,它使用循环并检查哈希锚是否每 50 毫秒更改一次。

性能怎么样?我可以过度使用 hashchange 吗?它会导致性能显着下降吗?如果是在哪些情况下?

【问题讨论】:

【参考方案1】:

每 50 毫秒检查一次简单的字符串属性与您可能正在运行的所有内容相比是极小的成本,我不会担心这里的性能。如果您经常更改哈希并且您的回调非常、非常昂贵,那么请处理(您的回调),但检查本身的成本非常、非常 .

另外请记住,50 毫秒检查仅适用于没有内置 window.onhashchange 的浏览器,对于那些它是本机事件的浏览器(这是最现代的浏览器)。

【讨论】:

【参考方案2】:

性能不是问题,所有现代浏览器现在都原生支持 onhashchange 事件,因此不需要间隔检查。

-- 更多信息--

jQuery History Plugin 对 older generation browsers 使用 200 毫秒的测试,它本身并没有实现 onhashchange 事件。如果没有本地实现该事件,您必须通过使用间隔更改来解决它的功能 - 据我所知,没有其他方法。幸运的是,所有主流浏览器的最新版本现在都原生支持 onhashchange 事件,因此不再需要此检查。

让我们来看看 200 毫秒间隔检查的作用。如果它们在 IE6 或 7 上,它将检查 iframe 的状态(因为在那些浏览器中,需要 iframe 来模拟后退和前进按钮 - 而对于其他浏览器,则不需要 iframe)。如果他们使用的是另一个不是 IE 的旧浏览器,那么它可以在检查中使用location.getHash()(没有前面解释的 iframe)。这两种类型的检查都被设计为非常快速和尽可能少,将必要的开销降到几乎没有。这完全取决于浏览器实际上愿意让您做什么,并尝试使用尽可能少的密集代码来完成它。

【讨论】:

以上是关于JavaScript .hashchange 性能。它会带来任何放缓吗?的主要内容,如果未能解决你的问题,请参考以下文章

通过 JavaScript 或 jQuery 停止在 hashchange 事件上加载图像

jQuery - hashchange 事件

DOMNodeInserted 或 hashchange

仅捕获不是由锚点点击引起的 hashchange 事件

Javascript/jQuery 仅在浏览器后退/前进按钮单击时检测哈希更改

jQuery不支持hashchange事件