Anahtarı veya varsa deyim hızlı PHP, ve neden

4 Cevap

Hızlı deyim yürütmek veya, 10-20 koşulların en az bir anahtarı var mı nerede

Thanks Dave

4 Cevap

This person benchmarked ve bu sonuca vardık "if / else biraz daha iyi oldu." Kodu ve kriterler dahildir.

This benchmark eşdeğer oldukları sonucuna varıldı.

Diğer üzerinden kullanmak için hafif bir fark olabilir, ancak 10-20 koşulları için bir anahtar dava daha okunabilir ve daha uygun olabileceğini düşünebilirsiniz.

Ben her zaman [(3)] fazla 4 veya 5 koşulları sizin için if / else / {üzerinde switch kullanmak hemen hemen her zaman kullanmanız gerektiğini öğretti oldum } yapılar - Ama yanlış olabilir.

Ben Jordan, (ilk) linke şüphe ile bakmak, ben uygun kullanıldığında switch bunu yedeklemek için herhangi bir sabit veri var, biraz daha hızlı olması gerektiğini düşünüyorum ama her zaman kriter kendiniz yapabilirsiniz. Eğer örneğin katı (===) karşılaştırmalar yapmak gerektiğinde kullanmak asla bir senaryo switch olduğunu.

Her neyse, gelin bu mikro-optimizasyon varlık olduğunu, ve ben bir çirkin birden 0.000001 saniye olası pahasına okunabilir, güzel (girl-style) kodu olan tercih.

10-20 koşulları için kesinlikle switch IMO kullanmalısınız.

Sorunun doğası hakkında daha fazla bilgi olmadan, ben açıkça burada yanlış bir şey optimize olduğunu tahmin ediyorum.

Eğer büyük bir veri kümesi üzerinde döngü ve belirli bir DataField içeriğine bağlı olarak farklı şeyler yapıyor hakkında karar olsaydı koşullu hızı alakalı olacağını, sadece durum.

  • Her bir veri ile bir çok şey yapıyorsanız o zaman durumun maliyeti her döngü tekrarında hız alakasız olmalı ve kesinlikle okunabilmesi için optimize etmek ve anahtar deyimini kullanmanız gerekir.

  • Eğer her tekrarında çok az yapıyor ama bir milyon kez yapmak zorunda ise, o zaman belki farklı bir şekilde bu konuda gitmeli:

    • veri veritabanından gelirse, SQL kullanarak kaynak veritabanı kitle dönüşümleri boşaltması.
    • anahtarlama değeri ile ve daha sonra sıralama tüm veriler ayrı ayrı her bir alt kümesini ele
    • o yüzden gibi her farklı Datapoint için farklı bir işlevi çağırmak için hızlı olabilir:

 foreach($alldata as $index => $dataset) 
 { 
   $function_to_call = 'handle_'.$dataset->switching_value;
   if (function_exists($function_to_call))
      $function_to_call($dataset);
 }
  • ya da belki öyle değil mi - ama yine - kesin durumu hakkında bize ya her şey darboğaz değilse başka bir şey optimize düşünmek.