Blog webdeveloperski Patryk yarpo Jar

Mierzenie czasu wykonania skryptu – własna klasa

Autor wiadomości Listopad 7, 2010

Zawsze warto wiedzieć jakie rozwiązanie w danych okolicznościach jest szybsze. Można za każdym razem odczytywać czas z początku i z końca, potem odejmować... Ale czy to nie jest nudne i żmudne?

A może by tak raz napisać porządnie klasę, a potem się już tylko lenić:

// autor Patryk yarpo Jar, klasa Profiler pozwala na mierzenie czasu wykonania skryptu
class Profiler {

    private $start = false;
    private $stop  = false;
    private $duration = false;

    public function __construct() {
        $this->start = $this->getCurrentTime();
    }

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

    private function measureDuration() {
        if (false != $this->stop or false != $this->start) {
            $this->duration = $this->stop - $this->start;
            return $this->duration;
        }

        return false;
    }

    public function start() {
        $this->stop = false; // skoro zaczelismy, to popredni stop jest niewazny
        $this->duration = false; // nie wiemy kiedy konie, wiec skad mamy znac dlugosc?
        $this->start = $this->getCurrentTime(); // aktualny czas

        return $this->start;
    }

    public function stop() {
        $this->stop = $this->getCurrentTime();
        return $this->measureDuration();
    }

    public function getStartTime() {
        return $this->start;
    }

    public function getStopTime() {
        return $this->stop;
    }

    public function getTime() {
        // jeszcze nie obliczono trwania
        if (false === $this->duration) {
            return $this->stop();
        }

        return $this->duration;
    }
}

Jak z tego korzystać?

Bardzo prosto:

$time = new Profiler();
for($i=0; $i<10000000; $i++) {
    $tmp = array();
}
echo 'taka pętla trwała: ' . $time->stop();

Oczywiście można potem ten sam obiekt wykorzystać jeszcze kilka razy. Do tego służą metody `Profiler::start()` oraz `Profiler::stop()`. Dodatkowo można odczytać czas początku, końca oraz trwania osobno. Wedle upodobania.

Komentarze (0) Trackbacks (0)

Brak komentarzy.


Leave a comment

 

Brak trackbacków.