回答編集履歴
1
比較まとめ
answer
CHANGED
@@ -77,4 +77,78 @@
|
|
77
77
|
第一式はともかく、第二式+第三式が両方とも実行されるのは `for` 文にパフォーマンス上は不利に働きます。
|
78
78
|
出来るだけ多くのブラウザで高速に動作させることを求めるならば、`while` 文の一択だと私は思います。
|
79
79
|
|
80
|
+
### 比較まとめ
|
81
|
+
|
82
|
+
コードの最適化を進めた上で比較してみました。
|
83
|
+
|
84
|
+
```JavaScript
|
85
|
+
var bench = new Array(10000000);
|
86
|
+
var sTime, fTime;
|
87
|
+
|
88
|
+
/**
|
89
|
+
* _.each
|
90
|
+
*/
|
91
|
+
sTime = new Date();
|
92
|
+
var sqrt = Math.sqrt,
|
93
|
+
pow = Math.pow;
|
94
|
+
_.each(bench, function (value, index) {
|
95
|
+
bench[index] = sqrt(pow(12345) + pow(53142));
|
96
|
+
});
|
97
|
+
fTime = new Date();
|
98
|
+
console.log('_.each', fTime - sTime);
|
99
|
+
|
100
|
+
/**
|
101
|
+
* Array.prototype.forEach
|
102
|
+
*/
|
103
|
+
sTime = new Date();
|
104
|
+
var sqrt = Math.sqrt,
|
105
|
+
pow = Math.pow;
|
106
|
+
bench.forEach(function (value, index, array) {
|
107
|
+
array[index] = sqrt(pow(12345) + pow(53142));
|
108
|
+
});
|
109
|
+
fTime = new Date();
|
110
|
+
console.log('Array.prototype.forEach', fTime - sTime);
|
111
|
+
|
112
|
+
/**
|
113
|
+
* for
|
114
|
+
*/
|
115
|
+
sTime = new Date();
|
116
|
+
for (var i = 0, len = bench.length, sqrt = Math.sqrt, pow = Math.pow; i < len; i++) {
|
117
|
+
bench[i] = sqrt(pow(12345) + pow(53142));
|
118
|
+
}
|
119
|
+
fTime = new Date();
|
120
|
+
console.log('for', fTime - sTime);
|
121
|
+
|
122
|
+
/**
|
123
|
+
* while
|
124
|
+
*/
|
125
|
+
sTime = new Date();
|
126
|
+
var i = bench.length,
|
127
|
+
sqrt = Math.sqrt,
|
128
|
+
pow = Math.pow;
|
129
|
+
|
130
|
+
while (i--) {
|
131
|
+
bench[i] = sqrt(pow(12345) + pow(53142));
|
132
|
+
}
|
133
|
+
|
134
|
+
fTime = new Date();
|
135
|
+
console.log('while', fTime - sTime);
|
136
|
+
```
|
137
|
+
|
138
|
+
私の環境では、次の結果となりました。
|
139
|
+
|
140
|
+
```JavaScript
|
141
|
+
"_.each 899"
|
142
|
+
"Array.prototype.forEach 658"
|
143
|
+
"for 574"
|
144
|
+
"while 570"
|
145
|
+
```
|
146
|
+
|
147
|
+
- ライブラリはネイティブ機能に勝てません。
|
148
|
+
- 繰り返し処理において、関数呼び出しは制御構文(while, for 等)よりも遅いです。
|
149
|
+
|
150
|
+
### 更新履歴
|
151
|
+
|
152
|
+
- 2017/08/22 23:40 「比較まとめ」の節を追記
|
153
|
+
|
80
154
|
Re: airulove さん
|