等価演算子(==)と厳密等価演算子(===)
PHPでは速くなるとあったので、一応、検証してみた。
ベンチマーク
<pre><?php function write($str) { echo $str . '<br>'; } $arr = array(); for($i=0;$i<100000;$i++)$arr[$i]=rand(1, 6); // 1〜6の乱数を生成 write('*数字の配列を操作'); function i11($arr) { write('比較演算子1-1'); $start = microtime(); for($i=0,$j=count($arr);$i<$j;++$i)$arr[$i]==6; $end = microtime(); $start = explode(' ', $start); $end = explode(' ', $end); write(((float)$end[0]+(float)$end[1]) - ((float)$start[0]+(float)$start[1])); } i11($arr); function i12($arr) { write('比較演算子1-2'); $start = microtime(); for($i=0,$j=count($arr);$i<$j;++$i)$arr[$i]===6; $end = microtime(); $start = explode(' ', $start); $end = explode(' ', $end); write(((float)$end[0]+(float)$end[1]) - ((float)$start[0]+(float)$start[1])); } i12($arr); function i21($arr) { write('比較演算子2-1'); $start = microtime(); for($i=0,$j=count($arr),$a=6;$i<$j;++$i)$arr[$i]==$a; $end = microtime(); $start = explode(' ', $start); $end = explode(' ', $end); write(((float)$end[0]+(float)$end[1]) - ((float)$start[0]+(float)$start[1])); } i21($arr); function i22($arr) { write('比較演算子2-2'); $start = microtime(); for($i=0,$j=count($arr),$a=6;$i<$j;++$i)$arr[$i]===$a; $end = microtime(); $start = explode(' ', $start); $end = explode(' ', $end); write(((float)$end[0]+(float)$end[1]) - ((float)$start[0]+(float)$start[1])); } i22($arr); write('*文字列の配列を操作'); for($i=0,$j=count($arr);$i<$j;++$i)$arr[$i]=''+$arr[$i]; function s11($arr) { write('比較演算子1-1'); $start = microtime(); for($i=0,$j=count($arr);$i<$j;++$i)$arr[$i]=='6'; $end = microtime(); $start = explode(' ', $start); $end = explode(' ', $end); write(((float)$end[0]+(float)$end[1]) - ((float)$start[0]+(float)$start[1])); } s11($arr); function s12($arr) { write('比較演算子1-2'); $start = microtime(); for($i=0,$j=count($arr);$i<$j;++$i)$arr[$i]==='6'; $end = microtime(); $start = explode(' ', $start); $end = explode(' ', $end); write(((float)$end[0]+(float)$end[1]) - ((float)$start[0]+(float)$start[1])); } s12($arr); function s21($arr) { write('比較演算子2-1'); $start = microtime(); for($i=0,$j=count($arr),$a='6';$i<$j;++$i)$arr[$i]==$a; $end = microtime(); $start = explode(' ', $start); $end = explode(' ', $end); write(((float)$end[0]+(float)$end[1]) - ((float)$start[0]+(float)$start[1])); } s21($arr); function s22($arr) { write('比較演算子2-2'); $start = microtime(); for($i=0,$j=count($arr),$a='6';$i<$j;++$i)$arr[$i]===$a; $end = microtime(); $start = explode(' ', $start); $end = explode(' ', $end); write(((float)$end[0]+(float)$end[1]) - ((float)$start[0]+(float)$start[1])); } s22($arr);
結果
*数字の配列を操作 比較演算子1-1 0.0688788890839 比較演算子1-2 0.0615670681 比較演算子2-1 0.0762310028076 比較演算子2-2 0.063451051712 *文字列の配列を操作 比較演算子1-1 0.113929986954 比較演算子1-2 0.0609550476074 比較演算子2-1 0.123423099518 比較演算子2-2 0.0615451335907
*数字の配列を操作 比較演算子1-1 0.0963079929352 比較演算子1-2 0.0640721321106 比較演算子2-1 0.0713851451874 比較演算子2-2 0.0655879974365 *文字列の配列を操作 比較演算子1-1 0.12929391861 比較演算子1-2 0.0743482112885 比較演算子2-1 0.130146026611 比較演算子2-2 0.0655629634857
*数字の配列を操作 比較演算子1-1 0.0723650455475 比較演算子1-2 0.056412935257 比較演算子2-1 0.0732989311218 比較演算子2-2 0.0751008987427 *文字列の配列を操作 比較演算子1-1 0.132040023804 比較演算子1-2 0.0645160675049 比較演算子2-1 0.129715919495 比較演算子2-2 0.0672280788422
感想
現金なくらい速くなった。PHPでは今度から、できる限りこちらの厳密等価演算子を使うことにしよう。あと、一時変数に入れることは意味がないので、便利な方で良いと思った。
厳密等価演算子が遅いJavaScriptはエンジンがいろいろ頑張っているのか、データ構造が特殊なのか、そういうことが原因にある気がするけど、そこまで詳しくない。残念。