<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Caching Archives &#8211; hoech.net</title>
	<atom:link href="https://hoech.net/tag/caching/feed/" rel="self" type="application/rss+xml" />
	<link>https://hoech.net/tag/caching/</link>
	<description>Webdesign und -entwicklung, professionelle Bildbearbeitung, Reinzeichnung, DTP und Prepress in Stuttgart</description>
	<lastBuildDate>Wed, 27 Nov 2013 09:24:16 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>
	<item>
		<title>Caching in WordPress</title>
		<link>https://hoech.net/2012/06/20/caching-in-wordpress/</link>
		
		<dc:creator><![CDATA[Florian Höch]]></dc:creator>
		<pubDate>Wed, 20 Jun 2012 12:55:41 +0000</pubDate>
				<category><![CDATA[Web-Entwicklung]]></category>
		<category><![CDATA[Caching]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://wp.hoech.net/?p=357</guid>

					<description><![CDATA[<p>Es gibt viele Möglichkeiten, die Performance einer Website zu verbessern. Neben der Optimierung von Bildern, HTML, JavaScripts und StyleSheets sowie Kompression ist sowohl browser- wie auch serverseitiges Caching (das Vorhalten von Daten in einem Zwischenspeicher) eine gute Option. Auf dieser [&#8230;] <a href="https://hoech.net/2012/06/20/caching-in-wordpress/" class="more-link"><span class="meta-nav">Weiterlesen &#8594;</span></a></p>
<p>Der Beitrag <a href="https://hoech.net/2012/06/20/caching-in-wordpress/">Caching in WordPress</a> erschien zuerst bei <a href="https://hoech.net">hoech.net</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="cta" >Hinweis: Die aktuelle Version 2.9.0.3 von HyperCache behebt die in diesem Artikel angesprochenen Kritikpunkte. Dank an den Autor des Plugins, <a href="http://satollo.net">Stefano Lissa</a>, für das prompte Einpflegen des Patches.</div><div class="clear"></div>
<p><img decoding="async" src="http://hoech.net/wp-content/uploads/2012/05/smbutton-grey.png" alt="" width="58" height="69" class="alignleft size-full wp-image-369" /> Es gibt viele Möglichkeiten, die Performance einer Website zu verbessern. Neben der Optimierung von Bildern, HTML, JavaScripts und StyleSheets sowie Kompression ist sowohl browser- wie auch serverseitiges Caching (das Vorhalten von Daten in einem Zwischenspeicher) eine gute Option. <span id="more-357"></span></p>
<p>Auf dieser Website setze ich eine modifizierte Version des <a href="http://wordpress.org/extend/plugins/hyper-cache/">Hyper Cache Plug-Ins für WordPress</a> ein. Für WordPress gibt es mehr als ein dutzend Caching-Plug-Ins, ich habe mich für dieses aufgrund seiner Einfachheit (es macht, was es soll, und nicht mehr) sowie der gefühlt guten Performance entschieden.</p>
<p>Ein paar kleinere und größere Kritikpunkte des Original-Plug-Ins (Version 2.8.9) gab es allerdings schon, die mich dazu veranlasst haben, das Plug-In leicht zu überarbeiten:</p>
<ul class="fancy">
<li>Das Browser-Caching wurde durch das Setzen von entsprechenden HTTP-Antwort-Headern deaktiviert. Meiner Meinung nach ein großes No-No. Eine bessere Option besteht darin, die maximale Browser-Cache-Verweildauer anhand der Differenz der in den Optionen des Plug-Ins festgelegten Ablaufzeitspanne und des Alters der serverseitig gecachten Datei festzulegen.</li>
<li>Bei Aktivierung der Kompression im Plug-in wurde nach der ersten Anfrage an eine Seite diese unkomprimiert ausgeliefert. Verschmerzbar, aber auch leicht zu ändern.</li>
<li>Der Last-Modified HTTP-Antwort-Header fehlte trotz Aktivierung in den Plug-In-Optionen bei jedem ersten ungecachten Seitenzugriff.</li>
<li>Und noch eine Kleinigkeit, die „304 Not Modified“ HTTP-Antwort sollte idealerweise so früh wie möglich im Code erfolgen, um nicht serverseitig unnötig Daten zu verarbeiten, die dann gar nicht gebraucht werden.
</ul>
<p>Zu guter Letzt hier die Code-Änderungen, welche die obigen Kritikpunkte beseitigen, im diff-Format gegen 2.8.9:</p>
<pre class="language-diff line-numbers"><code>--- cache-2.8.9.php	Mon Apr 02 17:33:19 2012
+++ cache.php	Mon May 21 18:08:21 2012
@@ -91,6 +91,15 @@
     return;
 }

+if (array_key_exists("HTTP_IF_MODIFIED_SINCE", $_SERVER)) {
+    $if_modified_since = strtotime(preg_replace('/;.*$/', '', $_SERVER["HTTP_IF_MODIFIED_SINCE"]));
+    if ($if_modified_since &gt;= $hc_file_time) {
+        header("HTTP/1.0 304 Not Modified");
+        flush();
+        die();
+    }
+}
+
 // Load it and check is it's still valid
 $hyper_data = @unserialize(file_get_contents($hc_file));

@@ -117,21 +126,12 @@
 }

 // It's time to serve the cached page
-if (array_key_exists("HTTP_IF_MODIFIED_SINCE", $_SERVER)) {
-    $if_modified_since = strtotime(preg_replace('/;.*$/', '', $_SERVER["HTTP_IF_MODIFIED_SINCE"]));
-    if ($if_modified_since &gt;= $hc_file_time) {
-        header("HTTP/1.0 304 Not Modified");
-        flush();
-        die();
-    }
-}

-// Now serve the real content
+$maxage = $hyper_cache_timeout - $hc_file_age;
+header('Cache-Control: max-age=' . $maxage);
+header('Expires: ' . gmdate("D, d M Y H:i:s", time() + $maxage) . " GMT");

 // True if user ask to NOT send Last-Modified
-header('Cache-Control: no-cache, must-revalidate, max-age=0');
-header('Pragma: no-cache');
-header('Expires: Wed, 11 Jan 1984 05:00:00 GMT');
 if (!$hyper_cache_lastmodified) {
     header('Last-Modified: ' . gmdate("D, d M Y H:i:s", $hc_file_time). " GMT");
 }
@@ -195,7 +195,7 @@
     if ($hyper_redirect) {
         if ($hyper_cache_redirects) {
             $data['location'] = $hyper_redirect;
-            hyper_cache_write($data);
+            $buffer = hyper_cache_write($data);
         }
         return $buffer;
     }
@@ -233,13 +233,13 @@

     if (is_404()) $data['status'] = 404;

-    hyper_cache_write($data);
+    $buffer = hyper_cache_write($data);

     return $buffer;
 }

 function hyper_cache_write(&amp;$data) {
-    global $hc_file, $hyper_cache_store_compressed;
+    global $hc_file, $hyper_cache_lastmodified, $hyper_cache_store_compressed, $hyper_cache_timeout;

     $data['uri'] = $_SERVER['REQUEST_URI'];

@@ -247,12 +247,21 @@
     if ($hyper_cache_store_compressed) {
         $data['gz'] = gzencode($data['html']);
         if ($data['gz']) unset($data['html']);
+        header('Content-Encoding: gzip');
     }
     $file = fopen($hc_file, 'w');
     fwrite($file, serialize($data));
     fclose($file);

-    header('Last-Modified: ' . date("r", @filemtime($hc_file)));
+    header('Cache-Control: max-age=' . $hyper_cache_timeout);
+    header('Expires: ' . gmdate("D, d M Y H:i:s", time() + $hyper_cache_timeout) . " GMT");
+
+    // True if user ask to NOT send Last-Modified
+    if (!$hyper_cache_lastmodified) {
+        header('Last-Modified: ' . gmdate("D, d M Y H:i:s", @filemtime($hc_file)). " GMT");
+    }
+
+    return !empty($data['gz']) ? $data['gz'] : $data['html'];
 }

 function hyper_mobile_type() {</code></pre>
<p class="small"><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/de/" target="_blank" class="alignleft"><img decoding="async" alt="Creative Commons Lizenzvertrag" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/de/88x31.png" /></a> Dieser Beitrag wurde unter <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/de/" target="_blank">Creative Commons Namensnennung-Nicht-kommerziell-Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz</a> veröffentlicht.</p>
<p>Der Beitrag <a href="https://hoech.net/2012/06/20/caching-in-wordpress/">Caching in WordPress</a> erschien zuerst bei <a href="https://hoech.net">hoech.net</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss><!-- hyper cache: hoech.net/tag/caching/feed/index.dat 26-06-04 01:14:56 -->