PHP En pahalı operasyonlar?

9 Cevap php

PHP en pahalı operasyonlar nelerdir? Ben @ operatörü overusing gibi şeyler pahalı olabilir biliyorum. Başka ne düşünün?

9 Cevap

  • serialize() eval olduğu gibi (), create_function (), yavaş ve sistemi () ve ilgili fonksiyonları ile ek işlemler yumurtlama.
  • conditional includes, eval () ed kod, vb - şey APC olamaz önbellek dikkat
  • Veritabanı bağlantıları Açılış. Her zaman bağlantıları önbelleğe ve bunları yeniden kullanın.
  • Nesne kopyalama
  • Düzenli ifadeler. Eğer, örneğin, bir işleçleri işlevselliğe ihtiyaç yoksa daima düzenli ifade operasyon üzerinde normal bir dize işlemlerini kullanın str_replace() preg_replace() üzerinde nerede mümkünse kullanmayın.
  • Günlüğü ve disk yazma yavaş olabilir - Gereksiz günlüğü ve dosya işlemleri ortadan

Iyi bir uygulama olduğunu, ancak alt çizgi performansı çok fark yapmaz bazı mikro-optimizasyonları:

  • Echo kullanmak baskı daha hızlıdır
  • Değişkenleri birleştirilmesi çift tırnaklı dize inline bunları kullanarak daha hızlıdır.
  • Bir bağımsız değişkenler listesindeki yankı kullanarak argümanlar birbirine daha hızlıdır. Örnek: echo 'How are you ',$name,' I am fine ',$var1 echo 'How are you '.$name.' I am fine '.$var1 daha hızlıdır
  • Bildirimler ve Uyarılar ile geliştirin döndü. Onlar tetiklenen alamadım emin onlara hata kontrolü çalıştırmak zorunda PHP kaydeder.

Aksine yavaş potansiyel alanları anlamaya çalışmak yerine, bir profil aracını kullanın. Takma xDebug Muhtemelen ben yazmak kod geliştirmek için yaptık kolay ve en iyi şeylerden biriydi. En iyi sonuçlar için WinCacheGrind (veya işletim sistemi için doğru sürüm) ile takın.

 "Hello $name"

sözdizimi daha yavaştır

'Hello ' . $name

Ayrıca, __get() __set() __call(), vb yavaş

Eğer çok bakım ve eğer, sen structures SPL optimize kullanabilirsiniz

Genellikle yerel bir operasyon yaparak daha fazla zaman alacağım: Örneğin, bir webservice çağrı gibi - bir ağ bağlantısı olsa gidiyor her şey.

(Even if it doesn't cost much CPU, it'll cost time)

Ben döngüler içinde SQL sorguları söyleyebilirim. Bunun gibi:

foreach ($db->query('SELECT * FROM categories') as $cat)
{
    foreach ($db->query('SELECT * FROM items WHERE cat_id = ' . $cat['cat_id']) as $item)
    {
    }
}

Hangi kayıt için, bu gibi bir şey içine kısaltılmış olabilir:

$sql = 'SELECT c.*, i.*
          FROM categoriess c
     LEFT JOIN items i USING (cat_id)
      ORDER BY c.cat_order';

foreach ($db->query($sql) as $row)
{
}

curl_exec () normal işlemler karşılaştırıldığında, çok yavaş. Ayrıca, çoğu str_ * işlemleri regex işlemleri daha hızlıdır.

Özellikle yuvalama ile foreach() ifadeleri, sık sık pahalı; Bu kadar olsa benim saf ve php hatası olarak programlamaya bazen kötü planlanmış-yaklaşım.

Ben o kadar neredeyse kesinlikle, JS ve diğer dillerde de, benim hatam doğru olduğunu düşünüyorum rağmen. = /

Kendi deneyim reel en pahalı operasyon echo ifadedir. Deneyin ve özellikle katılır veritabanı aramaları, ardından tarayıcıya çıktılamayıp önce birlikte tüm dize katılın!

Kod da bazen sadece basitçe algoritmalar ve veri yapıları üstlenmeden bir x10 performans artışı elde edebilirsiniz. Herhangi bir programı alın ve tekrar edebilirsiniz yarım o, yarım uzunluğa deneyin?

  • json_encode, tefrika daha hızlı
  • Döngüde bitiştirmek implode daha hızlıdır

İnsanlar bu söyleyerek oldukça web üzerinde geniş yayılır belki çünkü sadece @ pahalı olduğunu düşünüyorum.

http://www.php.net/manual/en/language.operators.errorcontrol.php#102543: aktarıyorum

If you're wondering what the performance impact of using the @ operator is, consider this example. Here, the second script (using the @ operator) takes 1.75x as long to execute...almost double the time of the first script.

So while yes, there is some overhead, per iteration, we see that the @ operator added only .005 ms per call. Not reason enough, imho, to avoid using the @ operator.

Gerçek 0m7.617s kullanıcı sistemi 0m0.792s 0m6.788s

vs

Gerçek 0m13.333s kullanıcının 0m12.437s sistemi 0m0.836s

Bunu istediğiniz bir operasyon "aşırı" bir operatör neredeyse yapamaz ve genellikle değer yapıyor eğer.