JavaScript .hashchange性能。 它会带来任何放缓吗?
jQuery hashchange事件
对我来说,它现在看起来是最成熟的解决方案(如果我错了,请纠正我)。 我非常喜欢这个用浏览器哈希操纵的插件。 在某些情况下,它简化了js代码。
我真的想开始广泛使用它,但我有一个问题要问你。
根据源,它使用循环并检查散列锚是否每50毫秒更改一次。
性能怎么样? 我可以过度使用hashchange吗? 它会导致性能显着下降吗? 如果是这样的话?
每50ms检查一个简单的字符串属性是一个无限小的成本,可能与你正在运行的其他所有东西相比,我不会在这里关注性能。 如果您经常更改散列并且您的回调非常非常昂贵,那么处理它(您回调),但检查本身是非常非常小的成本。
另外请记住,50ms检查仅适用于没有内置window.onhashchange
浏览器,因为它是本机事件(这是最现代的浏览器)。
性能不是问题,所有现代浏览器现在都支持本机onhashchange事件,因此不需要间隔检查。
– 更多信息 –
jQuery History Plugin对老一代浏览器使用200ms测试,这些浏览器本身不实现onhashchange
事件。 如果没有本地实现的事件,您必须通过使用间隔更改来解决它的function – 我根本不知道其他任何方式。 幸运的是,所有主流浏览器的最新版本现在本身都支持onhashchange事件,因此不再需要此检查。
让我们来看看200ms间隔检查的作用。 如果它们在IE6或7上,它将检查iframe的状态(在那些浏览器中,需要iframe来模拟后退和前进按钮 – 对于其他浏览器,不需要iframe)。 如果他们使用的是另一个不是IE的旧浏览器,那么它可以在支票中使用location.getHash()
(如前所述没有iframe)。 两种类型的检查都设计得极其快速且尽可能小,将必要的开销降低到几乎为零。 这完全取决于浏览器实际上愿意让您做什么,并尝试使用最不密集的代码来实现。