是否可以更快地直接访问javascript数组?

Zan*_*oni 7 javascript arrays performance

我正在阅读一篇文章:为执行速度优化JavaScript

还有一节说:

使用此代码:

for (var i = 0; (p = document.getElementsByTagName("P")[i]); i++)
Run Code Online (Sandbox Code Playgroud)

代替:

nl = document.getElementsByTagName("P");

for (var i = 0; i < nl.length; i++)
{
    p = nl[i];
}
Run Code Online (Sandbox Code Playgroud)

出于性能原因.

根据文章,我总是使用"错误"的方式,但是,我错了还是文章错了?

Gar*_*hby 5

"我们应该忘记小的效率,比如大约97%的时间:过早的优化是所有邪恶的根源."

- 唐纳德克努特


我个人会用你的方式,因为它更易读,更容易维护.然后,我将使用YSlow等工具来分析代码并消除性能瓶颈.

  • 一般同意,但这里的处罚可能是非常有害的.仅对循环进行基准测试不会显示完整的故事.我认为这可能是一个小小的过早优化实际上有意义的情况.这两个代码都非常易读,现在已知(现在)更好.使用Java类比:StringBuffer追加或字符串连接?在做正确的事情之前我们不等待GC问题??? (2认同)

Zyp*_*rax 3

如果您从 C# 等语言来看,您会期望第二条语句更有效,但 C# 不是解释器语言。

正如指南所述:您的浏览器经过优化,可以从实时列表中检索正确的节点,并且比从您在变量中定义的“缓存”中检索它们要快得多。此外,您还必须确定每次迭代的长度,这也可能会导致一些性能损失。

解释器语言的反应与编译语言不同,它们以不同的方式进行优化。