Ben php ile yazılmış kod hızı nasıl ölçebilirsiniz?

8 Cevap php

Ben (hepsi aynı işi yapmak olan) daha hızlı yürütmek birçok hangi sınıf nasıl söyleyebilirim? o ölçmek için bir yazılım var mı?

8 Cevap

Sen var (at least) iki çözüm:

Oldukça "naif" bir (true) tobefore microtime kullanıyor ve kod bir kısmından sonra, çok zaman onun yürütülmesi sırasında geçti ne olsun; Diğer cevaplar ve zaten örnekler verdi, ben mi çok daha söylemek "kazandığını söyledi.

Eğer kriter talimatlar birkaç istiyorsanız bu güzel bir çözüm; örneğin gibi, fonksiyonların iki tür karşılaştırma - herhangi bir "perturbating eleman" ortalama olduğundan emin olmak için, binlerce kez yapılırsa daha iyi olur.

Böyle bir şey, yani, bunu bir dizi seri almak ne kadar bilmek istiyorsanız:

$before = microtime(true);

for ($i=0 ; $i<100000 ; $i++) {
    serialize($list);
}

$after = microtime(true);
echo ($after-$before)/$i . " sec/serialize\n";

Mükemmel, ama yararlı değil, kurmak için çok zaman almaz.



Eğer bütün bir komut çok zaman alır hangi fonksiyon tanımlamak isterseniz oldukça güzel çalışıyor, diğer çözüm, kullanmaktır:

  • Script için profil verilerini oluşturmak için Xdebug uzatma,
  • Software that read the profiling data, and presents you something readable. I know three of those :
    • Webgrind; web arayüzü; Herhangi bir Apache + PHP sunucu üzerinde çalışması gerekir
    • WinCacheGrind; sadece windows
    • KCacheGrind; Muhtemelen sadece Linux ve linux gibi; Bu btw, ben tercih biri

Dosyaları profilleme almak için Xdebug yüklemek ve yapılandırmak zorunda; Belgelerin Profiling PHP Scripts sayfasına bir göz atın.

What I generally do is not enable the profiler by default (it generates quite big files, and slows things down), but use the possibility to send a parameter called XDEBUG_PROFILE as GET data, to activate profiling just for the page I need.
The profiling-related part of my php.ini looks like this :

xdebug.profiler_enable = 0              ; Profiling not activated by default
xdebug.profiler_enable_trigger = 1      ; Profiling activated when requested by the GET parameter
xdebug.profiler_output_dir = /tmp/ouput_directory
xdebug.profiler_output_name = files_names

(Read the documentation for more informations)

This screenshot is from a C++ program in KcacheGrind : http://kcachegrind.sourceforge.net/html/pics/KcgShot3Large.gif
You'll get exactly the same kind of thing with PHP scripts ;-)
(With KCacheGrind, I mean ; WinCacheGrind is not as good as KCacheGrind...)

Bu, uygulamada zaman alır ne güzel bir görünüm elde etmek için izin verir - ve bazen kesinlikle ^ ^ her şeyi aşağı yavaşlıyor the function bulmak için yardımcı olur

Note that Xdebug counts the CPU time spent by PHP ; when PHP is waiting for an answer from a Database (for instance), it is not working ; only waiting. So Xdebug will think the DB request doesn't take much time !
This should be profiled on the SQL server, not PHP, so...


Hope this is helpful :-)
Have fun !

Hızlı şeyler için ben (PHP) Bu do:

$startTime = microtime(true);
doTask(); // whatever you want to time
echo "Time:  " . number_format(( microtime(true) - $startTime), 4) . " Seconds\n";

Ayrıca profiler gibi kullanabilirsiniz http://xdebug.org/.

Bu Web bağlamı dışında test edilebilir bir şey varsa, ben sadece Unix time komutunu kullanın.

Zend Studio XDebug veya ZendDebugger kullanarak profil için destek inşa etti. Her fonksiyon ne kadar sürdüğünü tam olarak söylüyorum, sizin kod profil olacaktır. Bu darboğazları nerede sergiyi için harika bir araçtır.

