計測
小分けにした場合と1度の場合では負荷と速度の大きな差は出ないのでしょうか?
実際に計測して下さい。
環境の違いで速度は変わるものなので、自分の環境で計測するのが最も確実です。
JavaScript
1function a1() {
2 for (var i = 0; i <= 10000; i++) {
3 console.log(i);
4 }
5}
6
7function a2() {
8 var max_num = 10000;
9 var n2 = 10;
10 var n = 0;
11 while (n2 <= max_num) {
12 for (var i = n; i <= n2; i++) {
13 console.log(i);
14 }
15 n = n + 10;
16 n2 = n + 10;
17 }
18}
19
20console.time('a1');
21a1();
22console.timeEnd('a1');
23
24console.time('a2');
25a2();
26console.timeEnd('a2');
結果
a1: 659.2548828125 ms
a2: 682.5908203125 ms
a1が速いのは、a2よりも処理が少ないからです。
a2は10000回ループさせる為にwhile文を実行し、新しい変数を定義しています。
有意な速度差
有意な速度差を見出すには、ボトルネックとなる処理の実行回数を減らすことです。
JavaScript
1function a3() {
2 for (var i = 0, array = []; i < 10001; i++) {
3 array.push(i);
4 }
5
6 console.log(array.join('\n'));
7}
8
9console.time('a3');
10a3();
11console.timeEnd('a3');
結果
console.log() を実行すると、コンソールに文字列が出力される為、画面の再描画が発生します。
console.log() の実行回数を1回にすれば、再描画は1回で済みます。
同じ理屈で下記2つのパターンで実行時間を計測した場合も差が生まれます。
- コンソールを開いた状態でページを開く
- コンソールを閉じた状態でページを開く
本回答では有意な差を出す為に、コンソールを開いた状態で console.time() を実行しています。
グローバル変数
高速化を狙う場合、グローバル変数は可能な限り、避けるべきです。
スコープチェーンの関係上、グローバル変数はローカル変数よりも遅いからです。
ご質問のコードはグローバル変数を使用していますが、本回答のコードではローカル変数に修正しています。
Re: valvalx さん