Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czas generowania strony
Forum PHP.pl > Forum > Przedszkole
Jarod
Gdzieś na forum ostatnio widziałem posta dotyczącego pobierania czasu generowania strony. Problem dotyczył innych wartości przy odświeżaniu, tzn ten sam skrypt za każdym razem (z wykorzystaniem microtime() ) wskazywał inny czas. Nie mogę znaleźć tego postu. Jeśli ktoś byłby tak miły i mógłby go wskazać ewentualnie podsunąć pomysł na rozwiązanie problemu będę wdzięczny.

Pozdrawiam
bogdan89
ja bym to zrobił tak:

  1. <?php
  2. $start_time = microtime();
  3.  
  4. //skrypty php.
  5.  
  6. $stop_time = microtime();
  7. $czas_generowania = $stop_time - $start_time;
  8. echo 'Czas generowania strony: '.$czas_generowania.' sek.';
  9. ?>


o to chodzi?
Jarod
Cytat(bogdan89 @ 23.12.2006, 18:12:25 ) *
ja bym to zrobił tak:

  1. <?php
  2. $start_time = microtime();
  3.  
  4. //skrypty php.
  5.  
  6. $stop_time = microtime();
  7. $czas_generowania = $stop_time - $start_time;
  8. echo 'Czas generowania strony: '.$czas_generowania.' sek.';
  9. ?>


o to chodzi?


Dokładnie tak robie tylko, że wynik zaokrąglam do 5 miejsc po przecinku. Ale odśwież sobie stronę prę razy to zobaczysz, że za każdym razem jest inny czas. Zastanawiam się czym to jest spowodowane?
bogdan89
czas wykonywania skryptow zalezy chyba od procesora serwera... jezeli jest on bardzo obciążony to wykonuje operacje wolniej, a jezeli nie jest obciążony to wykonuje je szybciej...
to jeszcze zalezy od ilosci operacji zawartych w skrypcie.

ale róznice są okiem człowieka niezauważalne.
Jarod
Cytat(bogdan89 @ 23.12.2006, 18:59:14 ) *
czas wykonywania skryptow zalezy chyba od procesora serwera... jezeli jest on bardzo obciążony to wykonuje operacje wolniej, a jezeli nie jest obciążony to wykonuje je szybciej...
to jeszcze zalezy od ilosci operacji zawartych w skrypcie.

ale róznice są okiem człowieka niezauważalne.

Napisałem prosty skrypt. Pobiera i wyświetla czas generowania skryptu i nic więcej. Odpalam na localhost i odświeżam strone - za każdym razem wynik jest inny, większy, mniejszy - wygląda na losowy czas.. Dziwne.. :/
legorek
Bo jak odpalasz to na swoim kompie masz jeszcze mnóstwo innych procesów korzystających z zasobów procesora, pamięci itd. Trudno, żeby za każdym razem była precyzja rzędu 1000cznych części sekund. Zrób jakieś bardziej skomplikowane zadanie (np algorytm wyostrzania dużego obrazka) i będziesz widział, że strona sie będzie wykołować np w przedziale 15-16s.
fx69
ja uzywam tego:

  1. <?php
  2. function get_microtime() {
  3.  list($milis, $s) = explode(" ",microtime());
  4.  return ((float)$milis + (float)$s);
  5.  }
  6. ?>


wywolujesz funkcje na poczatku strony i na koncu. potem odejmujesz i mozesz substr uciac.
LBO
Różnice w czasie wykonywania skryptów - rzędu tysięcznych sekundy - są jak bardziej normalne. Zależy to od wielu czynników takich jak maszyna, serwer, ilość wykonanych operacji. Czasy nigdy nie będą takie same.
Problem jest gdy wahania tych czasów są znaczne (chociaż i tak to nigdy nie jest wina samego php), a nie wykorzystywane są żadne mechanizmy cache'owania czy optymalizacji. Wtedy przyczynę trzeba znaleźć i zlikwidować.
bogdan89
spoko, wiem juz jak zrobic taki skrypt ktory to oblicza, wiem od czego zalezy czas generowania php, ale interesuje mnie jeszcze jedna sprawa: czasami ten czas u mnie jest na minusie biggrin.gif czy to jest normalne? i jak takie zjawisko wytłumaczyć?
Jarod
Cytat(bogdan89 @ 26.12.2006, 10:09:07 ) *
spoko, wiem juz jak zrobic taki skrypt ktory to oblicza, wiem od czego zalezy czas generowania php, ale interesuje mnie jeszcze jedna sprawa: czasami ten czas u mnie jest na minusie biggrin.gif czy to jest normalne?

Nie.
Cytat(bogdan89 @ 26.12.2006, 10:09:07 ) *
i jak takie zjawisko wytłumaczyć?

Błąd w kodzie.
bogdan89
Cytat(J4r0d @ 26.12.2006, 10:23:21 ) *
Błąd w kodzie.


przeciez skrypt masz dokladnie taki jak moj, tyle, ze dodajesz zaokrąglenie do 5 miejsc po przecinku, a ja nie...
Jarod
Cytat(bogdan89 @ 26.12.2006, 13:34:25 ) *
przeciez skrypt masz dokladnie taki jak moj, tyle, ze dodajesz zaokrąglenie do 5 miejsc po przecinku, a ja nie...


Pokaż swoją klase i pokaż jak ją wywołujesz. Mój nigdy nie pokazuje czasu ujemnego..
bogdan89
no zobacz #2 post w tym temacie,
a pod nim jest Twoja odpowiedź.

czasem daje wynik ujemny... no i wlasnie to mnie dziwi... na serwerach nazwa.pl
Jarod
Cytat(bogdan89 @ 26.12.2006, 13:54:41 ) *
no zobacz #2 post w tym temacie,
a pod nim jest Twoja odpowiedź.

czasem daje wynik ujemny... no i wlasnie to mnie dziwi... na serwerach nazwa.pl

Przepraszam, wprowadziłem Cię w błąd pisząc, że dokładnie tak samo robie. Bo nie robię tak samo. Mam taką klase:
  1. <?php
  2. class Debugger
  3. {
  4.  
  5. private $_fTimeStart = null;
  6.  
  7. public function __construct()
  8. {
  9. $sTimeStart = explode(' ', microtime());
  10. $this->_fTimeStart = (float)($sTimeStart[1] + $sTimeStart[0]);
  11. }
  12.  
  13. static function getTimeOfResponse()
  14. {
  15. $sTimeEnd = explode(' ', microtime());
  16.  
  17. return round((float)($sTimeEnd[1] + $sTimeEnd[0]) - $this->_fTimeStart, 4);
  18. }
  19. }
  20. ?>


Jak już chcesz używać
  1. <?php
  2. $start_time = microtime();
  3. ?>
to pisz
  1. <?php
  2. $start_time = microtime(1);
  3. ?>
wtedy przelicza na sekundy.. Wtedy nie powinny pojawiać się ujemne wyniki. Zobacz jak zrobiłem w klasie.
bogdan89
ok. juz kapuje...
wielkie dzięki
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.