Help us understand the problem. What is going on with this article?

es5のforEachって高速なの?

More than 5 years have passed since last update.

es5でいろいろ関数追加されたので、underscoreとかjqueryよりもこっちを使ったほうが高速なのかなとかれこれ一年ぐらいもやもやしていたので調べてみた。

検証してみた

検証コード

  var array = [];
  var i = 0;

  for (i;i<100000;i++){
    array.push("hoge"+i);
  }

forEach

  console.time("forEach");
  array.forEach(function(item){
    item = item + "aaa";
  });
  console.timeEnd("forEach");

_.each

  console.time("_each");
  _.each(array,function(item){
    item = item + "ccc";
  });
  console.timeEnd("_each");

for

  console.time("for");
  for (i;i<100000;i++){
    array[i] = array[i] + "bbb";
  }
  console.timeEnd("for")

検証環境

Chrome 42.0.2311.135 (64-bit)
CPU 2.7 GHz Intel Core i5
OS Mac OS X 10.10.2

forEach

28.434
20.039
39.702
20.401
27.185

avg 27.1522ms

_.each

_.each
25.686
18.825
22.195
20.494
18.763

avg 21.1926ms

for

0.007
0.008
0.008
0.01
0.008

avg 0.0082

forEachけっこう遅いですね。
underscoreのeachのほうがまだちょっと速いぐらい。

クロージャつくらないforがダントツで高速でした。
予想はしていましたがダントツすぎてびびりました。

追記

コメントで教えてもらいましたが
forEachが_.eachより遅いのはdeleteされた配列はスキップしてくれるからです。

_.eachやforの場合、中身があろうがなかろうが、
indexを参照します。

var arr = [1,2,3,4];
delete arr[2];

//1,2,4が出力
arr.forEach(function(v){console.log(v)});

用途に応じて使い分けるのがよさそうですね。

coa00
frontend, node.js あたりの仕事をする人。エンジニアからディレクションまでなんでもやる人。フリーランスのお友達とお仕事くださいー。
http://coa.nu
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした