なぜPHP ===
より速いの==
ですか?
=== vs ==
が、JavaScriptで、ここで読むことができます:stackoverflow.com/questions/359494/...
なぜPHP ===
より速いの==
ですか?
=== vs ==
が、JavaScriptで、ここで読むことができます:stackoverflow.com/questions/359494/...
回答:
等値演算子==
はデータ型を一時的に強制または変換するため、他のオペランドと等しいかどうかを確認しますが、===
(識別演算子)は変換を一切行う必要がないため、実行される作業が少なくなり、高速化されます。
考慮すべき点が2つあります。
オペランドのタイプが異なる場合==
、結果===
は異なります。その場合、オペレーターの速度は重要ではありません。重要なのは、どれが望ましい結果を生み出すかです。
オペランドのタイプが同じ場合は、どちらか一方を使用する==
か===
、両方を使用しても同じ結果が得られるためです。その場合、両方のオペレーターの速度はほぼ同じです。これは、どちらの演算子でも型変換が行われないためです。
私は以下の速度を比較しました:
$a == $b
対 $a === $b
$a
、$b
ランダムな整数[1、100]そしてここに結果があります:
$a == $b $a === $b
--------- ---------
0.765770 0.762020
0.753041 0.825965
0.770631 0.783696
0.787824 0.781129
0.757506 0.796142
0.773537 0.796734
0.768171 0.767894
0.747850 0.777244
0.836462 0.826406
0.759361 0.773971
--------- ---------
0.772015 0.789120
速度はほぼ同じであることがわかります。
大幅に高速であるかどうかは本当にわかりませんが、===はほとんどの言語で直接型を比較しますが、==は必要に応じて、または一致する可能性がある場合は型強制を試みます。
なぜなら===
、比較する前にオペランドを同じ型に強制する必要がないからです。
スピードの違いは非常に疑わしいです。通常の状況では、より意味のある演算子を使用する必要があります。
高速は、直接実行時間で測定されるだけではありません(この場合、直接パフォーマンステストはほとんど無視できます)。とは言っても、(現実的なコンテキストで使用した場合)累積的な有意差があるかどうかを実際に確認するには、反復または再帰を含むテストを行う必要があります。エッジケースを処理するときに節約できるテストとデバッグの時間は、あなたにとっても意味があるはずです
php(cコード)では、値は次のような「クラス」です。
class value
{
$int_;
$float_;
$string_;
$array_;
$object_;
}
あなたが比較$a == $b
し$a
てint
タイプしているとき、次のようなものがあります:
if ($a->int_ == $b->int_ || $a->int_ == (int) $b->float_ || $a->int_ == (int) $b->string_ || ...)
しかしstring
'1'
、ASCIIコード49
にキャストされません1
。
あなたが比較$a === $b
し$a
てint
タイプであるとき、次のようなものがあります:
if ($a->int_ == $b->int_)
テスト結果が正しい場合は、コンパイラの問題である必要があります。
プロセッサは、クロックサイクルで実行するように指示されたすべてを実行します
それを行うことが少ない場合は、それを行うのがより速くなります
添加:
ええと、コンパイラーが処理するマシンコードのロードをすでに作成している場合は、比較する必要があるデータのタイプに対処するために何十億もの要素がすでに追加されている場合、1つの「マイナー」IFを削除しても速度はあまり変わりませんまったく。
まだ誰かがこれを読んでいるなら、私はより多くの議論で興味深いです。
フィル