【问题标题】:Javascript performance consideration. Is dot operator faster than subscript notation?Javascript 性能考虑。点运算符比下标符号快吗?
【发布时间】:2011-09-03 08:13:40
【问题描述】:

点运算符比下标符号快吗?

var obj = {x: '5'};
obj.x = 'some value';
obj['x'] = 'some value';

【问题讨论】:

  • 将此代码与其他代码放在上下文中会有所帮助,然后根据与其他代码的比例来考虑惩罚。如果某些功能确实被认为异常缓慢,它通常会从语言中删除(例如 with 已被弃用)

标签: javascript performance


【解决方案1】:

没有什么令人难以置信的担心。不过,windoweval 访问变量的速度要慢得多。

http://jsperf.com/dot-vs-square-bracket/5

【讨论】:

  • 你忘了写变量访问慢了 10 倍! (obj[x] = ...) 这可能是因为如果字符串是常量,JIT 编译器可以预先搜索字符串,因此它与点表示法“等效”,但如果字符串在变量中,JIT 可以t 优化它并且必须在运行时进行。
【解决方案2】:

这可能是过时的信息,但它是至少影响旧 Safari 版本的声明。 来自 O'Reilly 的Writing Efficient JavaScript

对于大多数浏览器,使用 dot 几乎没有区别 对象属性访问 (data.count) 的表示法和括号表示法 (数据[“计数”])。一个例外是 Safari,其中括号表示法 比点符号慢得多。即使对于 Safari 4 及更高版本使用 Nitro JavaScript 引擎。

看起来http://jsperf.com/ 已被删除——上面写着Website Disabled,但是使用来自Qt4 的嵌入式WebKit 引擎,使用这个测试,看起来这个陈述是正确的:

var t = new Date().getTime();
var x = { c: 123 };

for (var i = 0; i < 5000000; i++)
    x['c'] += 2;

document.write(( new Date().getTime() - t ) + '; value ' + x.c);

var t = new Date().getTime();
var x = { c: 123 };

for (var i = 0; i < 5000000; i++)
    x.c += 2;

document.write(( new Date().getTime() - t ) + '; value ' + x.c);

使用 x['c'] 大约需要 4 秒,而 x.c 运行大约 3 秒。 当前的 Firefox 和 Chrome 似乎对两者没有区别。

【讨论】:

  • 真的!在迭代庞大的数据集时,差异非常显着。
猜你喜欢
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 2010-11-05
  • 2012-09-04
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
相关资源
最近更新 更多