2010-03-16 32 views

Odpowiedz

11

Najprostszym też jest Apache Bench(tzw ab), który jest dostarczany z Apache:

  • To narzędzie wiersza polecenia
  • To może wysłać wiele żądań, równolegle, i URL
  • I zgłasza czasy, błędy, ...

Wydaje się pasować do rodzaju bardzo prostych raportów, które są prezentowane na slajdzie.
(To faktycznie ma zgłosić więcej niż)


Jeśli Twoje potrzeby ar ea nieco bardziej skomplikowane, Siege może być dobrą alternatywą.

Interesującą rzeczą w przypadku Siege jest to, że może pobrać listę adresów URL z pliku, zamiast pracować z jednym.


Ciekawostką z tych narzędzi jest to, że nie tylko pomiar czasu potrzebnego do wykonania określonego fragmentu kodu (jak można w przypadku korzystania microtime bezpośrednio w kodzie PHP), ale dostajesz cały czas wymagany do obsługi strony.

Może również porównywać więcej niż kod PHP, ponieważ działa na żądanie HTTP, a nie sam kod.

2

Możesz użyć microtime() na początku przetwarzania i na końcu wyjścia, następnie obliczyć różnicę i przekonwertować ją na sekundy, jeśli chcesz.

Zmierzy to czas wykonania strony PHP, a nie cały czas wczytywania strony, który wydaje się znajdować w twoim łączu, ale na przykład będzie mógł porównać wydajność różnych metod.

+0

... ale musisz to gdzieś nagrać, bo ma jakąkolwiek wartość. – symcbean

+0

Na pewno pytanie dotyczyło mierzenia czasu ładowania strony w celu porównania wydajności kodu. W czystym procesie debugowania, nie ma potrzeby, aby go nagrać, wystarczy wyświetlić różnicę dwóch mikrotimes w stopce strony. Do globalnego pomiaru wydajności sugeruję użycie zewnętrznego narzędzia, takiego jak ławka apache. – Benoit

1
  1. metoda pierwsza: użyj xdebug.
  2. Sposób drugi: umieścić te oświadczenia całym swoim skryptach

    $TIMER['label']=microtime(1);
    /* some code */
    $TIMER['sql1_before']=microtime(1);
    a/* some code */
    $TIMER['sql1_after']=microtime(1);
    /* some code */

, a następnie wypisz, z kodem podobnym do tego:

echo "<table border=1><tr><td>name</td><td>so far</td><td>delta</td><td>per cent</td></tr>"; 
    reset($TIMER); 
    $start=$prev=current($TIMER); 
    $total=end($TIMER)-$start; 
    foreach($TIMER as $name => $value) { 
    $sofar=round($value-$start,3); 
    $delta=round($value-$prev,3); 
    $percent=round($delta/$total*100); 
    echo "<tr><td>$name</td><td>$sofar</td><td>$delta</td><td>$percent</td></tr>"; 
    $prev=$value; 
    } 
    echo "</table>"; 

W ten sposób otrzymasz raport na temat tego, jak działa Twój kod. to działanie o nazwie profiling i zajmowanie najważniejszego miejsca w procesie optymalizacji.

9
$ time curl http://www.example.com/ 

Należy pamiętać, że czasy całego żądania, w tym opóźnienie sieci. Ale może tego chcieć chcesz?

43

Istnieje wiele sposobów, aby to zrobić. Ja osobiście byłem fanem używając microtime w następujący sposób:

// Start of code 
$time = microtime(true); // Gets microseconds 

// Rest of code 

// End of code 
echo "Time Elapsed: ".(microtime(true) - $time)."s"; 

który daje dokładność mikrosekund.

Jeśli piszesz skrypty wiersza poleceń (takie jak puzzle na Facebooku), możesz użyć czasu.

time php dancebattle.php ~/input.dat 
Win 

real 0m0.152s 
user 0m0.142s 
sys  0m0.012s 

Zapomniałem o sposobie monitorowania czasu ładowania strony (z przeglądarki). Możesz użyć karty NET z Firebug (dla Firefoxa), aby to zrobić. Pozwoli Ci to oglądać różne ładunki plików (AJAX, JS, CSS, obrazy itp.).

2

Mówisz, że chcesz mierzyć „czas ładowania strony”, który jest całkowicie różni się od

  1. czas potrzebny do generowania strony (mierzone przez wewnętrzny zegar w kodzie PHP)

  2. i odciążyć go od serwera (która jest mierzona przez ab)

Czas ładowania strony powinny obejmować czas potrzebny do analizowania HTML i aby kolejne żądania do serwera, aby pobrać wszystkie podobne treści (plików JavaScript , pliki css, obrazy itp.).

