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

Javascript 我应该相信现代浏览器为我优化代码吗?,javascript,optimization,Javascript,Optimization,有没有JS编译器不优化这个循环 for (var i = fromIndex; i < arr.length; i++) { ...} for(var i=fromIndex;i

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

for (var i = fromIndex; i < arr.length; i++) {  ...}
for(var i=fromIndex;i
在这种情况下,据说更好的循环是

for (var i = fromIndex, ii = arr.length; i < ii; i++) {  
for(var i=fromIndex,ii=arr.length;i
在我所知道的每一种语言中,我都相信编译器会为我做这些事情。我怀疑谷歌浏览器和现代浏览器会做这些优化……我错了吗


在那篇文章中还有更多的例子,比如长开关盒,它的性能很差。现在Chrome和FF4.0仍然是这样吗(我也听说了IE9的优点)?

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

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

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

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

否。它是解释器而不是编译器

JavaScript是动态的,您无法像使用静态语言那样进行如此多的优化

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

解释器的目的也是尽可能快地解释代码,并尽可能快地运行它

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


另一方面,Chrome、FF4(5)和IE9(10)速度很快。你不需要像这样进行微观优化。尽管你确实存在瓶颈,但你仍然需要手动优化简单的事情(包括循环展开)

我不会太在意那些在库中编写函数(a,b,c){var d=a*y.cos(c)-b*y.sin(c),e=a*y.sin(c)+b*y.cos(c)的人对效率的评价;返回{x:d,y:e}