[php] Online tekst printen super langzaam!

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Met PHP doe ik een aantal queries op een database, daarna print ik het resultaat met een aantal aanroepen naar de print() functie. Nu probeer ik te meten hoe lang php er over doet om de pagina te genereren. Een voorbeeldje:
code:
1
2
3
4
5
$starttime=time();
$bestand=laad_grootbestandje();
print time()-$starttime; //hoe lang duurt laden van bestand
print $bestand;
print time()-$starttime; //hoe lang duurt laden en printen


Als ik het lokaal test dan komt bij regel 3 0.01 te staan en bij regel 4 0.02.
Maar nu komt het als ik alles online zet dan regel 3 0.01 en regel 5 0.55.

Het printen van gegevens online neemt dus heel veel tijd in in vergelijking met printen lokaal. Is hier een verklaring voor? Heeft het iets te maken van de verbinding met de server of misschien de hardware of een instelling?

Ik heb het even geprobeerd op een andere server en daar gaat het een stuk sneller, regel 5 is nu 0.09 ipv 0.55. Zou het dan toch een instelling in php/apache zijn?

Wat ik eigenlijk probeer uit te vinden hoe je dat printen nu sneller kan maken, lokaal is het super snel, online super langzaam. Misschien is het een klepel en klok probleem, maar ik weet het niet meer :'(

Acties:
  • 0 Henk 'm!

  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 14:41

Salandur

Software Engineer

dit heeft waarschijnlijk met de snelheid van het netwerk te maken. als de buffer van php vol loopt gaat hij het tussen-resultaat naar de browser sturen. hoe trager dit gaat, hoe langer het printen duurt. overigens vind ik 0,5 sec voor een groot bestand nog aardig snel.

Assumptions are the mother of all fuck ups | iRacing Profiel


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Salandur schreef op donderdag 21 april 2005 @ 15:33:
dit heeft waarschijnlijk met de snelheid van het netwerk te maken. als de buffer van php vol loopt gaat hij het tussen-resultaat naar de browser sturen. hoe trager dit gaat, hoe langer het printen duurt. overigens vind ik 0,5 sec voor een groot bestand nog aardig snel.
Welk netwerk bedoel je?
Bedoel je het lokale netwerk bij m'n hoster (dus tussen mijn server enerzijds en de router e.d. van m'n hoster anderzijds) of het internet (het netwerk tussen mijn computer met browser enerzijds en de router e.d. van m'n hoster anderzijds).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Modbreak:Als je wat toe te voegen hebt aan een post, en je bent zelf de laatste poster in je topic, gebruik dan de Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/tweakers/images/icons/edit.gif knop die erbij staat. Het is op GoT ongewenst om een topic omhoog te schoppen voor er 24 uur voorbij zijn. Niet iedereen is continu op GoT aanwezig, heb dus gewoon even geduld. :)


Ik heb wat meer informatie. Als ik gebruik maak van
code:
1
ob_start("ob_gzhandler");


dan gaat alles vliegensvlug, zels online. Dus:

code:
1
2
3
4
5
6
ob_start("ob_gzhandler");
$starttime=time();
$bestand=laad_grootbestandje();
print time()-$starttime; //hoe lang duurt laden van bestand
print $bestand;
print time()-$starttime; //hoe lang duurt laden en printen


regel 5: 0.05 ipv 0.50.

Heeft iemand enig idee wat de oorzaak van het orginele probleem met de bovenstaande informatie kan zijn?

Maar ik gebruik liever niet gzip compressie, omdat de server processor niet de allerler snelste is :-(

[ Voor 26% gewijzigd door NMe op 21-04-2005 19:22 ]


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Verwijderd schreef op donderdag 21 april 2005 @ 18:58:
Heeft iemand enig idee wat de oorzaak van het orginele probleem met de bovenstaande informatie kan zijn?
Dat heeft Salander al gezegd: PHP verstuurt al spul naar je browser, terwijl hij nog bezig is met het bestand en hij kan pas verder met het bestand als de buffer leeg is. Als je output buffering gebruikt, dan heb je een grotere buffer, en dan heb je die vertragende factor dus ook niet. :)
Maar ik gebruik liever niet gzip compressie, omdat de server processor niet de allerler snelste is :-(
Waarom gebruik je het dan? Je kan ob_start() ook zonder parameters aanroepen hoor...

'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!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Ik vermoed dat het probleem is dat het php script enkele honderden kilobytes aan data genereerd. Dat gaat via localhost supersnel, maar via internet niet zo snel om te versturen. En als je dan de ob_gzhandler gebruikt, wordt de data gecomprimeerd waardoor er minder over het lijntje hoeft.

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Skaah schreef op donderdag 21 april 2005 @ 19:24:
Ik vermoed dat het probleem is dat het php script enkele honderden kilobytes aan data genereerd. Dat gaat via localhost supersnel, maar via internet niet zo snel om te versturen. En als je dan de ob_gzhandler gebruikt, wordt de data gecomprimeerd waardoor er minder over het lijntje hoeft.
Het lijkt me niet dat dat uit moet maken voor de tijd waarin een pagina gegenereerd wordt? :)

'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!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
-NMe- schreef op donderdag 21 april 2005 @ 19:34:
[...]

Het lijkt me niet dat dat uit moet maken voor de tijd waarin een pagina gegenereerd wordt? :)
Het wordt onder het genereren ook verstuurd, en daar moet het script op wachten.

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Skaah schreef op donderdag 21 april 2005 @ 19:55:
Het wordt onder het genereren ook verstuurd, en daar moet het script op wachten.
En dat gebeurt over het algemeen niet als je output buffering gebruikt, en daarbij lijkt het me niet uit te maken of je het met of zonder gzip doet. Uiteraard maakt het wel uit voor de downloadtijd, maar niet voor de generatietijd. :)

