location.href和window.location.href之间的性能差异

Al.*_*Al. 1 javascript

我已经读过location.href比window.location.href快.但是内部的location.href被读作window.location.href对吗?那么它将如何提高显着性能呢?

T.J*_*der 8

我已经读过location.href比window.location.href快.

它可能无限快,但在现实生活中你没有注意到.原因如下:

这是发动机在(理论上)看到的情况location.href:

  • 查找location当前范围; 如果没有找到,则转到包含范围等,最终达到全局范围.
  • 在全局范围内,location被发现是全局对象的属性.
  • 然后它hreflocation对象上查找属性.

这是发动机在(理论上)看到的情况window.location.href:

  • 查找window当前范围; 如果没有找到,则转到包含范围等,最终达到全局范围.
  • 在全局范围内,window被发现是全局对象的属性; 它是全局对象用来引用自身的属性.
  • 然后它location在该对象上查找属性.
  • 然后它hreflocation对象上查找属性.

因此window.location.href需要多一次属性查找location.href- 除非JavaScript引擎可以应用任何优化.但是从引擎到引擎的JavaScript性能差异很大; 你的旅费可能会改变.FB55汇总的一个基准,表明上述理论得到了实验结果的证实; location.href确实更快.在那个特定的测试中.

无条件的基准截图

(蓝色= location.href,红色= window.location.href;更长的线=更快的性能.)

更重要的是:它真的重要吗?不是在现实世界中,不是.你必须要做数百万次这样才能产生任何人类可感知的差异.但这就解释了为什么你会看到人们这样说全局数据location(或任何其他全局,内置或由你自己的代码添加).