{"id":1832,"date":"2018-01-11T12:23:27","date_gmt":"2018-01-11T11:23:27","guid":{"rendered":"https:\/\/vielhuber.de\/?p=1832"},"modified":"2018-01-11T12:31:51","modified_gmt":"2018-01-11T11:31:51","slug":"pragmatische-cache-invalidierung","status":"publish","type":"post","link":"https:\/\/vielhuber.de\/blog\/pragmatische-cache-invalidierung\/","title":{"rendered":"Pragmatische Cache-Invalidierung"},"content":{"rendered":"<p>Server-Side Rendering geh\u00f6ren mittlerweile zum Standardrepertoire von Webseiten und -anwendungen. Auch Browser wie Google Chrome neigen dazu, m\u00f6glichst viel zu Cachen, um die Ladezeiten von weiteren Aufrufen zu minimieren. Die Cache-Invalidierung von CSS-\/JS-\/Bild-Dateien kann mit Hilfe von <a href=\"https:\/\/github.com\/apache\/incubator-pagespeed-mod\" target=\"_blank\" rel=\"noopener\">mod_pagespeed<\/a>, <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Expires\" target=\"_blank\" rel=\"noopener\">Expires<\/a>\/<a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Cache-Control\" target=\"_blank\" rel=\"noopener\">Cache control<\/a> header, einem <a href=\"https:\/\/developer.mozilla.org\/de\/docs\/Web\/HTML\/Using_the_application_cache\" target=\"_blank\" rel=\"noopener\">Cache Manifest<\/a>\u00a0oder aber sehr pragmatisch und direkt durch individuelle Parameter hinter dem Dateinamen gel\u00f6st werden.<\/p>\n<p><!--more--><\/p>\n<p>Dabei gibt es verschiedene Strategien, wann eine Datei neu geladen werden soll oder nicht.<\/p>\n<p>Die einfachste Variante ist das Neuladen bei jedem Request. Dazu h\u00e4ngt man einfach eine zuf\u00e4llige Zeichenkette an die einzubettende Datei an und erzwingt dadurch das Neuladen (hier am Beispiel einer Bilddatei):<\/p>\n<p class=\"githubgist\" data-gist-file=\"1.html\">2e634273f316c54b39828f057f7c7d9c<\/p>\n<p>Ist das zu viel des Guten und will stattdessen nur Neuladen, wenn sich die Datei ver\u00e4ndert hat, nutzt man das Datum der letzten Datei\u00e4nderung (hier am Beispiel einer JS-Datei):<\/p>\n<p class=\"githubgist\" data-gist-file=\"2.html\">2e634273f316c54b39828f057f7c7d9c<\/p>\n<p>Nutzt man eine Versionsverwaltung wie <a href=\"https:\/\/git-scm.com\/\" target=\"_blank\" rel=\"noopener\">Git<\/a>, kann man sich auch an dem eindeutigen Hash des letzten Commits (die verk\u00fcrzte Version reicht) bedienen (hier am Beispiel einer CSS-Datei):<\/p>\n<p class=\"githubgist\" data-gist-file=\"3.html\">2e634273f316c54b39828f057f7c7d9c<\/p>\n<p><a href=\"https:\/\/wordpress.org\/\" target=\"_blank\" rel=\"noopener\">WordPress<\/a> h\u00e4ngt standardm\u00e4\u00dfig die aktuelle WordPress-Version an alle per <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_style\/\" target=\"_blank\" rel=\"noopener\">enqueue_style<\/a> und <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_script\/\" target=\"_blank\" rel=\"noopener\">enqueue_script<\/a> eingebundenen Dateien an. Dieses Verhalten kann man entweder direkt in den Funktionsaufrufen als Argument ver\u00e4ndern, oder aber man hookt sich global ein und wendet eines der oberen Verfahren an:<\/p>\n<p class=\"githubgist\" data-gist-file=\"functions.php\">2e634273f316c54b39828f057f7c7d9c<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Server-Side Rendering geh\u00f6ren mittlerweile zum Standardrepertoire von Webseiten und -anwendungen. Auch Browser wie Google Chrome neigen dazu, m\u00f6glichst viel zu Cachen, um die Ladezeiten von weiteren Aufrufen zu minimieren. Die Cache-Invalidierung von CSS-\/JS-\/Bild-Dateien kann mit Hilfe von mod_pagespeed, Expires\/Cache control header, einem Cache Manifest\u00a0oder aber sehr pragmatisch und direkt durch individuelle Parameter hinter dem Dateinamen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"gtbabel_prevent_lngs":"","gtbabel_alt_lng":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-1832","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-blog"},"acf":[],"yoast_head":"<title>Pragmatische Cache-Invalidierung &#060; Vielhuber David<\/title>\n<meta name=\"description\" content=\"Server-Side Rendering geh\u00f6ren mittlerweile zum Standardrepertoire von Webseiten und -anwendungen. Auch Browser wie Google Chrome neigen dazu, m\u00f6glic...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vielhuber.de\/blog\/pragmatische-cache-invalidierung\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pragmatische Cache-Invalidierung &#060; Vielhuber David\" \/>\n<meta property=\"og:description\" content=\"Server-Side Rendering geh\u00f6ren mittlerweile zum Standardrepertoire von Webseiten und -anwendungen. Auch Browser wie Google Chrome neigen dazu, m\u00f6glichst\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vielhuber.de\/blog\/pragmatische-cache-invalidierung\/\" \/>\n<meta property=\"og:site_name\" content=\"Vielhuber David\" \/>\n<meta property=\"article:published_time\" content=\"2018-01-11T11:23:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-01-11T11:31:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"700\" \/>\n\t<meta property=\"og:image:height\" content=\"552\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"David\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@vielhuber\" \/>\n<meta name=\"twitter:site\" content=\"@vielhuber\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"David\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"1\u00a0Minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/pragmatische-cache-invalidierung\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/pragmatische-cache-invalidierung\\\/\"},\"author\":{\"name\":\"David\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\"},\"headline\":\"Pragmatische Cache-Invalidierung\",\"datePublished\":\"2018-01-11T11:23:27+00:00\",\"dateModified\":\"2018-01-11T11:31:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/pragmatische-cache-invalidierung\\\/\"},\"wordCount\":255,\"publisher\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\"},\"articleSection\":[\"Blog\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/pragmatische-cache-invalidierung\\\/\",\"url\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/pragmatische-cache-invalidierung\\\/\",\"name\":\"Pragmatische Cache-Invalidierung &#060; Vielhuber David\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#website\"},\"datePublished\":\"2018-01-11T11:23:27+00:00\",\"dateModified\":\"2018-01-11T11:31:51+00:00\",\"description\":\"Server-Side Rendering geh\u00f6ren mittlerweile zum Standardrepertoire von Webseiten und -anwendungen. Auch Browser wie Google Chrome neigen dazu, m\u00f6glichst\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/pragmatische-cache-invalidierung\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vielhuber.de\\\/blog\\\/pragmatische-cache-invalidierung\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/pragmatische-cache-invalidierung\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vielhuber.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pragmatische Cache-Invalidierung\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#website\",\"url\":\"https:\\\/\\\/vielhuber.de\\\/\",\"name\":\"Vielhuber David\",\"description\":\"Full-Stack Developer\",\"publisher\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vielhuber.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\",\"name\":\"David\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\",\"url\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\",\"contentUrl\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\",\"width\":700,\"height\":552,\"caption\":\"David\"},\"logo\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/vielhuber\"]}]}<\/script>","yoast_head_json":{"title":"Pragmatische Cache-Invalidierung &#060; Vielhuber David","description":"Server-Side Rendering geh\u00f6ren mittlerweile zum Standardrepertoire von Webseiten und -anwendungen. Auch Browser wie Google Chrome neigen dazu, m\u00f6glic...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vielhuber.de\/blog\/pragmatische-cache-invalidierung\/","og_locale":"de_DE","og_type":"article","og_title":"Pragmatische Cache-Invalidierung &#060; Vielhuber David","og_description":"Server-Side Rendering geh\u00f6ren mittlerweile zum Standardrepertoire von Webseiten und -anwendungen. Auch Browser wie Google Chrome neigen dazu, m\u00f6glichst","og_url":"https:\/\/vielhuber.de\/blog\/pragmatische-cache-invalidierung\/","og_site_name":"Vielhuber David","article_published_time":"2018-01-11T11:23:27+00:00","article_modified_time":"2018-01-11T11:31:51+00:00","og_image":[{"width":700,"height":552,"url":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","type":"image\/jpeg"}],"author":"David","twitter_card":"summary_large_image","twitter_creator":"@vielhuber","twitter_site":"@vielhuber","twitter_misc":{"Verfasst von":"David","Gesch\u00e4tzte Lesezeit":"1\u00a0Minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vielhuber.de\/blog\/pragmatische-cache-invalidierung\/#article","isPartOf":{"@id":"https:\/\/vielhuber.de\/blog\/pragmatische-cache-invalidierung\/"},"author":{"name":"David","@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef"},"headline":"Pragmatische Cache-Invalidierung","datePublished":"2018-01-11T11:23:27+00:00","dateModified":"2018-01-11T11:31:51+00:00","mainEntityOfPage":{"@id":"https:\/\/vielhuber.de\/blog\/pragmatische-cache-invalidierung\/"},"wordCount":255,"publisher":{"@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef"},"articleSection":["Blog"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/vielhuber.de\/blog\/pragmatische-cache-invalidierung\/","url":"https:\/\/vielhuber.de\/blog\/pragmatische-cache-invalidierung\/","name":"Pragmatische Cache-Invalidierung &#060; Vielhuber David","isPartOf":{"@id":"https:\/\/vielhuber.de\/#website"},"datePublished":"2018-01-11T11:23:27+00:00","dateModified":"2018-01-11T11:31:51+00:00","description":"Server-Side Rendering geh\u00f6ren mittlerweile zum Standardrepertoire von Webseiten und -anwendungen. Auch Browser wie Google Chrome neigen dazu, m\u00f6glichst","breadcrumb":{"@id":"https:\/\/vielhuber.de\/blog\/pragmatische-cache-invalidierung\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vielhuber.de\/blog\/pragmatische-cache-invalidierung\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vielhuber.de\/blog\/pragmatische-cache-invalidierung\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vielhuber.de\/"},{"@type":"ListItem","position":2,"name":"Pragmatische Cache-Invalidierung"}]},{"@type":"WebSite","@id":"https:\/\/vielhuber.de\/#website","url":"https:\/\/vielhuber.de\/","name":"Vielhuber David","description":"Full-Stack Developer","publisher":{"@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vielhuber.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":["Person","Organization"],"@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef","name":"David","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","url":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","contentUrl":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","width":700,"height":552,"caption":"David"},"logo":{"@id":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg"},"sameAs":["https:\/\/x.com\/vielhuber"]}]}},"_links":{"self":[{"href":"https:\/\/vielhuber.de\/sv\/wp-json\/wp\/v2\/posts\/1832","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vielhuber.de\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vielhuber.de\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vielhuber.de\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vielhuber.de\/sv\/wp-json\/wp\/v2\/comments?post=1832"}],"version-history":[{"count":10,"href":"https:\/\/vielhuber.de\/sv\/wp-json\/wp\/v2\/posts\/1832\/revisions"}],"predecessor-version":[{"id":1842,"href":"https:\/\/vielhuber.de\/sv\/wp-json\/wp\/v2\/posts\/1832\/revisions\/1842"}],"wp:attachment":[{"href":"https:\/\/vielhuber.de\/sv\/wp-json\/wp\/v2\/media?parent=1832"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vielhuber.de\/sv\/wp-json\/wp\/v2\/categories?post=1832"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vielhuber.de\/sv\/wp-json\/wp\/v2\/tags?post=1832"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}