なんかforの中でカウントしてるよーとか今日コードを眺めてて思っていた僕です。
あ、社会復帰記念に超どうでもいい技術ネタ書きます。
で、まあ実験用のスクリプトをこんな感じに用意します。
count.php
1
2
3
4
5
6
7
|
<?php
$max = [];
for( $i = 0; $i < 10000000; $i++ ) {
$max[] = true;
}
for ( $i < 0; $i < count($max); $i++ ) {}
|
で、計測します。
1
2
|
polidog$ time php count.php
php count.php 3.89s user 0.72s system 99% cpu 4.624 total
|
まあループの中でカウントしてるってどうなのよ?ってことでループの中でカウントしないコード書きました。
その1。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<?php
$max = [];
for( $i = 0; $i < 10000000; $i++ ) {
$max[] = true;
}
function counter() {
$count = 0;
return function($max) use ($count) {
if ($count == 0 ) {
$count = count($max);
}
return $count;
};
};
$counter = counter($max);
for ( $i < 0; $i < $counter($max); $i++ ) {}
|
で、実行。
1
2
|
polidog$ time php count2.php
php count2.php 3.76s user 0.73s system 99% cpu 4.489 total
|
おしゃれにクロージャ使うと若干早くなるみたいですねー。
その2。
1
2
3
4
5
6
7
8
9
|
<?php
$max = [];
for( $i = 0; $i < 10000000; $i++ ) {
$max[] = true;
}
$count = count($max);
for ( $i < 0; $i < $count; $i++ ) {}
|
で、実行
1
2
|
polidog$ time php count3.php
php count3.php 3.69s user 0.70s system 99% cpu 4.398 total
|
やっぱ普通に変数に代入するのがはやいですね。まあ微々たる物ですが、それでも速度を速くするという意味では、大量のループの際は変数に入れてあげる方がいいかもしれないです。
ほんとどうでもいいことですがw
※ただクロージャが書きたくなっただけです。
※そろそろサンプルコードはgistに移行したい。