Tanja Piranha: Service Worker und PHP Dateien

Hallo!!

Ich habe eine Frage zur Cache first Lösung von Service Workern. Wie funktioniert das mit z.B. server.php? Eine PHP ist doch per Definition eine Server Datei, heißt, würde die dann vom service worker ignoriert? Mit anderen Worten: wenn ich z.B. einen asynchronen fetch request starte, holt sich der service worker dann z.B. eine JPG aus dem Cache, während eine PHP mit demselben fetch request immer nach dem Server greift (...wäre eh das was ich gerne hätte :P )?

Danke euch!

  1. Tach!

    Ich habe eine Frage zur Cache first Lösung von Service Workern. Wie funktioniert das mit z.B. server.php?

    Genauso wie mit allen anderen Ressourcen. Ob die auf dem Server mit PHP erzeugt werden oder als statische Datei vorliegen, ist vom Client aus gesehen nicht weiter relevant.

    Eine PHP ist doch per Definition eine Server Datei, heißt, würde die dann vom service worker ignoriert?

    Es gibt keine Definition für "PHPs", wie du sie nennst, es gibt nur Konfigurationen auf dem Webserver, was mit bestimmten Dateien passieren soll. Für den Client und den Service Worker spielt es aber keine Rolle, was auf dem Server vonstatten geht.

    Es kommt ganz darauf an, wie du deinen Service Worker beauftragst, was er in den Cache nehmen soll und was nicht.

    dedlfix.

    1. Lieber dedlfix,

      Es gibt keine Definition für "PHPs", wie du sie nennst, es gibt nur Konfigurationen auf dem Webserver, was mit bestimmten Dateien passieren soll.

      genauer: Ein PHP-Script kann dem Client (Browser) mit den üblichen HTTP-Headern mitteilen, wie er in Sachen Caching mit dem jeweiligen Dokument verfahren soll. Mehr nicht, denn wie der Client damit dann verfährt, entscheidet er selbst:

      Es kommt ganz darauf an, wie du deinen Service Worker beauftragst, was er in den Cache nehmen soll und was nicht.

      Genau so ist es.

      Liebe Grüße

      Felix Riesterer

  2. Hallo Tanja,

    in einem Serviceworker implementierst Du einen Handler für ein fetch-Event des ServiceWorkerGlobalScope, und dort programmierst Du, wie das Caching ablaufen soll.

    Wenn deine Application serverseitigen PHP Code hat, solltest Du genau überlegen, welchen Nutzen ein Serviceworker für Dich hat. Einfaches Caching von Ressourcen macht der Browsercache besser alleine.

    Aktives Caching mittels CacheStorage API ist vor allen dann interessant, wenn die Anwendung offlinefähig sein soll, d.h. der Serviceworker cached und liefert nur die Dateien, die für einen Offline-Betrieb gebraucht werden. Eine PHP Schicht ist offline prinzipiell nicht verfügbar.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Einfaches Caching von Ressourcen macht der Browsercache besser alleine.

      Kommt darauf an. Ich habe mit den Netztools die Erfahrung gemacht, dass manche Hostnamen, Domains oder IP-Adessen plötzlich (und zeitlich begrenzt) ein sehr großes Interesse hervorrufen und von mehreren Clients aus aufgerufen werden.

      Weil einige der (externen) Abfragen recht lange dauern und also die TCP-Verbindungen zum Client deshalb nicht gecancelt werden können cache ich da serverseitig.

      1. Hallo Raketendüsentrieb,

        gut, deine Netztools sind Durchlauferhitzer und -verbesserer anderer Netztools, und da ergibt ein Servercache schon Sinn. Wobei 12h vermutlich übertrieben ist; eine plätzliche Flut von Anfragen (sagen wir mal: 5 pro Minute) kannst Du vermutlich schon mit einem 10min Cache ableiten. Ich sehe da einen expires Header, d.h. Du machst das mit mod_cache?

        Da diese Netztools-Abfragen aber für das CacheStorage API komplett ungeeignet sind, ist das ein ganz anderes Thema.

        Rolf

        --
        sumpsi - posui - obstruxi
        1. Hallo Raketendüsentrieb, Ich sehe da einen expires Header, d.h. Du machst das mit mod_cache?

          Nö. Ich war zu faul zu überprüfen, ob mein Hoster mod_chache geladen hat. Ich mach das mit meiner uralten Cachetechnik, die bei Verfügbarkeit und Empfangsbereitschaft gleich die gezippten Daten „raushaut“:

              if ( isCache( $cachefile ) ) {
                  if (  ( ! isset ( $_SERVER['HTTP_ACCEPT_ENCODING'] ) ) or false===strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') ) {
                      header( 'Last-Modified: ' . date( 'r' , filemtime( $cachefile ) ) );
                      header( 'Expires: '.date('r', date('U') + (CACHE_TIME_LIMIT * 60) ) );
                      header( 'Cache-Control: max-age='.( CACHE_TIME_LIMIT * 60 ) );
                      echo gzdecode ( file_get_contents( $cachefile ) );
                      exit;
                  } else {
                      header( 'Vary: Accept-Encoding' );
                      header( 'Content-Encoding: gzip' );
                      header( 'Last-Modified: ' . date( 'r' , filemtime( $cachefile ) ) );
                      header( 'Expires: ' . date( 'r', date( 'U' ) + ( CACHE_TIME_LIMIT * 60 ) ) );
                      header( 'Cache-Control: max-age=' . ( CACHE_TIME_LIMIT * 60 ) );
                      readfile( $cachefile );
                      exit;
                  }
              }
          

          Vorteil: Serverseitiges und browserseitiges Cachelimit stimmen überein...

          1. mod_chache

            mod_headers