]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Minify inline JS and CSS (can be disable in configuration)
authorCraig Andrews <candrews@integralblue.com>
Sat, 5 Dec 2009 05:41:22 +0000 (00:41 -0500)
committerCraig Andrews <candrews@integralblue.com>
Sat, 5 Dec 2009 05:41:22 +0000 (00:41 -0500)
plugins/Minify/MinifyPlugin.php
plugins/Minify/README
plugins/Minify/minify.php

index 77fd76a84963330437835f60d30d3e8f6329f736..71fade19a5767a41fd6b080f2aa01be3f8e6dd1b 100644 (file)
@@ -33,8 +33,15 @@ Author URI: http://candrews.integralblue.com/
 
 if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
 
+// We bundle the minify library...
+set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib/minify/min/lib');
+
 class MinifyPlugin extends Plugin
 {
+    private $minifyInlineJs = true;
+    private $minifyInlineCss = true;
+
+    const cacheKey = 'minify';
 
     /**
      * Add Minification related paths to the router table
@@ -104,8 +111,58 @@ class MinifyPlugin extends Plugin
         }
     }
 
+    function onStartInlineScriptElement($action,&$code,&$type)
+    {
+        if($this->minifyInlineJs && $type=='text/javascript'){
+            $c = common_memcache();
+            if (!empty($c)) {
+                $cacheKey = common_cache_key(self::cacheKey . ':' . crc32($code));
+                $out = $c->get($cacheKey);
+            }
+            if(empty($out)) {
+                $out = $this->minifyJs($code);
+            }
+            if (!empty($c)) {
+                $c->set($cacheKey, $out);
+            }
+            if(!empty($out)) {
+                $code = $out;
+            }
+        }
+    }
+
+    function onStartStyleElement($action,&$code,&$type,&$media)
+    {
+        if($this->minifyInlineCss && $type=='text/css'){
+            $c = common_memcache();
+            if (!empty($c)) {
+                $cacheKey = common_cache_key(self::cacheKey . ':' . crc32($code));
+                $out = $c->get($cacheKey);
+            }
+            if(empty($out)) {
+                $out = $this->minifyCss($code);
+            }
+            if (!empty($c)) {
+                $c->set($cacheKey, $out);
+            }
+            if(!empty($out)) {
+                $code = $out;
+            }
+        }
+    }
+
     function minifyUrl($src) {
         return common_local_url('minify',null,array('f' => $src ,v => STATUSNET_VERSION));
     }
+
+    static function minifyJs($code) {
+        require_once('JSMin.php');
+        return JSMin::minify($code);
+    }
+
+    static function minifyCss($code, $options = array()) {
+        require_once('Minify/CSS.php');
+        return Minify_CSS::minify($code,$options);
+    }
 }
 
index 8f2eefa2c7d0800f4e4829889dea4dc36919cef0..f7763735ed7adb91a24ba2ea6c574d24acd437bd 100644 (file)
@@ -4,6 +4,10 @@ Note that if enabled this plugin and use a theme server,
     (if any of $config['theme']['server'], $config['theme']['path'],
     $config['theme']['dir'] are set) theme CSS will not be minified.
 
+This plugin will use memcache, if it is available, for storing minified inline
+    and file javascript and css. Because minification is non-trivial, using
+    memcache is recommended.
+
 Installation
 ============
 add "addPlugin('minify',
@@ -12,7 +16,16 @@ to the bottom of your config.php
 
 Settings
 ========
-None at the moment
+minifyInlineJs (true): Minify inline javascript.
+    Because caching isn'tas effective for inline resources (due to its more
+    dynamic nature) than static files, minifying inline resources may adversely
+    affect performance for higher volume sites. Testing (and memcache usage)
+    are highly recommended.
+minifyInlineCss (true): Minify inline CSS.
+    Because caching isn'tas effective for inline resources (due to its more
+    dynamic nature) than static files, minifying inline resources may adversely
+    affect performance for higher volume sites. Testing (and memcache usage)
+    are highly recommended.
 
 Example
 =======
index f8c17767c3f8b8d091b04493973016ee5a910fc4..64727f5e7e27b7c4fcfc2233bf02a5cb4baf8fb9 100644 (file)
@@ -19,9 +19,6 @@
 
 if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
 
-// We bundle the minify library...
-set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib/minify/min/lib');
-
 class MinifyAction extends Action
 {
     const TYPE_CSS = 'text/css';
@@ -30,8 +27,6 @@ class MinifyAction extends Action
     // Apache default and what Yahoo! uses..
     const TYPE_JS = 'application/x-javascript';
 
-    const cacheKey = 'minify';
-
     var $file;
     var $v;
 
@@ -81,7 +76,7 @@ class MinifyAction extends Action
         
         $c = common_memcache();
         if (!empty($c)) {
-            $cacheKey = common_cache_key(self::cacheKey . ':' . $this->file . '?v=' . empty($this->v)?'':$this->v);
+            $cacheKey = common_cache_key(MinifyPlugin::cacheKey . ':' . $this->file . '?v=' . empty($this->v)?'':$this->v);
             $out = $c->get($cacheKey);
         }
         if(empty($out)) {
@@ -102,16 +97,14 @@ class MinifyAction extends Action
         $info = pathinfo($file);
         switch(strtolower($info['extension'])){
             case 'js':
-                require_once('JSMin.php');
-                $out = JSMin::minify(file_get_contents($file));
+                $out = MinifyPlugin::minifyJs(file_get_contents($file));
                 header('Content-Type: ' . self::TYPE_JS);
                 break;
             case 'css':
-                require_once('Minify/CSS.php');
                 $options = array();
                 $options['currentDir'] = dirname($file);
                 $options['docRoot'] = INSTALLDIR;
-                $out = Minify_CSS::minify(file_get_contents($file),$options);
+                $out = MinifyPlugin::minifyCss(file_get_contents($file),$options);
                 header('Content-Type: ' . self::TYPE_CSS);
                 break;
             default: