[dokuwiki] Proposing 2006-03-09c release

  • From: "Oliver Schulze L." <oliver@xxxxxxxxxxxxx>
  • To: dokuwiki@xxxxxxxxxxxxx
  • Date: Mon, 24 Jul 2006 11:25:19 -0400

Hi,
I'm proposing a hotfix release of dokuwiki, version 2006-03-06c

This version should have the css and jss cache control as in this patch of the devel version:
http://dev.splitbrain.org/darcs/index.cgi/dokuwiki/?c=annotate&p=20060410012723-05dcb-eccb42aefe85c9dbb4f35fdf03a9635561cf5710.gz


I have patched DW 2006-03-06b to include that patch, I include the patches in this email.

The reason I'm asking for a new releases is that the css and jss cache control is a big
improvement. My stats is that without the patch, 2006-03-06b generated a 66 kbyte
output in every page, just for the css and js code.
So, you can save a 66kbytes download in every page!


What do you think?

Thanks
Oliver

--
Oliver Schulze L.
<oliver@xxxxxxxxxxxxx>

--- js.php.ori  2006-07-24 10:57:52.000000000 -0400
+++ js.php      2006-07-24 10:35:34.000000000 -0400
@@ -55,10 +55,16 @@
     // get possible plugin scripts
     $plugins = js_pluginscripts();
 
-    // check cache age here
+    // check cache age & handle conditional request
+    header('Cache-Control: public, max-age=3600');
+    header('Pragma: public');
     if(js_cacheok($cache,array_merge($files,$plugins))){
+        http_conditionalRequest(filemtime($cache));
+        if($conf['allowdebug']) header("X-CacheUsed: $cache");
         readfile($cache);
         return;
+    } else {
+        http_conditionalRequest(time());
     }
 
     // start output buffering and build the script
--- pageutils.php.ori   2006-07-24 10:57:31.000000000 -0400
+++ pageutils.php       2006-07-24 10:29:05.000000000 -0400
@@ -330,4 +330,40 @@
   return !isHiddenPage($id);
 }
 
+/**
+ * Checks and sets HTTP headers for conditional HTTP requests
+ *
+ * @author Simon Willison <swillison@xxxxxxxxx>
+ * @link   http://simon.incutio.com/archive/2003/04/23/conditionalGet
+ */
+function http_conditionalRequest($timestamp){
+    // A PHP implementation of conditional get, see
+    //   http://fishbowl.pastiche.org/archives/001132.html
+    $last_modified = substr(date('r', $timestamp), 0, -5).'GMT';
+    $etag = '"'.md5($last_modified).'"';
+    // Send the headers
+    header("Last-Modified: $last_modified");
+    header("ETag: $etag");
+    // See if the client has provided the required headers
+    $if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ?
+        stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']) :
+        false;
+    $if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ?
+        stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) :
+        false;
+    if (!$if_modified_since && !$if_none_match) {
+        return;
+    }
+    // At least one of the headers is there - check them
+    if ($if_none_match && $if_none_match != $etag) {
+        return; // etag is there but doesn't match
+    }
+    if ($if_modified_since && $if_modified_since != $last_modified) {
+        return; // if-modified-since is there but doesn't match
+    }
+    // Nothing has changed since their last request - serve a 304 and exit
+    header('HTTP/1.0 304 Not Modified');
+    exit;
+}
+
 //Setup VIM: ex: et ts=2 enc=utf-8 :
--- css.php.ori 2006-07-24 10:57:48.000000000 -0400
+++ css.php     2006-07-24 10:34:38.000000000 -0400
@@ -67,10 +67,16 @@
         $files[DOKU_CONF.'userstyle.css'] = '';
     }
 
-    // check cache age 
+    // check cache age & handle conditional request
+    header('Cache-Control: public, max-age=3600');
+    header('Pragma: public');
     if(css_cacheok($cache,array_keys($files))){
+        http_conditionalRequest(filemtime($cache));
+        if($conf['allowdebug']) header("X-CacheUsed: $cache");
         readfile($cache);
         return;
+    } else {
+        http_conditionalRequest(time());
     }
 
     // start output buffering and build the stylesheet

Other related posts: