相关疑难解决方法(0)

为什么使用window.variable访问变量更慢?

JS性能提示的多个来源鼓励开发人员减少"范围链查找".例如,当您访问全局变量时,IIFE被吹捧为具有"减少范围链查找" 的额外好处.这听起来很合乎逻辑,甚至可能被视为理所当然,所以我没有质疑智慧.像许多其他人一样,我一直很高兴地使用IIFE认为除了避免全局命名空间污染之外,还会比任何全球代码都提升性能.

我们今天的期望:

(function($, window, undefined) {
    // apparently, variable access here is faster than outside the IIFE
})(jQuery, window);
Run Code Online (Sandbox Code Playgroud)

人们会期望:将这简化/扩展到一般情况:

var x = 0;
(function(window) {
    // accessing window.x here should be faster
})(window);
Run Code Online (Sandbox Code Playgroud)

根据我对JS的理解,全球范围内x = 1;和之间没有区别window.x = 1;.因此,期望它们具有同等性能是合乎逻辑的,对吧?错误.我进行了一些测试,发现访问时间存在显着差异.

好吧,也许如果我将window.x = 1;内部放置在IIFE中,它应该运行得更快(即使只是略微),对吧?又错了.

好吧,也许是Firefox; 让我们试试Chrome吧(V8是JS速度的基准,是吗?)它应该击败Firefox以获取直接访问全局变量等简单的东西,对吧?又错了.

因此,我开始在两个浏览器的每一个中确切地找出哪种访问方法最快.所以我们假设我们从一行代码开始:var x = 0;.在x声明(并愉快地附加window)之后,这些访问方法中哪一个会最快,为什么?

  1. 直接在全球范围内

    x = x + 1;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 直接在全球范围内,但前缀为 window

    window.x = window.x + …
    Run Code Online (Sandbox Code Playgroud)

javascript performance firefox google-chrome

36
推荐指数
4
解决办法
2433
查看次数

在(桌面)浏览器中引用内置全局属性X时,是否应该写一个window.X?

因此,(桌面)浏览器中有许多内置的全局属性.例如:

  • document
  • undefined
  • parseInt
  • JSON
  • location
  • alert
  • setTimout
  • 等等

在引用这些属性时,是否应该通过在其名称前加上明确地将它们标记为全局属性window.?所以,例如:

var wrap = window.document.getElementById('wrap');
Run Code Online (Sandbox Code Playgroud)

window.setTimeout(loop, 100);
Run Code Online (Sandbox Code Playgroud)

var x = window.parseInt(input.value, 10);
Run Code Online (Sandbox Code Playgroud)

我认为这个问题有三个答案:

  1. 是的,window.X在引用全局属性时应始终写.

  2. 不,你不必写window.X.只要X是好的.

  3. 这取决于财产.对于某些属性,请使用window.X,对于某些其他属性使用X.(如果这是你的答案,请详细说明.)

那么,这是什么?

javascript browser window global-variables

8
推荐指数
2
解决办法
1035
查看次数