我已经读过location.href比window.location.href快。但是内部的location.href被读作window.location.href对吗?那么它将如何提高显着性能?
答案 0 :(得分:8)
我已经读过location.href比window.location.href快。
它可能 infinitessimally 更快,但在现实生活中你没有注意到。原因如下:
这是引擎在看到location.href
时所做的事情(理论上):
location
;如果没有找到,则进入包含范围等,最终达到全球范围。location
被视为全局对象的属性。href
对象上查找location
属性。这是引擎在看到window.location.href
时所做的事情(理论上):
window
;如果没有找到,则进入包含范围等,最终达到全球范围。window
被视为全局对象的属性;它是全局对象用来引用本身的属性。location
属性。href
对象上查找location
属性。因此window.location.href
需要比location.href
更多的属性查找 - 除非JavaScript引擎可以应用任何优化。但是从引擎到引擎,JavaScript性能是令人难以置信的变量;你的旅费可能会改变。 Here's a benchmark FB55 put together {{3}}表明上述理论得到了实验结果的证实; location.href
确实更快。在那个特定的测试中。
(蓝色= location.href
,红色= window.location.href
;较长的行=表现更快。)
更重要的是:真的重要吗?不是在现实世界中,不是。你必须做数百万次才能产生任何人类可感知的差异。但这就解释了为什么你会看到人们这样说像location
(或任何其他全局,内置或由你自己的代码添加的)全局变量。
答案 1 :(得分:1)
不推荐使用document.location而支持window.location,它只能通过location访问,因为它是一个全局对象。
location对象有多个属性和方法。如果您尝试将其用作字符串,那么它就像location.href一样。为了安全起见,最好始终使用location.href
答案 2 :(得分:1)
对此的一些想法:
window
是全局对象,因此可以访问分配给它的所有属性而无需引用它。在这两种情况下,需要在每个周围的范围内搜索变量(读取:甚至需要搜索窗口对象)。无论如何,我创建了一个simple benchmark。显然,直接访问速度更快(至少在Chrome中)。
答案 3 :(得分:0)
初看起来他们做同样的事情,他们可能会有不同的行为,以防你使用框架。
在这种情况下,他们可以返回不同的值,根据你的框架嵌套复杂性可能会有一些性能差异,但忽略框架内容,他们可以在同一时间做同样的事情。
请说明您在哪里阅读此内容。
HTH