Neden PHP'den ===
daha hızlı ==
?
=== vs ==
, ancak JAVASCRIPT'de okuyabilir: stackoverflow.com/questions/359494/…
Neden PHP'den ===
daha hızlı ==
?
=== vs ==
, ancak JAVASCRIPT'de okuyabilir: stackoverflow.com/questions/359494/…
Yanıtlar:
Eşitlik operatörü ==
, diğer işlenene eşit olup olmadığını görmek için veri türünü geçici olarak zorlar veya dönüştürür, oysa ===
(kimlik operatörü) herhangi bir dönüştürme yapmak zorunda kalmaz ve böylece daha az çalışma yapılır, bu da daha hızlı hale getirir.
İlk olarak, === iki argümanın aynı tipte olup olmadığını kontrol eder - böylece herhangi bir karşılaştırma yapılmadan önce 1 sayısı ve '1' dizesi tür kontrolünde başarısız olur. Öte yandan, == önce türü denetlemez ve devam eder ve her iki bağımsız değişkeni aynı türe dönüştürür ve sonra karşılaştırmayı yapar.
Bu nedenle, === başarısızlık durumunu denetleme konusunda daha hızlı
==
de herhangi bir tür dönüştürme yapılması gerekip gerekmediğini görmek için önce türü denetler tahmin ediyorum . Bir ===
sonraki adımda herhangi bir dönüşüm yapmayan, onu daha hızlı yapan şeydir.
Dikkate alınması gereken iki şey vardır:
İşlenen türleri farklıysa ==
ve farklı sonuçlar===
üretir . Bu durumda operatörlerin hızı önemli değildir; önemli olan hangisinin istenen sonucu verdiğidir.
İşlenen türleri aynı ise o zaman kullanabilir ya ==
ya ===
her ikisi olarak üretecektir aynı sonuçları . Bu durumda, her iki operatörün hızı neredeyse aynıdır. Bunun nedeni, her iki işleç tarafından da tür dönüştürme yapılmamasıdır.
Hızını karşılaştırdım:
$a == $b
vs $a === $b
$a
ve $b
rasgele tamsayılardı [1, 100]İşte sonuçlar:
$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
Hızın neredeyse aynı olduğunu görebilirsiniz.
Gerçekten daha hızlı olup olmadığını bilmiyorum, ancak === çoğu dilde doğrudan bir tür karşılaştırma ise, == gerekirse / zorla bir eşleşme elde etmek için tip zorlama yapmaya çalışacaktır.
Çünkü ===
işlenenleri karşılaştırmadan önce aynı tür olmaya zorlamak zorunda değildir .
Hız farkının çok fazla olduğundan şüpheliyim. Normal şartlar altında hangi operatörün daha anlamlı olduğunu kullanmalısınız.
Daha hızlı bir şekilde yalnızca doğrudan yürütme zamanında ölçülmemelidir (bu durumda doğrudan performans testleri neredeyse önemsizdir). Bununla birlikte, (gerçekçi bir bağlamda kullanıldığında) önemli, kümülatif bir fark olup olmadığını gerçekten görmek için yineleme veya özyineleme içeren bir test görmem gerekir. Uç davalarla uğraşırken tasarruf edeceğiniz test ve hata ayıklama süresi sizin için de anlamlı olmalıdır.
Php (c kodu) değeri bir "sınıf" gibi:
class value
{
$int_;
$float_;
$string_;
$array_;
$object_;
}
Senin karşılaştırarak zaman $a == $b
ve $a
olan int
türü, gibi bir şey olacaktır:
if ($a->int_ == $b->int_ || $a->int_ == (int) $b->float_ || $a->int_ == (int) $b->string_ || ...)
ama string
'1'
ascii koduna dökülmeyecek 49
, öyle olacak 1
.
Karşılaştırdığınız zaman $a === $b
ve $a
olan int
türü gibi Someting olacak:
if ($a->int_ == $b->int_)
Test sonuçları doğruysa, derleyici sorunu olmalıdır,
İşlemci, bir saat döngüsünde söylendiği her şeyi yapacak
Yapacak daha az şey varsa, o zaman daha hızlı olacaktır
İlave:
Ah aslında eğer derleyici zaten işlenecek makine kodları bir sürü oluşturduysa, o zaman ne tür verilerin karşılaştırılması gerektiğini karşılamak için zilyonlarca şey eklediyse, o zaman bir "minör" IF'nin kaldırılması hızları çok fazla değiştirmez hiç.
Eğer kimse hala bunu okuyorsa, o zaman daha fazla tartışmada ilginçim.
Phil