Bir dizi değişkenleri ayıklamak performans için kötü mü?

4 Cevap php

Ben PHP büyük extract fonksiyonu hakkında öğrendim ve gerçekten kullanışlı olduğunu düşünüyorum. Ancak ben PHP güzel şeylerin çoğunu da performansı etkiler, bu yüzden benim sorum extract gelmiş olabilir kullanarak etkileyecek olan, performans açısından gördüğüm olduğunu öğrenmek mi?

Bu diziler değişkenleri outta ayıklamak için büyük uygulamalar için kullanılacak bir hayır-hayır mı?

4 Cevap

Dizinin büyüklüğüne ve ayıklama, genel ad için büyük bir dizi ayıklamak söylemek hangi kapsamında bağlıdır, ben görebiliyordum iki kez bellekte tüm bu verileri olacak gibi, bir etkiye sahip - Ben inanıyorum olsa PHP bu sınırlamak için yapmanız bilinen bazı eğlence iç şeyler yapmak olabilir -

ama sen yaptın demek

function bob(){
extract( array( 'a' => 'woo', 'b' =>'fun', 'c' => 'array' ) );
}

onun gerçek kalıcı bir etkiye sahip oluyor.

Uzun lafın kısası, sadece neden sizin onu yapıyoruz, ne yaptığınızı düşünün ve kapsamı.

extract güvenilir veri kullanılmamalıdır. (Bilinen dizi anahtarları sınırlı sayıda olasılığı vardır çünkü) ve genellikle güvenilir veriler için kullanışlı değildir.

Derleyici ve / veya tercüman onunla SIMD yönergeleri kullanabilirsiniz, çünkü çoğu dilde Dizilerle çalışma çok daha iyidir.

Kodunuzun bir kısmını dizinin içinde her değer için bir işlevi çağırmak için çalışırsa da fark olabilir. Görünümünde bir performans açısından o doluydu tüm değerleri ile sadece bir kez işlevini çağırmak için daha verimli olur. Dizi çok uzun ve olası optimizasyonlar tespit etmek zor yaparsa bir fonksiyonu birkaç kez çağrı havai kadar dönüşebilecek

Bir keresinde çökmesini bir komut dosyası hata ayıklama vardı; PHP bellek tükeniyor olduğu ortaya çıkıyor.

Sorunun bir kısmı extract() 25000 elemanlarının bir döngüde kullanılan olmasıydı. Sadece bellek tükeniyor önce yaklaşık 2300 elemanları yoluyla almak istiyorum. Ben elle değişkenleri ayarı ile ekstresi (4 element ilişkisel dizi) yerini ve döngü yaklaşık 5200 kayıtları üzerinden elde edebildi.

Yani extract() kesinlikle performans sakıncaları vardır.