我应该相信现代浏览器会为我优化代码吗?

Should I trust modern browsers to optimize code for me?

本文关键字:优化 代码 相信 浏览器 我应该      更新时间:2023-09-26

有没有JS编译器不优化这个循环?

for (var i = fromIndex; i < arr.length; i++) {  ...}

在对谷歌关闭的批评中,据说更好的循环将是

for (var i = fromIndex, ii = arr.length; i < ii; i++) {  

在我所知道的所有其他语言中,我相信编译器会为我做这些事情。我怀疑谷歌浏览器和现代浏览器会进行这些类型的优化......我错了吗?

该文章中还有更多示例,例如长开关案例,其性能可能很差。现在Chrome和FF 4.0仍然如此吗(我也听说过IE 9的好消息)?

上面的例子不一样。 如果你做前者,那么arr.length将在每次循环迭代中被检查,并且本质上会表现得更差。 这样做的原因是假设您有以下循环:

for (var i = 0; i < arr.length; i++) {
    arr.splice(i,1);
}

在这种情况下,无法缓存arr.length,因为它的大小会在每次循环迭代中减小。 但是,在大多数情况下,数组在整个循环中将保持相同的长度,因此您应该像后一个示例中一样缓存长度,以防止额外的链查找。

大多数浏览器应该针对此类内容进行优化,但不能保证。无论如何,你真的不应该担心这种级别的优化,除非你做了很多循环。

No.它是解释器而不是编译器。

JavaScript 是动态的,你不能像使用静态语言那样进行那么多的优化。

事实上,你在 JavaScript 中拥有类型自由并且拥有 eval 意味着普通 (C++) 编译器对类似过程代码进行的大多数优化是不安全的。

此外,解释器的目的是尽可能快地解释您的代码并尽可能快地运行它。

编译器的目的是使代码尽可能快。

另外,Chrome,FF4(5)和IE9(10)速度很快。您不需要像这样进行微优化。虽然如果你确实有瓶颈,你仍然需要手动优化简单的东西(包括循环展开)