Son zamanlarda xhprof kullanarak ive http://pecl.php.net/package/xhprof. Başlangıçta facebook tarafından geliştirilen ve iyi bir biz arayüzü ile geliyor edilmiştir.

Sen gerekli süreyi hesaplamak için ameliyattan önce ve sonra damgaları veya microtime saklamak gibi temel şeyler () kullanabilirsiniz. Bu çok doğru yapmak kolay, ama değil. Belki daha iyi bir çözüm Xdebug, ben onunla hiç çalışmamıştım ama ben bulabileceğiniz en iyi bilinen PHP hata ayıklayıcı / profiler olarak görünüyor.

Seninle ben 10 argümanları mevcut herhangi bir fonksiyon up hızını ölçmek için kullanabileceğiniz kendi kendine yetebilen bir fonksiyon paylaşmak istiyorum:

function fdump($f_name='', $f_args=array()){

    $f_dump=array();
    $f_result='';

    $f_success=false;

    $f_start=microtime();
    $f_start=explode(' ', $f_start);
    $f_start=$f_start[1] + $f_start[0];

    if(function_exists($f_name)){

        if(isset($f_args[0])&&is_array($f_args[0])){
            if($f_result=$f_name($f_args)){
                $f_success=true;
            }
        }
        elseif(!isset($f_args[1])){
            if($f_result=$f_name($f_args[0])){
                $f_success=true;
            }
        }
        elseif(!isset($f_args[2])){
            if($f_result=$f_name($f_args[0],$f_args[1])){
                $f_success=true;
            }
        }
        elseif(!isset($f_args[3])){
            if($f_result=$f_name($f_args[0],$f_args[1],$f_args[2])){
                $f_success=true;
            }
        }
        elseif(!isset($f_args[4])){
            if($f_result=$f_name($f_args[0],$f_args[1],$f_args[2],$f_args[3])){
                $f_success=true;
            }
        }
        elseif(!isset($f_args[5])){
            if($f_result=$f_name($f_args[0],$f_args[1],$f_args[2],$f_args[3],$f_args[4])){
                $f_success=true;
            }
        }
        elseif(!isset($f_args[6])){
            if($f_result=$f_name($f_args[0],$f_args[1],$f_args[2],$f_args[3],$f_args[4],$f_args[5])){
                $f_success=true;
            }
        }
        elseif(!isset($f_args[7])){
            if($f_result=$f_name($f_args[0],$f_args[1],$f_args[2],$f_args[3],$f_args[4],$f_args[5],$f_args[6])){
                $f_success=true;
            }
        }
        elseif(!isset($f_args[8])){
            if($f_result=$f_name($f_args[0],$f_args[1],$f_args[2],$f_args[3],$f_args[4],$f_args[5],$f_args[6],$f_args[7])){
                $f_success=true;
            }
        }
        elseif(!isset($f_args[9])){
            if($f_result=$f_name($f_args[0],$f_args[1],$f_args[2],$f_args[3],$f_args[4],$f_args[5],$f_args[6],$f_args[7],$f_args[8])){
                $f_success=true;
            }
        }
        elseif(!isset($f_args[10])){
            if($f_result=$f_name($f_args[0],$f_args[1],$f_args[2],$f_args[3],$f_args[4],$f_args[5],$f_args[6],$f_args[7],$f_args[8],$f_args[9])){
                $f_success=true;
            }
        }
    }
    $f_end=microtime();
    $f_end=explode(' ', $f_end);
    $f_end=$f_end[1] + $f_end[0];

    $f_time=round(($f_end - $f_start), 4);
    $f_dump['f_success']=$f_success;
    $f_dump['f_time']=$f_time;
    $f_dump['f_result']=$f_result;

    var_dump($f_dump);exit;

    //return $f_result;

}

Example

function do_stuff($arg1='', $arg2=''){
    return $arg1.' '.$arg2;
}

fdump('do_stuff',array('hello', 'world'));

İade

  array(3) {
    ["f_success"]=>
    bool(true)
    ["f_time"]=>
    float(0)            //too fast...
    ["f_result"]=>
    string(11) "hello world"
  }