Pomiar jest dość trudny. Aby zrobić to poprawnie, musisz przesunąć całą stronę klienta po stronie logiki - upuść znacznik czasu javascript cookie, gdy użytkownik kliknie na link lub prześle formularz, a następnie na następnej stronie, używając metody onload (która uruchamia się po załadowaniu wszystkiego) porównał ten czas z bieżącym czasem. Następnie potrzebujesz metody raportowania tych danych z powrotem na serwer - możesz użyć żądania Ajax lub zapisać czas w innym pliku cookie w kolejnym żądaniu.

Należy pamiętać, że pliki wymagane przez każdego klienta będą zależeć od bieżącego stanu pamięci podręcznej przeglądarki.

Jeśli możesz wyizolować strumienie kliknięć z dzienników, możesz uzyskać dobre przybliżenie, sprawdzając odstęp czasu między żądaniem typu treści typu text/html i ostatnim żądaniem dotyczącym typu treści innego niż tekst/html. Jednak Twoje statystyki zostaną zniekształcone, jeśli użytkownicy będą jednocześnie korzystać z więcej niż jednego okna przeglądarki.

4

Spróbuj https://github.com/fotuzlab/appgati

To pozwala na zdefiniowanie czynności w czasie kodu i raportów, wykorzystanie pamięci, obciążenie serwera itp pomiędzy dwoma etapami.

Coś jak: wyjście tablica

$appgati->Step('1'); 

    // Do some code ... 

    $appgati->Step('2'); 

    $report = $appgati->Report('1', '2'); 
    print_r($report); 

Próbka:

Array 
(
    [Clock time in seconds] => 1.9502429962158 
    [Time taken in User Mode in seconds] => 0.632039 
    [Time taken in System Mode in seconds] => 0.024001 
    [Total time taken in Kernel in seconds] => 0.65604 
    [Memory limit in MB] => 128 
    [Memory usage in MB] => 18.237907409668 
    [Peak memory usage in MB] => 19.579357147217 
    [Average server load in last minute] => 0.47 
    [Maximum resident shared size in KB] => 44900 
    [Integral shared memory size] => 0 
    [Integral unshared data size] => 0 
    [Integral unshared stack size] => 
    [Number of page reclaims] => 12102 
    [Number of page faults] => 6 
    [Number of block input operations] => 192 
    [Number of block output operations] => 
    [Number of messages sent] => 0 
    [Number of messages received] => 0 
    [Number of signals received] => 0 
    [Number of voluntary context switches] => 606 
    [Number of involuntary context switches] => 99 
) 
+1

interesujące, ale nie działa na windows :-) i może niektórzy ludzie (jak ja) mają okna wokół ..: D – Bogdan

+0

Niestety ten głupi skrypt jest żonaty z Unixem. Zapytaj windows, aby spróbować szczęścia gdzie indziej :) – fotuzlab

0

Korzystanie microtime() funkcja PHP będziesz wiedzieć dokładnie, ile czasu jest potrzebne do kodu PHP do wykonania. Wykonaj poniższe kroki, aby umieścić kod PHP na swojej stronie:

Umieść poniższy kod na samym szczycie swojej strony PHP (jeśli mierzysz czas potrzebny na określoną część kodu, wstaw to tuż przed tym kodem PHP część)

<?php 
$time = microtime(); 
$time = explode(' ', $time); 
$time = $time[1] + $time[0]; 
$start = $time; 
?> 

Poniższy kod należy umieścić na samym końcu strony internetowej (lub na końcu części kodu PHP)

<?php 
$time = microtime(); 
$time = explode(' ', $time); 
$time = $time[1] + $time[0]; 
$finish = $time; 
$total_time = round(($finish - $start), 4); 
echo 'Page generated in '.$total_time.' seconds.'; 

Jeśli nie działa używać microtime (true) zamiast mikrotime()

0

Umieść poniższy kod u góry strony PHP.

<?php 
$statrttime = microtime(); 
$time = explode(' ', $statrttime); 
$time = $time[1] + $time[0]; 
$start = $time; 
?> 

Poniższy kod należy umieścić na końcu strony.

<?php 
$endtime = microtime(); 
$time = explode(' ', $endtime); 
$time = $time[1] + $time[0]; 
$finish = $time; 
$total_time = round(($finish - $start), 4); 
echo 'Page load in '.$total_time.' seconds.'; 
?> 

Uwaga: Jeśli mierzony jest czas dla określonej części kodu, wstaw ten właściwy początek i ostatnią część kodu PHP.

Powiązane problemy