[PHP] Script timer onnauwkeurig?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik werk aan een Content Management Systeem dat behoorlijk uitgebreid is. Om te kunnen meten of bepaalde efficientieverbeteringen werken (dus of het script sneller is geworden) loopt er een timer mee. Die timer begint te lopen als het script start en stopt op de laatste regel, dus alle uitgevoerde code wordt meegenomen in de telling.

Nu heb ik sinds kort een cache toegevoegd die gegenereerde pagina's opslaat zodat een pagina in principe maar een keer geparsed hoeft te worden. Omdat sommige pagina's een grootte van 400kb hebben (het is een online shop met veel producten) en dus redelijk wat parsing tijd vragen verwachtte ik redelijke verschillen.

Lokaal was dat inderdaad waar, sommige pagina's laadden 10 tot 30 keer sneller, maar toen ik de site online zette waren de verschillen minimaal. Ik weet dat de pagina's uit het cache gehaald worden en er dus enorm veel parsingtime bespaard wordt, dus daar klopt iets niet.

Toen begon ik me af te vragen of het niet door de grootte van de pagina's kan komen, oftewel dat de scripttimer de tijd die het versturen van de pagina kost ook meeteld. Dat zou opzich een redelijke conclusie zijn ware het niet dat de tijd onderaan de pagina staat, en daar dus al aan toegevoegd moet zijn als de pagina verstuurd wordt, tenzij... etc etc

Mijn vraag is dus: weet iemand of het mogelijk is dat de tijd voor het verzenden van de pagina deel uitmaakt van de totale tijd die mijn timer geeft?

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Het begin van de page kan best verstuurd worden voordat het einde is gegenereerd.
Heb je gzip compressie aanstaan? Zo ja, dan wordt wel de page pas verzonden als het script af is. Zo nee, waarom niet?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
OlafvdSpek schreef op 17 October 2003 @ 15:06:
Het begin van de page kan best verstuurd worden voordat het einde is gegenereerd.
De grap is juist dat de pagina's niet worden gegenereerd, maar uit de cache komen. Ze worden geladen uit het bestand en in 1 keer geoutput:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
    function start($id, $group = 'default')
    {
        $data = $this->get($id, $group); // haal cachebestand op
        if ($data !== false) { // bestand gevonden, weergeven en script niet uitvoeren
            echo($data);
            return true;
        } else { // bestand niet gevonden, start met bufferen output (script wordt uitgevoerd)
            ob_start();
            ob_implicit_flush(false);
            return false;
        }
    }
Heb je gzip compressie aanstaan? Zo ja, dan wordt wel de page pas verzonden als het script af is. Zo nee, waarom niet?
oa door wat ik hier gelezen heb: phpbuilder

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Verwijderd schreef op 17 October 2003 @ 15:16:
De grap is juist dat de pagina's niet worden gegenereerd, maar uit de cache komen. Ze worden geladen uit het bestand en in 1 keer geoutput
Plak je de tijd erachter voor of nadat je begint met versturen?
oa door wat ik hier gelezen heb: phpbuilder
Moeten de pagina's gecached worden dan?

Acties:
  • 0 Henk 'm!

  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 08:38
Sowieso misschien wel handig: als je de parse-tijd van een pagina wilt weten, kun je beter eerst alles in een outputbuffer opslaan en voor het outputten de tijd opslaan. Zo kom je niet in de knoei met te vroeg verstuurde code:
PHP:
1
2
3
4
5
6
7
8
9
<?
ob_start();
save_start_time();

// hier staat de complete code van je site, inclusief echo's e.d.

save_end_time();
ob_end_flush();
?>


edit:
Ik vraag me net af of het versturen van de data eigenlijk wel _kan_ gebeuren voordat het script geparsed is, zonder dat je flush()'ed... Zoniet, beschouw bovenstaande maar als ongepost.

[ Voor 23% gewijzigd door Limhes op 17-10-2003 20:17 ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

In principe kunnen er er delen verzonden worden, voor het script klaar is met werken.
Ik betwijfel echter of de parsingstijd daardoor beinvloed wordt.

Een eventuele verklaring is dat je lokaal met een relatief slome machine werkt, die relatief laag belast wordt, waardoor verschillen door cacheing goed opvallen.
Terwijl de machine "onsite" veel sneller is (en evt ook zwaarder belast wordt). Waardoor het verschil niet zo opvalt.

Als je wilt weten wat voor machine dat is, dan zou je de inhoud van /proc/cpuinfo kunnen proberen te bekijken.

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
ACM schreef op 17 October 2003 @ 21:19:
In principe kunnen er er delen verzonden worden, voor het script klaar is met werken.
Ik betwijfel echter of de parsingstijd daardoor beinvloed wordt.
Als de TCP buffer vol zit neem ik aan dat de thread geblocked wordt. Lokaal heb je daar minder last van.

Acties:
  • 0 Henk 'm!

  • sjokki
  • Registratie: Juli 2002
  • Niet online
Met Xdebug kan je redelijk nauwkeurig zien welke functies veel tijd kosten. Zie de voorbeelden op http://www.xdebug.org/docs-profiling.php .

Als implicit_flush uit staat in php.ini (default) wordt de output pas verstuurd nadat het script klaar is.

Acties:
  • 0 Henk 'm!

  • pyro_1979
  • Registratie: Oktober 2003
  • Laatst online: 03-01-2020
Limhes schreef op 17 October 2003 @ 20:15:
Sowieso misschien wel handig: als je de parse-tijd van een pagina wilt weten, kun je beter eerst alles in een outputbuffer opslaan en voor het outputten de tijd opslaan. Zo kom je niet in de knoei met te vroeg verstuurde code:
PHP:
1
2
3
4
5
6
7
8
9
<?
ob_start();
save_start_time();

// hier staat de complete code van je site, inclusief echo's e.d.

save_end_time();
ob_end_flush();
?>


edit:
Ik vraag me net af of het versturen van de data eigenlijk wel _kan_ gebeuren voordat het script geparsed is, zonder dat je flush()'ed... Zoniet, beschouw bovenstaande maar als ongepost.
Even een vraagje tussendoor...
Werkt het ook als je het volgende hebt??

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
ob_start();
save_start_time();

// hier nog wat php-code

?>

<!-- HTML-code -->

<?php

// hier eventueel nog wat php-code

?>

<!-- Nog meer HTML -->

<?php

save_end_time();
ob_end_flush();
?>

"Ik denk dus ik besta" - Descartes


Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 17-09 16:59

Johnny

ondergewaardeerde internetguru

Als je een pagina uit het cache ophaalt, dan is de timer ouptut toch ook gecached?

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.

Pagina: 1