hashing
Lütfen sağlamalarının biliyorum (diziler / tablolar / Aramadan haritaları / ne emretti). bir karma arama çok hızlı olduğunu ve O (n ^ 2) döngüler varsa, bazen, ilk (birincil anahtar ile anahtarlı) bir diziye onları organize ve daha sonra bunları işleyerek O (n) onları azaltabilir.
Bir örnek:
foreach ($results as $result)
if (in_array($result->id, $other_results)
$found++;
bir yavaş - in_array
O sonuçlanan $other_result
tamamının aracılığıyla döngüsü (n ^ 2).
foreach ($other_results as $other_result)
$hash[$other_result->id] = true;
foreach ($results as $result)
if (isset($hash[$result->id]))
$found++;
isset () (neredeyse) sabit bir zaman olduğu için, - ikinci bir çok daha hızlı (daha büyük, daha hızlı sonuç kümeleri bağlı) olduğunu. Eğer php fonksiyonları yerleşik kullanarak daha hızlı bu yapabileceğini, ama fikir olsun - aslında, bu çok iyi bir örnek değildir.
optimizing (My)SQL
mysql.conf: ben sizin mysql yapılandırma optimize yerine varsayılan bırakarak kazanmak ne kadar performans herhangi bir fikrim yok. ama varsayılan yapılandırmayı kullanılan her postgresql kriter sayabilirsiniz okudum. afaik yapılandırma ile daha az mysql ile önemli, ama neden bunu görmezden? başparmak kuralı: belleğe tüm veritabanını uygun çalışın :)
explain [query]: bariz bir, bir sürü insan yanlış olsun. endekslerin hakkında bilgi. Eğer takip edebilirsiniz kuralları kriter bunu yapabilirsiniz ve size büyük bir fark yaratabilir vardır. Eğer gerçekten her şeyi istiyorsanız, farklı endeksleri türleri (btrees, karma, ...) ve bunları kullanmayı öğrenirler.
caching
önbelleğe alma zor, ama doğru yapılırsa eğer the fark (değil a fark yapar). Bence: Eğer önbelleğe alma olmadan yaşamak, bunu yapmayın. genellikle karmaşıklığı ve başarısızlıkları çok puan ekler. google (intertubes daha hızlı yapmak için) bir kez vekil önbelleğe biraz yaptım ve bazı insanlar başkalarının özel bilgileri gördüm.
php, insanlar düzenli kullanımını önbelleğe 4 farklı türü vardır:
query caching: hemen hemen her zaman (bazen paylaşılan bellek APC için) memcached çevirir. hızlı bir anahtar / değer (= karma) depolama motoru belirli bir sorgunun sonuç kümesini saklamak. sorguları (şimdi aramalarını) olmak very ucuz.
output caching: (yerine bunu her zaman yenileyici) daha sonra kullanmak için oluşturulan html saklayın. Bu büyük hız-up sonucu, ama biraz PHPs dinamik bir doğaya karşı çalışır olabilir.
browser caching: ne ETAG'ları ve http yanıtları hakkında? yapılırsa sağa işin en önlemek olabilir right at the beginning! bunlar HTTP nedir hiçbir fikrim yok çünkü çoğu php programcıları bu seçeneği görmezden.
opcode caching: APC, zend optimizer ve böylece. php kod yük daha hızlı yapar. Büyük uygulamaları ile yardımcı olabilir. gerçi (yavaş) dış DataSource'ları ile ilgisi var, ve potansiyel biraz sınırlı.
bazen örneğin, önbelleklerini olmadan yaşamak mümkün değil Bu küçük gelirse. resim boyutlandırma çok pahalı, ama (çoğu zaman) kontrol etmek için fortunatley kolaydır.
profiler
xdebug size uygulama darboğazları gösterir. app çok yavaş ise, neden bilmek yararlı olur.
queries in loops
Orada do not know what a join is (php-) uzman (ve eğitmek her biri için, bu bilgiler olmadan iki yeni olanlar yüzey olacak - ve onlar, çerçeveler yazmak schnalles yasa göreceksiniz). Bazen, bu sorgular-in-döngüler bu açık değildir, örneğin onlar kütüphaneleri ile gelmek durumunda. sorguları saymak - onlar gösterilen sonuçları ile büyürse, yanlış bir şey var.
deneyimsiz geliştiriciler çerçeveler ve içerik yönetim sistemleri yazmak için bir ilkel, doyumsuz dürtü var
schnalle's law