Ankündigung

Einklappen
Keine Ankündigung bisher.

Cachen von Javascript und XSL-Files vermeiden

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Cachen von Javascript und XSL-Files vermeiden

    Hallo zusammen,

    ich habe ein Web-Anwendung für ein Extranet geschrieben. Ich verwende PHP, Javascript und XSL-Dateien um die XML-Ausgabe von PHP zu formatieren.
    Nun habe ich folgendes Problem: Die XSL-Dateien und auch die Javascript-Dateien werden von jedem Browser gecached. Und zwar so, dass ein erneutes öffnen oder Reload (selbst mit Strg + F5) nicht helfen die neuen XSL-Dateien zu laden.
    Bei Strg + F5 werden lediglich die Javascript-Dateien erneut geladen.
    Die XSL-Dateien werde ich im IE7 nur dann los, wenn die temporären Dateien lösche. Im Firefox muss ich explizit den Cache leeren.

    Verwendet werden Firefox (Version 2 und 3) und IE7.

    Gibt es eine Möglichkeit den Cache zu vermeiden? Im Head meiner Seite habe ich bereits
    Code:
    <meta http-equiv="cache-control" content="no-cache">
    In der XML-Ausgabe habe ich bereits folgendes hinterlegt:

    PHP-Code:
    if(ob_get_length()) ob_clean();
    header('Expires: Fri, 25 Dec 1980 00:00:00 GMT'); // time in the past
    header('Last-Modified: ' gmdate('D, d M Y H:i:s') . 'GMT');
    header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
    header('Pragma: no-cache');
    header('Content-Type: text/xml'); 
    Doch in Javascript kenne ich keine "no-cache" Option.

    Schonmal Danke für eure Hilfe.

  • #2
    Vorab die Frage: Warum müssen die xsl und js Datei ständig neu erstellt werden. Das scheint mir nicht richtig (durchdacht) zu sein.

    Die HTTP Header, die Du bereits bei der XML-Ausgabe setzt, gelten für alles was mit HTTP ausgeliefert wird. Du kannst die Dateien also zum Beispiel auch durch HTTP jagen und die header setzen oder mod_expires - Apache HTTP Server verwenden oder oder oder.

    Kommentar


    • #3
      Also "neu erstellt" werden müssen die Dateien natürlich nur dann, wenn sich etwas ändert. Heute liefere ich Version 1 aus und nächste Woche Version 2 (zum Beispiel).

      Was meinst du mit "Dateien durch HTTP jagen"? Wenn ich per Javascript auf eine XSL-Datei verweise, werden diese doch "durch HTTP gejagt", oder?

      mod_expires verstehe ich nicht so ganz! Gibt der Apache den angegebenen Dateien dann eine Art Gültigkeit mit?

      Das "oder oder oder" verstehe ich auch nicht so ganz - deswegen frage ich hier...

      Kommentar


      • #4
        oh Mist, ich habe mich vertippt. Ich meinte "durch php" jagen.

        Aber wenn Du eine neue Version auslieferst, dann ändere doch einfach den url. Im einfachsten Fall bindest Du nicht mehr http://x.y.z/meinSkript.js ein sondern http://x.y.z/meinSkriptv2.js ein.

        mod_expires verstehe ich nicht so ganz! Gibt der Apache den angegebenen Dateien dann eine Art Gültigkeit mit?
        Genau. Apache kann auch http header setzen. Tut es bei "statischen" Dateien ja auch. Mit mod_expire kannst Du auf einige dieser HTTP Header Einfluss nehmen.

        Kommentar


        • #5
          Ah, dachte schon!
          Ja, dachte mir auch schon, dass ich einfach alles mit PHP "dynamisch" erzeuge.
          Jetzt habe ich es mit Hilfe von mod_expires gelöst. Allerdings habe ich hier noch eine Frage.
          Ich habe in den Ordner javascript und xsl meiner Page jeweils eine htaccess Datei. In diese habe ich folgendes eingetragen:
          Code:
          ExpiresActive On
          ExpiresDefault "access plus 6 hours"
          Angenommen ich lade die Seite. Ich setze in den Javascript-Dateien jede Menge Variablen auf einen bestimmten Wert und ich lade die Seite erneut genau in dem Moment wo die Dateien "ungültig" werden. Die Dateien werden erneut geladen und alle meine Javascript-Variablen sind wieder auf dem default-Wert.

          Ich bin gerade nicht so ganz sicher, ob sowas überhaupt passieren kann. Allerdings weiß ich auch nicht so ganz wie ich das testen soll.

          Ich hoffe, Ihr versteht was ich meine

          Kommentar


          • #6
            Noch was: Kennt jemand ein gutes Buch bzgl. Web-Optimierung, Performance-Messung etc. Gerne auch in Englisch.

            Ich habe nichts brauchbares gefunden.

            Kommentar


            • #7
              Wenn sich die Werte by design ändern, würde ich sie auslagern und diese "Datei" überhaupt nicht cachen.
              Wenn es um Versionierung geht, würde ich wie gesagt den url ändern und das Problem tritt überhaupt nicht auf.

              Kommentar


              • #8
                Ich habe gute Erfahrung gegen hartnäckiges "Cachen" gemacht, indem ich Bildern und Javascripten bei Bedarf einfach ein Request hinten anhänge

                <?php
                echo '<script type="text/javascript" src="meinescriptlets.js?'.time().'"></script>';
                ?>

                Klappt eigentlich tadelgelöst.

                mfg, 71470022

                Kommentar


                • #9
                  das klingt gut! Werde ich mal testen!

                  Kommentar


                  • #10
                    Damit machst Du den Cache aber komplett "aus", d.h. bei jedem Request wird das Skript neu geladen.

                    Kommentar


                    • #11
                      Ich halte es für die beste Lösung, jeder Version einen neuen Namen zu spendieren. Dann wird nur jeweils einmal geladen und dann der Cache benutzt.

                      Kommentar


                      • #12
                        Der Vorschlag wurde ja bisher gründlich ignoriert

                        Kommentar


                        • #13
                          Zitat von David Beitrag anzeigen
                          Damit machst Du den Cache aber komplett "aus", d.h. bei jedem Request wird das Skript neu geladen.
                          So ist das auch gedacht Ich mache das ja nicht für jeden Request sondern da, wo ich Cachen verhindern möchte. Danke für Deine Bestätigung, es klappt also nicht nur bei mir

                          Kommentar

                          Lädt...
                          X