PHP hızı: Daha hızlı nedir?

6 Cevap php

I am just trying to optimize my code. I need to prefill a form with data from a database, and I need to check if the variable exist to fill the text box (I don't like the @ error hiding). The form is really long, then I need to check multiple times if the variables exist.

Ne aşağıdaki iki hızlıdır?

  • if (isset ($item))
  • if ($item_exists==true)

Hatta

  • if ($item_exists===true)

6 Cevap

Bu durumda ilk performansı hakkında ama doğruluğu hakkında sormak gerekir. isset mantıksal bir dönüşüm ve true karşılaştırıldığında gibi davranmak değildir, çünkü (bkz: type comparison table). Özellikle değerler "" (boş dize), array() (boş dizi) false, 0, ve {[(7)] } (0 bir dize gibi) farklı ele alınır.

Bir for döngü bunu 10000000 kez tekrarlayarak ile aynı komut dosyası aldı:

  • if (isset ($item)) 2,25843787193
  • if ($item_exists==true) 6,25483512878
  • if ($item_exists===true) 5,99481105804

Yani isset kesinlikle daha hızlı olduğunu söyleyebilirim.

Ben bir performans farkı yoktur eminim; Ben bir yerde benchmarked olmuştur eminim; ama ben de gerçekten gerçek dünya amaçları için hiç önemli değildir eminim. Herhangi ulaşılabilir kazanç burada milisaniye olduğunu ve çok ne, çok daha önemli kod okunabilirliği ve uyarılar kaçınarak (hangi maliyet performans, ister çıkış ya da değil).

Eğer bunu erişmek anda ayarlanır emin olamaz eğer Muhtemelen isset ihtiyacınız olacaktır. tip-güvenli karşılaştırma === $item_exists her zaman bir boolean gerekirse olmamalı, ama ya zarar vermez. Yani durumunuza bağlı olarak, gerekebilir

if ((isset($item)) and ($item_exists === true))

Olsa cevap büyük olasılıkla isset () ve sadece birden çok koşul için == denetler bir durum, kontrol ve yavaş olması gibi "===" hızlı olacaktır için. Ben resmen bu test değil, ama onun hakkını düşünüyorum. @ Pekka optimize etmek arıyorsanız, bu gerçekten bunu yapmak nerede olacak değil, aynı zamanda doğru olduğunu. Muhtemelen sadece fark bir kaç milisaniye fark aramalar binlerce alacaktı.

"Profil" olarak adlandırılan kodunuzu optimize etmek için tek bir yolu vardır. Önce what part of code optimizasyonu gerektirir bilmek lazım. Ve ancak o zaman, vb çözümler bulmak, testler

Marcx cevabı gelen "çizerek" yaklaşımı çok korkunç. Eğer herhangi bir kod gerçek bir fark yapar olmadığını test etmek istiyorsanız, Apache kriter programını kullanarak, bakış tarayıcınızın açısından test edin.

Ben aşağıdaki alternatifleri öneririm:

if (@$item)
if (@$item_exists)