Bir PHP komut dosyası zaman aşımına için en iyi yol

5 Cevap

PHP komut dosyası çalıştırmak için ne kadar zaman alır görmek için en iyi yolu nedir?

Ben böyle bir şey düşünüyordum:

$start_time = time(); //this at the beginning
$end_time = time(); //this at the end
echo = $end_time-$start_time;

Ama nasıl benim için okunabilir ve bana mantıklı bir şey yapabilirsiniz?

5 Cevap

I microtime(TRUE) yerine kullanmak istiyorsunuz. Bu size mikrosaniye çözünürlük ile daha iyi sonuçlar verecek. Komut profilleri PECL APD extension da bulunuyor.

Bir APD yüklü varsayarak, APD üzerinde biraz genişletilmesi, sadece satır eklemek gerekir

apd_set_pprof_trace();

üstüne (veya izleme başlatmak istediğiniz zaman) sizin script. Çok okunabilir çıktı üretir pprofp ile bir profil dosyası oluşturur

Real         User        System             secs/    cumm
%Time (excl/cumm)  (excl/cumm)  (excl/cumm) Calls    call    s/call  Memory Usage Name
--------------------------------------------------------------------------------------
100.0 0.00 0.00  0.00 0.00  0.00 0.00     1  0.0000   0.0009            0 main
56.9 0.00 0.00  0.00 0.00  0.00 0.00     1  0.0005   0.0005            0 apd_set_pprof_trace
28.0 0.00 0.00  0.00 0.00  0.00 0.00    10  0.0000   0.0000            0 preg_replace

Örnek çıkış, PHP kılavuzunda değil.

Ben şahsen APD derece yararlı buluyorum ve ağır vurduğu komut oldukça sık kullanabilirsiniz.

Bir şey çalıştırmak için ne kadar sürer bilmek bulmak, bir şey (php operasyonlarında) yavaşlar ve neden başka bir soru nerede.

Eğer XDebug yüklemek ikinci soruya bir cevap bulmak konusunda ciddi konum ve kendisi komut yavaşlar Microtime'da () seviyor aramak zorunda değil bonusu olsun.

http://xdebug.org/docs/profiler

http://xdebug.org/docs/

Bu web erişilebilir betik (yani http://www.yoursite.com/BLA.php), veya komut satırından içinden koşuyoruz bir senaryo var mı? Bir komut satırı komut Eğer, zaman komutunu kullanabilirsiniz:

time php FILE.php

Aksi takdirde, microtime muhtemelen en iyi bahistir.

Ben bu sınıf komut zaman yararlı buluyorum, microtime olmasıdır arkadaşı haline gelmek:

 class timer
 {
  private $start_time = NULL;
  private $end_time = NULL;

  private function getmicrotime()
  {
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
  }

  function start()
  {
    $this->start_time = $this->getmicrotime();
  }

  function stop()
  {
    $this->end_time = $this->getmicrotime();
  }

  function result()
  {
   if (is_null($this->start_time))
   {
    exit('Timer: start method not called !');
    return false;
   }
   else if (is_null($this->end_time))
   {
    exit('Timer: stop method not called !');
    return false;
   }

   return round(($this->end_time - $this->start_time), 4);
  }

  # an alias of result function
  function time()
  {
   $this->result();
  }

 }