PHP===
よりも速いのはなぜですか?==
12 に答える
等価演算子==
は一時的にデータ型を強制または変換するため、他のオペランドと等しいかどうかを確認しますが、===
(恒等演算子) は変換をまったく行う必要がないため、実行される作業が少なくなり、高速になります。
===
は型キャストを実行しないため、 に0 == '0'
評価されますtrue
が、0 === '0'
- に評価されfalse
ます。
考慮すべき点が 2 つあります。
オペランドの型が異なる場合
==
、異なる結果===
が生成されます。その場合、オペレータの速度は重要ではありません。重要なのは、どちらが望ましい結果を生み出すかです。オペランドの型が同じ場合は、どちら
==
かを使用するか===
、両方を使用しても同じ結果が得られます。その場合、両方のオペレーターの速度はほぼ同じです。これは、どちらの演算子でも型変換が実行されないためです。
次の速度を比較しました。
$a == $b
対$a === $b
- ここで
$a
、 と$b
はランダムな整数 [1, 100] でした - 2 つの変数が生成され、100 万回比較されました
- テストは10回実行されました
結果は次のとおりです。
$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
速度がほぼ同じであることがわかります。
最初に、=== は 2 つの引数が同じ型であるかどうかを確認します。そのため、数値 1 と文字列 '1' は、実際に比較が実行される前に型チェックに失敗します。一方、 == は最初に型をチェックせずに先に進み、両方の引数を同じ型に変換してから比較します。
したがって、 === は失敗状態のチェックが速い
それが大幅に高速かどうかはよくわかりませんが、ほとんどの言語で === は直接型比較ですが、 == は一致を得るために必要/可能であれば型強制を試みます。
オペランドを比較する前===
に、オペランドを強制的に同じ型にする必要がないからです。
速度の違いは非常に大きいとは思いません。通常の状況では、より意味のある演算子を使用する必要があります。
== は、比較前の型変換のオーバーヘッドが大きくなります。=== は最初に型をチェックし、次に型変換を行わずに続行します。
結論として、2つの変数が同じ値であるかどうかを確認するためにデータ型を変換しないため、===の方が高速ですが、2つの変数が同じ値であるかどうかを確認する必要がある場合は、変数がどのタイプであるかを取得しない場合は==を使用します。 、または===変数のタイプも重要な場合。
高速化は、直接の実行時間だけで測定するべきではありません (この場合、直接のパフォーマンス テストはほとんど無視できます)。とはいえ、(現実的な状況で使用した場合に)有意な累積差があるかどうかを実際に確認するには、反復または再帰を含むテストを確認する必要があります。エッジケースを扱うときに節約できるテストとデバッグの時間は、あなたにとっても意味のあるものになるはずです。
テスト結果が正しければ、コンパイラの問題に違いありません。
プロセッサは、クロックサイクルで指示されたことを何でも実行します
やることが少なければ、やるのが早くなる
添加:
ああ、実際には、コンパイラが処理するマシンコードの負荷をすでに作成している場合、比較する必要があるデータの種類に対処するために膨大な量のものをすでに追加している場合、1 つの「マイナー」IF を削除しても速度はあまり変わりません。まったく。
誰かがまだこれを読んでいるなら、私はもっと議論に興味があります.
フィル