tag:forum.selfhtml.org,2005:/self Service Worker und PHP Dateien – SELFHTML-Forum 2021-11-23T09:00:20Z https://forum.selfhtml.org/self/2021/nov/22/service-worker-und-php-dateien/1793820#m1793820 Tanja Piranha 2021-11-22T12:21:40Z 2021-11-22T12:21:40Z Service Worker und PHP Dateien <p>Hallo!!</p> <p>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 )?</p> <p>Danke euch!</p> https://forum.selfhtml.org/self/2021/nov/22/service-worker-und-php-dateien/1793823#m1793823 dedlfix 2021-11-22T12:35:31Z 2021-11-22T12:35:31Z Service Worker und PHP Dateien <p>Tach!</p> <blockquote> <p>Ich habe eine Frage zur Cache first Lösung von Service Workern. Wie funktioniert das mit z.B. server.php?</p> </blockquote> <p>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.</p> <blockquote> <p>Eine PHP ist doch per Definition eine Server Datei, heißt, würde die dann vom service worker ignoriert?</p> </blockquote> <p>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.</p> <p>Es kommt ganz darauf an, wie du deinen Service Worker beauftragst, was er in den Cache nehmen soll und was nicht.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2021/nov/22/service-worker-und-php-dateien/1793831#m1793831 Rolf B 2021-11-22T15:39:44Z 2021-11-22T15:39:44Z Service Worker und PHP Dateien <p>Hallo Tanja,</p> <p>in einem Serviceworker implementierst Du einen Handler für ein <a href="https://wiki.selfhtml.org/wiki/JavaScript/Objekte/ServiceWorkerGlobalScope#fetch" rel="nofollow noopener noreferrer">fetch-Event des ServiceWorkerGlobalScope</a>, und dort programmierst Du, wie das Caching ablaufen soll.</p> <p>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.</p> <p>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.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/nov/22/service-worker-und-php-dateien/1793829#m1793829 Felix Riesterer https://felix-riesterer.de 2021-11-22T15:28:46Z 2021-11-22T15:28:46Z Service Worker und PHP Dateien <p>Lieber dedlfix,</p> <blockquote> <p>Es gibt keine Definition für "PHPs", wie du sie nennst, es gibt nur Konfigurationen auf dem Webserver, was mit bestimmten Dateien passieren soll.</p> </blockquote> <p>genauer: Ein PHP-Script kann dem Client (Browser) mit den <a href="https://wiki.selfhtml.org/wiki/HTTP/Header/Cache-Control" rel="nofollow noopener noreferrer">üblichen HTTP-Headern</a> 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:</p> <blockquote> <p>Es kommt ganz darauf an, wie du deinen Service Worker beauftragst, was er in den Cache nehmen soll und was nicht.</p> </blockquote> <p>Genau so ist es.</p> <p>Liebe Grüße</p> <p>Felix Riesterer</p> https://forum.selfhtml.org/self/2021/nov/22/service-worker-und-php-dateien/1793839#m1793839 Raketendüsentrieb 2021-11-22T17:19:40Z 2021-11-22T17:19:40Z Service Worker und PHP Dateien <blockquote> <p>Einfaches Caching von Ressourcen macht der Browsercache besser alleine.</p> </blockquote> <p>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.</p> <p>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.</p> https://forum.selfhtml.org/self/2021/nov/22/service-worker-und-php-dateien/1793840#m1793840 Rolf B 2021-11-22T17:33:40Z 2021-11-22T17:33:40Z Service Worker und PHP Dateien <p>Hallo Raketendüsentrieb,</p> <p>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?</p> <p>Da diese Netztools-Abfragen aber für das CacheStorage API komplett ungeeignet sind, ist das ein ganz anderes Thema.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/nov/22/service-worker-und-php-dateien/1793851#m1793851 Raketendüsentrieb 2021-11-23T08:58:04Z 2021-11-23T08:58:04Z Service Worker und PHP Dateien <blockquote> <p>Hallo Raketendüsentrieb, Ich sehe da einen expires Header, d.h. Du machst das mit mod_cache?</p> </blockquote> <p>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“:</p> <pre><code class="block language-php"> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">isCache</span><span class="token punctuation">(</span> <span class="token variable">$cachefile</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token operator">!</span> <span class="token keyword">isset</span> <span class="token punctuation">(</span> <span class="token variable">$_SERVER</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'HTTP_ACCEPT_ENCODING'</span><span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token keyword">or</span> <span class="token constant boolean">false</span><span class="token operator">===</span><span class="token function">strpos</span><span class="token punctuation">(</span><span class="token variable">$_SERVER</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'HTTP_ACCEPT_ENCODING'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'gzip'</span><span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">header</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'Last-Modified: '</span> <span class="token operator">.</span> <span class="token function">date</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'r'</span> <span class="token punctuation">,</span> <span class="token function">filemtime</span><span class="token punctuation">(</span> <span class="token variable">$cachefile</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">header</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'Expires: '</span><span class="token operator">.</span><span class="token function">date</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'r'</span><span class="token punctuation">,</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'U'</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span><span class="token constant">CACHE_TIME_LIMIT</span> <span class="token operator">*</span> <span class="token number">60</span><span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">header</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'Cache-Control: max-age='</span><span class="token operator">.</span><span class="token punctuation">(</span> <span class="token constant">CACHE_TIME_LIMIT</span> <span class="token operator">*</span> <span class="token number">60</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token function">gzdecode</span> <span class="token punctuation">(</span> <span class="token function">file_get_contents</span><span class="token punctuation">(</span> <span class="token variable">$cachefile</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">exit</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token function">header</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'Vary: Accept-Encoding'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">header</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'Content-Encoding: gzip'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">header</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'Last-Modified: '</span> <span class="token operator">.</span> <span class="token function">date</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'r'</span> <span class="token punctuation">,</span> <span class="token function">filemtime</span><span class="token punctuation">(</span> <span class="token variable">$cachefile</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">header</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'Expires: '</span> <span class="token operator">.</span> <span class="token function">date</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'r'</span><span class="token punctuation">,</span> <span class="token function">date</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'U'</span> <span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span> <span class="token constant">CACHE_TIME_LIMIT</span> <span class="token operator">*</span> <span class="token number">60</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">header</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'Cache-Control: max-age='</span> <span class="token operator">.</span> <span class="token punctuation">(</span> <span class="token constant">CACHE_TIME_LIMIT</span> <span class="token operator">*</span> <span class="token number">60</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">readfile</span><span class="token punctuation">(</span> <span class="token variable">$cachefile</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">exit</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <p>Vorteil: Serverseitiges und browserseitiges Cachelimit stimmen überein...</p> https://forum.selfhtml.org/self/2021/nov/22/service-worker-und-php-dateien/1793852#m1793852 Raketendüsentrieb 2021-11-23T09:00:20Z 2021-11-23T09:00:20Z Service Worker und PHP Dateien <blockquote> <p>mod_chache</p> </blockquote> <p>mod_headers</p>