[PHP] Script snelheid afhankelijk van snelheid client?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • hommer
  • Registratie: September 2000
  • Laatst online: 15-09 15:23
Ik gebruik in mijn php scripts de microtime functie om er achter te komen hoe snel ze worden uitgevoerd, de meesten wel bekend neem ik aan.
Nu valt me echter wat vreemds op; als ik de pagina op een trage machine (P166, ja ze zijn er nog ;) ) open dan krijg ik tijden te zien van 3000+ms., als ik dezelfde pagina open op een snellere machine dan wordt het netjes ~40ms.
Ik ben al eens overgestapt op output buffering (ob_start() etc), en heb de output buffer van PHP al eens fors vergroot in de ini file (128kb), maar het wil allemaal niet helpen.

Laat ik overigens wel wezen, ik lig er niet van wakker, het stoort me alleen nogal...

t.k.a. sig space t.e.a.b.


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

Hoe en waar bepaal je je parsetime? :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • hommer
  • Registratie: September 2000
  • Laatst online: 15-09 15:23
Ik dacht dat dit toch wel redelijk standaard was; begin van het script:
PHP:
1
2
$now = explode(' ',microtime());
$script_time_start = $now[0]+$now[1];

en aan 't eind:
PHP:
1
2
3
    $now = explode(' ',microtime());
    $time = ($now[0] + $now[1]) - $script_time_start;
    $time = sprintf("%.1f",($time*1000));

t.k.a. sig space t.e.a.b.


Acties:
  • 0 Henk 'm!

  • Peter
  • Registratie: Januari 2005
  • Laatst online: 13-09 17:10
Dit lijkt me geen probleem met PHP, mischien als je veel echo's gebruikt dat het kan vertragen voor op die website, maar PHP word totaal server-side uitgevoerd, en daarna als 1 pagina uitgespuugd. Dat is als je niet telkens echo gebruikt, wel te verstaan.

Mocht je telkens echo gebruiken voor de output (of enige andere vorm van output voordat het script afgerond is), overweeg dan toch om zelf een buffer systeempje te maken en alles op het einde te laten zien, dan zijn eventuele client-side vertragingen ook weg. Dat is zo ongeveer de enige logisch-klinkende oplossing die ik kan bedenken :P

Acties:
  • 0 Henk 'm!

  • hommer
  • Registratie: September 2000
  • Laatst online: 15-09 15:23
.Peter schreef op donderdag 05 mei 2005 @ 10:07:
Mocht je telkens echo gebruiken voor de output (of enige andere vorm van output voordat het script afgerond is), overweeg dan toch om zelf een buffer systeempje te maken en alles op het einde te laten zien, dan zijn eventuele client-side vertragingen ook weg. Dat is zo ongeveer de enige logisch-klinkende oplossing die ik kan bedenken :P
Mijn code barst van de echo's en gewoon html. Ik gebruik momenteel output buffering (in de illusie dat dat zou helpen, maar ook omdat ik graag redirect met header() ) en het lijkt me dat je wel redelijk wat moet doen voordat je een output buffer van 128k vol hebt. De pagina's zijn in ieder geval kleiner dan die buffer groot is.
Maar begrijp ik je nu goed dat je zegt dat echo's niet gebufferd worden? Begrijp ik dan het nut van output buffering niet?

t.k.a. sig space t.e.a.b.


Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
hommer schreef op donderdag 05 mei 2005 @ 10:24:
[...]


Mijn code barst van de echo's en gewoon html. Ik gebruik momenteel output buffering (in de illusie dat dat zou helpen, maar ook omdat ik graag redirect met header() ) en het lijkt me dat je wel redelijk wat moet doen voordat je een output buffer van 128k vol hebt. De pagina's zijn in ieder geval kleiner dan die buffer groot is.
Maar begrijp ik je nu goed dat je zegt dat echo's niet gebufferd worden? Begrijp ik dan het nut van output buffering niet?
Die echo's worden ook gewoon gebufferd :). Waar heb je de ob_flush_content() oid staan? Voor het controleren van de parsetime of erna? (Misschien dat je webserver de output stream soms enigszins locked?)

