[php] dynamische pagina cachen

Pagina: 1
Acties:

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 17-08 15:34
Ik ben aan het proberen de client mijn dynamische php pagina's te laten cachen.

Nu had ik het volgende in gedachte:

een client vraagt aan: do.php?id=een_id
Als de pagina die bij een_id hoort niet veranderd is, dan moet do.php de client doorsturen naar id.html, die vervolgens gecached kan worden.

Als de pagina wel veranderd is, dan wordt er een nieuw html bestand gemaakt met getPage($id)

Ongeveer zo:
PHP:
1
2
3
4
5
6
7
8
        function getPage($id)
        {
        ob_start();
        include("spel.php");
        $text .= ob_get_contents();
        ob_flush_clean;
        // en dan hier $text naar id.html schrijven.
        }


een_id is dus het id waarmee spel.php zijn variabelen uit de database haalt.

Het probleem waar ik tegenaan loop. is dat ik niet weet wanneer de velden die horen bij een_id in de database die ik aanroep in spel.php zijn veranderd. En dus niet weet wanneer ik opnieuw id.html moet aanmaken.


Iemand een idee?

Ik blijf er iig vrij nuchter onder....


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

bij iedere wijziging die je doorvoert (update bericht, reactie) maak je een statische html aan.. zo wordt altijd de html aangeroepen, wanneer er iets wordt veranderd genereer je de html opnieuw

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 17-08 15:34
heh, het kan altijd makkelijker :-)

mijn pagina heeft ook nog een counter, misschien moet ik die maar in een appart frame zetten, want de rest van de pagina wordt praktisch nooit geupdate.

een_id loopt echter van 0 tot 1000, dus daarom waren er nog geen statische bestanden

Ik blijf er iig vrij nuchter onder....


Verwijderd

iframepje kan ook

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

ik weet niet watvoor counter het is, maar die kan je ook in een php-file zetten welke een image terugstuurt. Dat plaatje kan je gewoon 'includen' in je html-file

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Afgezien van het feit dat niemand een counter interessant vindt, zou ik 't zo doen (makkelijkst, minst te onderhouden):

In je database bij alle dingen die gebruikt worden een TIMESTAMP bijhouden van updates. De eerste TIMESTAMP in een MySQL tabel wordt namelijk altijd op NOW() gezet bij een update of insert. Heb je verder geen omkijken naar.

Kijk vervolgens met een functietje o.i.d. of er inderdaad velden veranderd zijn (is de UNIX_TIMESTAMP () van het veld groter dan de filectime van je cache bestand? genereer het cachebestand dan opnieuw, en sla het opnieuw op. Anders cache laten zien.

De eerste bezoeker na de update is dus de beer. Die heeft dan geen gecached bestand. :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 17-08 15:34
Even terugkomend op deze topic. Ik heb 2 dagen geleden op een site het volgende geinstalleerd:

spel.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?
include("functions.php");
if(!file_exists("templates/$id.html")){

 createTemplate($id);
 header("location: $id.html");

}
else{
header("location: $id.html");
}
?>


functions.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
        function createTemplate($id)
        {
          ob_start();
          include("mkspel.php");
          $text = ob_get_contents();
          ob_end_clean();
          $fp = fopen("templates/$id.html", "w");
          //print $text;
          fwrite($fp, $text) or die("fout bij schrijven");
          fclose($fp);
        }


Nu is het dataverkeer bijna verviervoudigd!

In de eerste plaats snap ik zowieso niet waarom het dataverkeer meer kan zijn dan voorheen. De enige reden die ik kan bedenken, is dat er een extra bestand bij is gekomen die in een IFRAME wordt geladen, maar de inhoud daarvan is hetzelfde als in de oude spel.php zonder het IFRAME.

De template pagina's zijn ook keurig ge-gzip-ed

Het lijkt erop dat de template pagina's ($id.html) niet gecached worden bij de client. (Maar waarom dan meer dataverkeer???)

Voorbeeldje hier

Heeft iemand hier ideeën over?

Ik blijf er iig vrij nuchter onder....


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Omdat je een Location header stuurt. De client wordt verwezen naar een _nieuwe_ pagina, en doet dus _opnieuw_ een request die de server _opnieuw_ af moet handelen.

Je kunt volgens mij beter includen.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1