PHP İşlev yürütme maliyet tablosu

6 Cevap php

Her php işlevi yürütme maliyetini gösteren bir referans tablo var?

Ben time execution birçok faktöre boundet ve benzersiz bir değer olup olmadığının tespiti için imkansız olduğunu biliyorum, ama im bir 'ideolojik' tablo arıyorum.

Örneğin,

is_dir() = cost 3
is_file() = cost 2

(Örnek olarak SADECE almak ;)

I kötü hatırlıyorum dont, C için her operasyon için gerekli cpu döngüleri ile bir tablo var ..

EDIT: i comment tüm okumak ve böylece benim ihtiyaçları için herhangi bir tablo vardır.

Neyse, ben biliyorum

is_dir('/');//is faster than
is_dir('/a/very/long/path/to/check/');

Ama, ben (i sağ sözlerini anladım varsa, mümkün olduğunu) bu durumu kabul etmek biraz sorun var;

$a = '/';
$b = '/a/very/long/path/to/check/';
is_dir($a);  //time execution 0.003
is_file($a); //time execution 0.005
//so suppose is_dir is faster than is_file
//(still example, function names and number are random ;)
is_dir($b);  //time execution 0.013
is_file($b); //time execution 0.009
//wow, now is faster is_file()....?

6 Cevap

Böyle bir grafik yararlı veya doğru olmaz. Sizin örnekte işlevin zamanlaması yerel dosyalama sistemi ayrıntılar üzerinde çok bağlı olacaktır ve hızla anlamsız olacaktı.

Performansını ölçmek için tek gerçek yolu onu zaman zaman, kodunuzu inşa etmektir. Ise daha hızlı için mi? Diğer içindeki koduna özgü olacağını her türlü etmene bağlı olarak, başka bir durumda daha hızlı olacağını ise belki bir, bir durumda, diğer daha iyi olacaktır.

Zaman kodunuzu, bir profiler kullanarak ve sunucu ortamında proje için doğru bazı anlamlı verileri almak.

Böyle bir tablonun farkında değilim.

Bir fonksiyonun maliyeti girişine bağlı olarak çok değişir.

Array_unique tarafından işlenen bir 1000 item array () 5 madde girdi dizisi ile aynı işlevi daha uzun sürer.

Eğer uygulama ayarlama ilgileniyorsanız, her işlev çağrısının yürütme zamanı için microtime kullanabilirsiniz.

Bu gibi bir şey olur

$starttime = microtime();
is_dir('/var/foo');
$stoptime = microtime();
echo "is_dir cost: ".($stoptime-$startime);

Ben böyle bir tablo zaten var ki mümkün değil bence.

Her şeyden önce, süresi büyük ölçüde giriş bağlıdır. Ama fonksiyonlarının çeşitli için böyle bir sorun yok. Biz algoritmik karmaşıklığı işaret olabilir: O (n ^ 2), böylece O (n) (log n) ve. Biz böyle bir şey ile başa çıkmak için büyük matematiksel aparat var.

Daha önemli bir şey ortamıdır. Tüm çevreyi bilmiyoruz, çünkü fonksiyonu çalışıyor olacak ne kadar tahmin olamazdı. NFS üzerinde file_exists () yerel ext3 hacmine kadar hızlı olmayacaktır. Uzun istek yüzden MySQL sunucusu transfer ve nasıl tahmin olamazdı.

Peki ne yapmalıyım - ölçü, ölçü ve ölçü. Kendi ölçümleri ve çevre üzerinde sadece bağlıdır. Bu tek yol.

PHP için böyle bir "komut sayısı" Yapamam. Hatta C ile bu libc uygulanmasına bağlı olacaktır.

Aynı işlevi bağlamında bağlı olarak çok farklı maliyetlere sahip olabilir, çünkü bir işlev maliyetleri tablo olarak böyle bir şey olduğunu sanmıyorum.

Örneğin (ama sadece bir örnek olarak almak!):

is_dir('/'); //will be very fast
is_dir('/symbolic_link/symbolic_link_on_a_remote_fs/'); //will be way slower

Bu fonksiyonu değerlendirmek maliyetleri optimizasyonu için çok iyi bir yaklaşım olabilir aramaları, söyleniyor.

Bir profil ile çalışmak size kodunda bazı özel fonksiyon çağrıları bunları olmak istiyorum daha yavaş olduğunu fark yardımcı olabilir ve bu parçaların re-thinking/re-writing bir sürü şeyleri hızlandırmak olabilir.

Eğer alırsınız yakın Vulcan Logic Disassembler (PECL link) çağrılacak kullanılan Vulcan Logic Dumper (author's webpage/project homepage link) aracılığıyla olasılıkla OpCode analizdir. Sarah Golemon her blog bu şeyler hakkında bazı güzel bilgiler var.