'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!

Verwijderd

Topicstarter
Aha, bedankt voor de heldere uitleg, ik snap nu dat php standaard eerst een buffer van x grote vol schrijft, als deze buffer vol is dan word deze buffer geflushd naar de client, dit process gaat door totdat de php niks meer print. Als je dan ob_start gebruikt word er maar 1 keer geflusht naar de client, dat is namelijk als php niks meer print.

Maar dan begrijp ik niet waarom 1 server het flushen sneller gaat en op de andere 10 keer zo langzamer. Dat het iets met een netwerk te maken heeft begrijp ik, maar wat precies is me nog niet helemaal duidelijk. Kan iemand dat uitleggen?

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 19-09 22:18

chem

Reist de wereld rond

Je kan ook echo gebruiken; afaik flushed die de buffer rechtstreeks.

Wat er gebeurt, is dat php stuurt de text naar apache, apache naar je client en je client zegt: meukee. Totdat de client meukee zegt voor de ontvangen data zal apache door blijven gaan (maw packet errors etc. worden door de tcp/ip stack afgevangen, totdat de data succesvol verstuurd én ontvangen is). Zodra apache de data succesvol verstuurd heeft, geeft apache weer het roer aan php over.

Je hoeft je geen zorgen te maken over de tijd die besteed wordt aan het versturen van de data. Dit wordt door je netwerkkaart en driver afgehandeld, en PHP zit lekker te wachten zonder CPU belasting.

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 14:41

Salandur

Software Engineer

het lokale netwerk kan meestal 100 Mb/s verplaatsen. Dat betekend dat er ongeveer 12 MB maximaal verplaatst kan worden waardoor enkele 100en KB's in een fractie van een seconde verplaats kunnen worden. Over het internet zitten er allerlei vertragende factoren tussen, met een snelheid van 100 KB/s op de meeste breedbandverbindingen doe je al snel een paar seconden over diezelfde 100en KB's.

Assumptions are the mother of all fuck ups | iRacing Profiel

Pagina: 1