質問編集履歴
4
再々トライ
title
CHANGED
File without changes
|
body
CHANGED
@@ -79,7 +79,7 @@
|
|
79
79
|
パターン4: 32935.210ms
|
80
80
|
```
|
81
81
|
|
82
|
-
# 再トライ
|
82
|
+
# ★再トライ
|
83
83
|
miyabi-sunさんからの回答を参考に再トライしてみました。
|
84
84
|
※ console.logはそのままで再トライしてしまいました。
|
85
85
|
|
@@ -152,4 +152,94 @@
|
|
152
152
|
console.timeEnd('パターン4');
|
153
153
|
|
154
154
|
//パターン4: 32951.688ms
|
155
|
+
```
|
156
|
+
|
157
|
+
|
158
|
+
# ★再々トライ
|
159
|
+
最後に、miyabi-sunの指摘通り、console.logをprocess.stdout.writeに変えて実行してみました。
|
160
|
+
また、今回はforEachに渡す関数を匿名関数ではなく、事前に変数に代入してforEachに渡し実行するパターン5を追加しました。
|
161
|
+
|
162
|
+
## パターン1
|
163
|
+
配列に値を入れてメモリ確保 & for文内で配列参照せずにログ出力
|
164
|
+
|
165
|
+
```
|
166
|
+
'use strict';
|
167
|
+
|
168
|
+
var numbers = Array.from({length: 1000000}, (v, k) => k);
|
169
|
+
var max = numbers.length;
|
170
|
+
|
171
|
+
console.time('パターン1');
|
172
|
+
for (let i = 0; i < max; i = (i+1)|0) {
|
173
|
+
process.stdout.write(`${i}\n`);
|
174
|
+
}
|
175
|
+
console.timeEnd('パターン1');
|
176
|
+
|
177
|
+
//パターン1: 32088.090ms
|
178
|
+
```
|
179
|
+
|
180
|
+
|
181
|
+
# パターン2
|
182
|
+
配列に値を入れてメモリ確保 & for文内で配列参照して配列内の値をログ出力
|
183
|
+
|
184
|
+
```
|
185
|
+
'use strict';
|
186
|
+
|
187
|
+
var numbers = Array.from({length: 1000000}, (v, k) => k);
|
188
|
+
var max = numbers.length;
|
189
|
+
|
190
|
+
console.time('パターン2');
|
191
|
+
for (let i = 0; i < max; i = (i+1)|0) {
|
192
|
+
process.stdout.write(`${numbers[i]}\n`);
|
193
|
+
}
|
194
|
+
console.timeEnd('パターン2');
|
195
|
+
|
196
|
+
//パターン2': 32415.275ms
|
197
|
+
```
|
198
|
+
|
199
|
+
|
200
|
+
# パターン3
|
201
|
+
配列に値を入れてメモリ確保 & forEachで配列内の値をログ出力
|
202
|
+
|
203
|
+
```
|
204
|
+
'use strict';
|
205
|
+
|
206
|
+
var numbers = Array.from({length: 1000000}, (v, k) => k);
|
207
|
+
var max = numbers.length;
|
208
|
+
|
209
|
+
console.time('パターン3');
|
210
|
+
numbers.forEach((v) => process.stdout.write(`${v}\n`));
|
211
|
+
console.timeEnd('パターン3');
|
212
|
+
|
213
|
+
//パターン3': 31955.411ms
|
214
|
+
```
|
215
|
+
|
216
|
+
# パターン4
|
217
|
+
配列使わない & for文内でログ出力
|
218
|
+
```
|
219
|
+
'use strict';
|
220
|
+
var max = 1000000;
|
221
|
+
|
222
|
+
console.time('パターン4');
|
223
|
+
for (var i = 0; i < max; i = (i+1)|0) {
|
224
|
+
process.stdout.write(`${i}\n`);
|
225
|
+
}
|
226
|
+
console.timeEnd('パターン4');
|
227
|
+
|
228
|
+
//パターン4: 32404.780ms
|
229
|
+
```
|
230
|
+
|
231
|
+
# パターン5
|
232
|
+
配列に値を入れてメモリ確保 & forEachで配列内の値をログ出力(事前に関数を変数に代入してforEachに渡す)
|
233
|
+
```
|
234
|
+
'use strict';
|
235
|
+
|
236
|
+
var numbers = Array.from({length: 1000000}, (v, k) => k);
|
237
|
+
var max = numbers.length;
|
238
|
+
|
239
|
+
console.time('パターン5');
|
240
|
+
const log = (v) => process.stdout.write(`${v}\n`);
|
241
|
+
numbers.forEach(log);
|
242
|
+
console.timeEnd('パターン5');
|
243
|
+
|
244
|
+
//パターン5': 32368.805ms
|
155
245
|
```
|
3
再トライ
title
CHANGED
File without changes
|
body
CHANGED
@@ -77,4 +77,79 @@
|
|
77
77
|
console.timeEnd('パターン4');
|
78
78
|
|
79
79
|
パターン4: 32935.210ms
|
80
|
+
```
|
81
|
+
|
82
|
+
# 再トライ
|
83
|
+
miyabi-sunさんからの回答を参考に再トライしてみました。
|
84
|
+
※ console.logはそのままで再トライしてしまいました。
|
85
|
+
|
86
|
+
結果的に実行する度にどれが早いか遅いかが誤差レベルで変わってしまうので、for文がforEachより早いというのは分かりませんでした。
|
87
|
+
|
88
|
+
## パターン1
|
89
|
+
配列に値を入れてメモリ確保 & for文内で配列参照せずにログ出力
|
90
|
+
|
91
|
+
```
|
92
|
+
'use strict';
|
93
|
+
|
94
|
+
var numbers = Array.from({length: 1000000}, (v, k) => k);
|
95
|
+
var max = numbers.length;
|
96
|
+
|
97
|
+
console.time('パターン1');
|
98
|
+
for (let i = 0; i < max; i = (i+1)|0) {
|
99
|
+
console.log(i);
|
100
|
+
}
|
101
|
+
console.timeEnd('パターン1');
|
102
|
+
|
103
|
+
//パターン1: 32958.586ms
|
104
|
+
```
|
105
|
+
|
106
|
+
|
107
|
+
# パターン2
|
108
|
+
配列に値を入れてメモリ確保 & for文内で配列参照して配列内の値をログ出力
|
109
|
+
|
110
|
+
```
|
111
|
+
'use strict';
|
112
|
+
|
113
|
+
var numbers = Array.from({length: 1000000}, (v, k) => k);
|
114
|
+
var max = numbers.length;
|
115
|
+
|
116
|
+
console.time('パターン2');
|
117
|
+
for (let i = 0; i < max; i = (i+1)|0) {
|
118
|
+
console.log(numbers[i]);
|
119
|
+
}
|
120
|
+
console.timeEnd('パターン2');
|
121
|
+
|
122
|
+
//パターン2': 32869.883ms
|
123
|
+
```
|
124
|
+
|
125
|
+
|
126
|
+
# パターン3
|
127
|
+
配列に値を入れてメモリ確保 & forEachで配列内の値をログ出力
|
128
|
+
|
129
|
+
```
|
130
|
+
'use strict';
|
131
|
+
|
132
|
+
var numbers = Array.from({length: 1000000}, (v, k) => k);
|
133
|
+
var max = numbers.length;
|
134
|
+
|
135
|
+
console.time('パターン3');
|
136
|
+
numbers.forEach((v) => console.log(v));
|
137
|
+
console.timeEnd('パターン3');
|
138
|
+
|
139
|
+
//パターン3': 32855.013ms
|
140
|
+
```
|
141
|
+
|
142
|
+
# パターン4
|
143
|
+
配列使わない & for文内でログ出力
|
144
|
+
```
|
145
|
+
'use strict';
|
146
|
+
var max = 1000000;
|
147
|
+
|
148
|
+
console.time('パターン4');
|
149
|
+
for (var i = 0; i < max; i = (i+1)|0) {
|
150
|
+
console.log(i);
|
151
|
+
}
|
152
|
+
console.timeEnd('パターン4');
|
153
|
+
|
154
|
+
//パターン4: 32951.688ms
|
80
155
|
```
|
2
説明追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -9,6 +9,8 @@
|
|
9
9
|
ターミナルのnode.js環境で実行しました。
|
10
10
|
|
11
11
|
# パターン1
|
12
|
+
配列に値を入れてメモリ確保 & for文内で配列参照せずにログ出力
|
13
|
+
|
12
14
|
```ここに言語を入力
|
13
15
|
'use strict';
|
14
16
|
|
@@ -25,6 +27,8 @@
|
|
25
27
|
```
|
26
28
|
|
27
29
|
# パターン2
|
30
|
+
配列に値を入れてメモリ確保 & for文内で配列参照して配列内の値をログ出力
|
31
|
+
|
28
32
|
```ここに言語を入力
|
29
33
|
'use strict';
|
30
34
|
|
@@ -42,6 +46,8 @@
|
|
42
46
|
|
43
47
|
|
44
48
|
# パターン3
|
49
|
+
配列に値を入れてメモリ確保 & forEachで配列内の値をログ出力
|
50
|
+
|
45
51
|
```ここに言語を入力
|
46
52
|
'use strict';
|
47
53
|
|
@@ -58,6 +64,8 @@
|
|
58
64
|
|
59
65
|
|
60
66
|
# パターン4
|
67
|
+
配列使わない & for文内でログ出力
|
68
|
+
|
61
69
|
```ここに言語を入力
|
62
70
|
'use strict';
|
63
71
|
var max = 1000000;
|
1
for文が最速ではなかったのですか?
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
しかし、結果は誤差レベルであったり、むしろ、forEachの方がforよりも早い場合が実行する時によっては、あったりなかったりでした。
|
4
4
|
|
5
|
+
**for文が最速ではなかったのですか?**
|
6
|
+
|
5
7
|
僕の検証方法がおかしいのでしょうか?それとも、こういうものですか?
|
6
8
|
|
7
9
|
ターミナルのnode.js環境で実行しました。
|