[php] Cache > Grote array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Saven
  • Registratie: December 2006
  • Laatst online: 17:16

Saven

Administrator

Topicstarter
Hallo Tweakers,
Omdat het direct opvragen van mijn forum-index een zwaar klusje is voor de Database wil ik deze in een cache gaan stoppen.
Maar voordat ik dat doe, wil ik even zeggen dat php hem zelf ook al een soort van cached. Bij de eerste pagina laad-pogin duurt het zo'n 7 seconden voor php om de index te parsen. Na een F5 is dit nog maar 0.0123 seconden of iets in die richting.

Maargoed, probleem opgelost denk je? Nee want de database wordt mijn inziens nog steeds belast :P Denk dat het te maken heeft met de mysql cache, of de ob_start() in mijn script (deze gebruik ik met opzet, ik gebruik netjes een template engine).

Maargoed bij mijn probleem aangekomen. Ik serialize de output als het ware van de forum index. Dat is een grote array.
Vervolgens parse ik die array weer in mijn template file met foreach(). hetzelfde wat ik ook zou doen zonder de cache. Alleen is nu de array al opgeslagen in plaats van dat hij ook nog DB querys moet doen.

Dit werk volgensmij ook prima. Maar ik heb hier bij zo ook af en toe dat PHP meer dan 1 seconde nodig heeft aan parsetime.
Is dat normaal? :S

Het is een vrij grote array. Maar ook hier geldt weer voor: na een f5 is het 0.0089 seconden ofzo. Dat zal ook wel iets met de output buffer te maken hebben?

Wie o wie kan mij hier even duidelijkheid in geven :)

Ik zal meteen de array maar even posten :P Hijs groot. Dus als je hem liever weg wilt zeg dat even, dan delete ik hem.
code:
1
<snip>


Greets :)

[ Voor 94% gewijzigd door een moderator op 05-02-2009 01:05 . Reden: Huge-ass lap 'code' verwijderd... ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Saven schreef op donderdag 05 februari 2009 @ 00:55:
Ik zal meteen de array maar even posten :P Hijs groot. Dus als je hem liever weg wilt zeg dat even, dan delete ik hem.
Don't bother, dat heb ik vast voor je gedaan ;) Beperk je a.u.b. tot relevante informatie. Uitleggen dat je array groot is (en desnoods zeggen dat een var_dump 500+ regels tekst oplevert) is meer dan voldoende. We hebben geen behoefte om ons hier allemaal aan de RSI te scrollen voor je voorbeeldje ;) :X

Wat we veel liever zien is dat je stukken (relevante!!!) code post; beperk je daarbij tot de 'meat' van je functie(s) en ga daar dus ook geen 300+ regels code van posten. Met een beetje strip/hak/snoeiwerk kun je je probleem best uiteen zetten in een overzichtelijk stukje code in je post en daar hebben we véél meer aan als we je willen helpen dan de output van je array.

Wat je nog het beste kunt doen, en dat helpt jezelf ook meteen bij het troubleshooten naar je probleem, is voor jezelf een bare-essentials test-case te maken waarin je alle overbodige zaken weg laat en enkel de hoognodige code in gebruikt om je probleem te demonstreren en reproduceren. Als je dan niet tussen honderden andere regels code door hoeft te spienzen die alleen maar 'in de weg zitten' dan zie je je probleem zelf misschien al veel eerder en je kunt je test-case makkelijker verbouwen/aanpassen om te zien of X of Y wellicht werkt of een oplossing biedt. Helpt je test-case niet bij het vinden van je probleem dan heb je, als het goed is, je zaakjes dusdanig uitgekleed dat je ze zonder al te veel moeite hier kunt posten.

Je geeft aan dat er problemen zitten in de executietijd van je pagina; de ene keer duurt 't lang en dan weer niet. Heb je al eens gewoon wat 'meetpunten' er in gezet waar je (bijvoorbeeld) tussentijds een time output? Dan kun je snel en makkelijk kijken of het probleem zit in je query, de connectie naar je DB, het afhandelen van je template etc. Dat is gewoon een kwestie van goed debuggen (Debuggen: Hoe doe ik dat?). En ook als je dat doet heb je voor ons al véél meer relevante informatie om in je topicstart te melden dan "het duurt soms lang, wat zou het kunnen zijn?" ;) Je geeft aan "Denk dat het te maken heeft met de mysql cache, of...", maar dat zijn zaken die je gewoon kunt méten. En meten = weten. Dan hoef je niet te gokken naar de oorzaak maar kun je gericht naar je probleem op zoek.
Wij tweakers doen elkaar permanent de groeten ;)

[ Voor 60% gewijzigd door RobIII op 05-02-2009 01:17 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Saven
  • Registratie: December 2006
  • Laatst online: 17:16

Saven

Administrator

Topicstarter
Jep dat begrijp ik :) dat van die groeten wist ik nog niet :P
Maar het was eigenlijk meer de vraag of het normaal is dat zo'n array zoveel parsetime in beslag kan nemen :)

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Saven schreef op donderdag 05 februari 2009 @ 18:16:
Maar het was eigenlijk meer de vraag of het normaal is dat zo'n array zoveel parsetime in beslag kan nemen :)
Ik dacht dat ik toch wel duideljik had gemaakt dat we zonder relevante code weinig daarover kunnen zeggen? En dat je zoiets makkelijk zelf kunt meten? En dat je eerst moet uitsluiten of dat wel de oorzaak is? En wat versta je überhaupt onder 'de parsetijd van een array' ?

[ Voor 15% gewijzigd door RobIII op 05-02-2009 18:35 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Bender
  • Registratie: Augustus 2000
  • Laatst online: 16-09 09:15
Ik denk dat je beter het probleem kan oplossen dan er omheen te gaan klussen. Een forum moet zonder problemen geladen kunnen worden, als dat niet zo is zal de fout hoogstwaarschijnlijk aan de code liggen.

Optimaliseren is dan je oplossing.

(en met relevante code kun je wellicht nog geholpen worden ook ;))