JS ArrayのforEach, filter, map の速度を調べてみた。
最近のモダンブラウザのJS実装には、Array#forEach や filter, map などがビルトインされている。
jQuery とかの each使うより、ネイティブ実装のほうが早そう。しかし forEach、filter、map の速度に違いがあるのかちょと気になったので実験してみた。
環境は Mac OS X 10.7.4, MacBook Air(Late 2010)
2012/06/22 追記: −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Sencha Touch, iPad等を追加しました → JavaScript の Array.forEach vs jQuery.each vs Ext.each
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
100万個の配列にたいして、forEach と filter、map を実行して速度を比較した。コールバックの中身は同じ。それを10回やって、平均取ったのが以下の表。
Google Chrome 19.0.1084.56
# | forEach | filter | map | jQuery |
---|---|---|---|---|
1 | 365 | 350 | 258 | 59 |
2 | 123 | 106 | 335 | 62 |
3 | 192 | 105 | 351 | 62 |
4 | 187 | 107 | 561 | 66 |
5 | 181 | 101 | 325 | 94 |
6 | 175 | 101 | 323 | 68 |
7 | 186 | 100 | 324 | 62 |
8 | 178 | 99 | 322 | 66 |
9 | 178 | 108 | 354 | 57 |
10 | 234 | 115 | 362 | 58 |
Safari 5.1.7 (7534.57.2)
# | forEach | filter | map | jQuery |
1 | 53 | 52 | 60 | 42 |
2 | 52 | 47 | 63 | 62 |
3 | 56 | 48 | 204 | 47 |
4 | 53 | 48 | 79 | 71 |
5 | 64 | 48 | 63 | 115 |
6 | 52 | 46 | 59 | 49 |
7 | 64 | 46 | 62 | 43 |
8 | 52 | 45 | 59 | 42 |
9 | 51 | 44 | 59 | 46 |
10 | 62 | 47 | 187 | 55 |
Safari はえーーー!!
jQuery.each はえーーーー!!!
jQuery はどちらのブラウザも早いですね。ネイティブのほうが早いと思い込んでいたけど、Chrome のネイティブ forEach はだめですね。。初回 forEach はなぜか必ず遅くなります。Safari ではそんなことない。
forEach と filter の比較をしようと思っていたんだけど、jQuery.each が早すぎて、もうこれでいいじゃんという予想外の結果に。
ネイティブをも凌駕するとは jQuery 恐ろしい子・・・