Acties:
  • 0 Henk 'm!

  • hommer
  • Registratie: September 2000
  • Laatst online: 15-09 15:23
Shadowman schreef op donderdag 05 mei 2005 @ 13:07:
[...]
Die echo's worden ook gewoon gebufferd :). Waar heb je de ob_flush_content() oid staan? Voor het controleren van de parsetime of erna? (Misschien dat je webserver de output stream soms enigszins locked?)
Ja, dat lijkt mij wel ja. De opmerking van .Peter doet me ineens vermoeden dat het bij gebruik van echo niet werkt oid. Maar goed, ik heb php.net nog eens even nagelezen en daaruit concludeer ik nog steeds dat ik het goed doe. Ik begin toch te vermoeden dat apache 'iets' (?) doet ofzo.

Helemaal aan 't eind van m'n script staat een ob_end_flush() Ik heb ook al eens geprobeerd om ob_get_contents() te gebruiken en die daarna pas te echo-en. Nogal nutteloos, maar ja als je het niet eens even probeert. (overigens nog steeds zonder gewenst resultaat....)

t.k.a. sig space t.e.a.b.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

.Peter schreef op donderdag 05 mei 2005 @ 10:07:
Dit lijkt me geen probleem met PHP, mischien als je veel echo's gebruikt dat het kan vertragen voor op die website, maar PHP word totaal server-side uitgevoerd, en daarna als 1 pagina uitgespuugd. Dat is als je niet telkens echo gebruikt, wel te verstaan.

Mocht je telkens echo gebruiken voor de output (of enige andere vorm van output voordat het script afgerond is), overweeg dan toch om zelf een buffer systeempje te maken en alles op het einde te laten zien, dan zijn eventuele client-side vertragingen ook weg. Dat is zo ongeveer de enige logisch-klinkende oplossing die ik kan bedenken :P
Wederom een post van je die ik niet in zijn geheel begrijp. :P Waarom zou het gebruik van echo moeten uitmaken in een toenemende parsetijd afhankelijk van welke client eraan hangt? :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
hommer schreef op donderdag 05 mei 2005 @ 14:07:
Ja, dat lijkt mij wel ja. De opmerking van .Peter doet me ineens vermoeden dat het bij gebruik van echo niet werkt oid. Maar goed, ik heb php.net nog eens even nagelezen en daaruit concludeer ik nog steeds dat ik het goed doe. Ik begin toch te vermoeden dat apache 'iets' (?) doet ofzo.
Apache kan de data natuurlijk niet sneller versturen dan de client de boel wil ontvangen, daar kan wel enige vertraging in de parse time ontstaan. Maar de output buffering vangt dat in theorie wel op.
Helemaal aan 't eind van m'n script staat een ob_end_flush() Ik heb ook al eens geprobeerd om ob_get_contents() te gebruiken en die daarna pas te echo-en. Nogal nutteloos, maar ja als je het niet eens even probeert. (overigens nog steeds zonder gewenst resultaat....)
Maar de vraag blijft, waar hield je op met timen? Voor of na het opsturen van het resultaat naar de gebruiker?

Acties:
  • 0 Henk 'm!

  • hommer
  • Registratie: September 2000
  • Laatst online: 15-09 15:23
ACM schreef op donderdag 05 mei 2005 @ 15:09:
Maar de vraag blijft, waar hield je op met timen? Voor of na het opsturen van het resultaat naar de gebruiker?
Voor de volledigheid; al mijn scripts houden als volgt op:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
    $now = explode(' ',microtime());
    $time = ($now[0] + $now[1]) - $script_time_start;
    $time = sprintf("%.1f",($time*1000));
?>
<script type="text/javascript" language="JavaScript">
    window.status = '<?= $_SERVER['SERVER_NAME'].", parsetime ".$time ?>ms';
</script>
</body>
<!-- zorg dat Internet Explorer ook _werkelijk_ zijn cache niet gebruikt, buggy ... browser -->
<head>
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="-1">
</head>
</html>
<?
ob_end_flush();
?>

Het leek me toch dat het niet veel later te doen was.

[ Voor 16% gewijzigd door hommer op 05-05-2005 17:59 . Reden: typo ]

t.k.a. sig space t.e.a.b.

Pagina: 1