关于优化:Javascript:优化关键/高度处理的Javascript代码的详细信息

Javascript: Optimizing details for Critical/Highly Processed Javascript code

我一直在研究大量的javascript优化,其中大多数都在讨论字符串连接和这里发现的其他一些大的优化,但是我认为在速度非常关键并且这些代码的处理速度非常高的情况下,必须有更多的细节来优化。

假设您运行此代码是出于某种原因:(不太可能,我知道,但请容忍)

1
2
3
for( var i = 0; i < 100000000000; i++ ) {
  //Do stuff
}

没有办法绕着这么大的一个环…你要确保你在循环中做的所有事情都被优化到你不能再优化的程度…否则你的网站就会挂起。

编辑:我不一定要谈论一个循环,那么一个反复调用的函数,比如onmousemove呢?虽然在大多数情况下,我们不需要使用onmousemove,但也有一些情况需要这样做。
这个问题适用于那些情况。

使用jquery作为JS库

所以我想要的是优化的提示,但只有更不常见的提示
-即,开关之间的速度差,否则

如果你想看更常见的,可以在这里找到:

  • 优化javascript以提高执行速度
  • javascript提示和技巧;javascript最佳实践
  • 优化图像的javascript预加载
  • 你如何优化你的javascript?
  • 面向对象的JavaScript最佳实践


"没有一个生命得到周围的环,有一个大的……"

在真实的世界(RIA,你必须绕过大循环。作为重要的冰为优化学习如何打破大循环和小循环的结果,两个小时给两个问题与它的浏览器界面。否则你会给你的用户一个坏的经验和他们不会回来。

所以我认为,在你学习的参数优化,你应该知道如何打破一环称为大城市chunks setTimeout()和显示一个进度条(或简单的GIF animated环)。

感知速度往往是更重要的比实际速度。《魔兽世界客户端不同的冰从魔兽世界的服务器。

当animating,学习如何找出如果你运行的是一个跛脚的浏览器(IE清除通常)和A(或帧率的。我不animate)。我可以得到一些动画90fps走在一个好的浏览器,但只在15fps IU。你可以在浏览器的测试,但它通常最好的两个使用超时和钟看到动画是如何表演。

也为真正的加速比,学习如何使用Web的工人在鸭体内newer browsers速。


你可以加快这个mofo的速度,这样:

1
2
3
for (var i = 100000000; i--;) {
  //Do stuff
}

反转循环并仅检查

1
i--

而不是

1
i < 10000000 and i < 10000000 = true

在大多数浏览器中性能提高50%

在google code talk@http://www.youtube.com/watch上看到这个吗?V= MHTDZGou00曲这次谈话还包括一些其他的妙计。

祝你好运!


利用split&;join而不是replace

1
2
//str.replace("needle","hay");
str.split("needle").join("hay");

如果它不需要两个同步的回路,convert到递归执行setTimeout的保证金。

1
2
3
for( var i = 0; i < 100000000000; i++ ) {
    //Do stuff
}

我们可以写为

1
2
3
4
5
function doSomething(n)
{
    if (n === 0) return some_value;
    setTimeout(function(){doSomething(n-1);}, 0);
}

好的,这可能会不会是一个很好的实例,但你得到的想法。这种方式,你convert长同步到异步操作的操作,不挂的浏览器。在某些场景非常有用的东西,不需要的是做对了。


在看到好几个答案的城市,这里的人,我做了一些有趣的发现的几个搜索和添加两个:

这是在线优化的JavaScript技巧当你再找两个拿下两个很小的细节,在大多数用例的事情不会有物,但它会使所有的差异:

如果与其他开关。

A commonly used tactic to wring
whatever overhead might be left out of
a large group of simple conditional
statements is replacing If-Then-Else's
with Switch statements.

正是你想看到的incase标杆,你可以在这里找到它的。

环unrolling

To unroll a loop, you have it do more
than one of the same step per
iteration and increment the counter
variable accordingly. This helps a lot
because you then decrease the number
of times you are checking the
condition for the loop overall. You
must be careful when doing this though
because you may end up overshooting
bounds.

在这里看到的细节和标杆。

逆向循环计数>

Reverse your loop so that it counts
down instead of up. I have also seen
in various documents about
optimization that comparing a number
to zero is much quicker than comparing
it to another number, so if you
decrement and compare to zero it
should be faster.

看到更多的细节,这里和标杆。

达夫的设备> 它的简单,但复杂的两个grasp第一。读关于它在这里享受。
确保两间离的改进版本,继续下一页。

这部分的信息是直接从这里上市:JavaScript代码的优化。它的有趣,由于它的大的网站,这样它看起来要从优化的角度来看的浏览器处理他们的仇恨,然后反向功率。尽管他们有记录的基准有Netscape和IE 5.5 4.73基准工具,他们提供准确的结果,在你的浏览器的使用。

为人民谁认为这些细节不重要,我认为这一点上说,关于人的认知的方式走向科技的力量在我们的花园。只是因为我们是browsers处理多小时禁食,比什么,他们使用两个necessarily不均,我们要处理的是滥用权力。

在我不suggesting花两小时的优化0.005ms行代码,但如果你想让这些技术在提醒和实施他们的信息在适当的情况下将两个网络contribute斋戒。毕竟,还是有很多人使用IE 6,那么这将是个错误的browsers assume',每个人都可以做同样的处理。


大长链的局部变量的引用:

1
2
3
4
5
6
7
8
9
function doit() {
    //foo.bar.moo.goo();
    //alert(foo.bar.moo.x);

    var moo = foo.bar.moo;

    moo.goo();
    alert(moo.x);
}


JavaScript引擎,这是我们应该有两个目标吗?如果你在谈论这样的"优化",它使一个大的差异。对starters,我会指出,array.join(字符串)的把戏concatenation冰真的只适用于微软JScript引擎;它可以给我的。对其他JS引擎的性能。