MDL-59142 core_theme: cache post-processed css
authorSimey Lameze <simey@moodle.com>
Mon, 12 Jun 2017 02:40:01 +0000 (10:40 +0800)
committerSimey Lameze <simey@moodle.com>
Tue, 13 Jun 2017 01:35:35 +0000 (09:35 +0800)
Thanks Cameron Ball for the base patch

lang/en/cache.php
lib/db/caches.php
lib/outputlib.php
theme/styles.php
version.php

index e811f03..6226dd0 100644 (file)
@@ -60,6 +60,7 @@ $string['cachedef_navigation_expandcourse'] = 'Navigation expandable courses';
 $string['cachedef_observers'] = 'Event observers';
 $string['cachedef_plugin_functions'] = 'Plugins available callbacks';
 $string['cachedef_plugin_manager'] = 'Plugin info manager';
+$string['cachedef_postprocessedcss'] = 'Post processed CSS';
 $string['cachedef_tagindexbuilder'] = 'Search results for tagged items';
 $string['cachedef_questiondata'] = 'Question definitions';
 $string['cachedef_repositories'] = 'Repositories instances data';
index 42d98d4..8e18971 100644 (file)
@@ -328,4 +328,11 @@ $definitions = array(
         'staticaccelerationsize' => 1
     ),
 
+    // Caches processed CSS.
+    'postprocessedcss' => array(
+        'mode' => cache_store::MODE_APPLICATION,
+        'simplekeys' => true,
+        'simpledata' => true,
+        'staticacceleration' => false,
+    ),
 );
index 5fe61d3..34b54e6 100644 (file)
@@ -60,6 +60,9 @@ function theme_reset_all_caches() {
         $cache->purge();
     }
 
+    // Purge compiled post processed css.
+    cache::make('core', 'postprocessedcss')->purge();
+
     if ($PAGE) {
         $PAGE->reload_theme();
     }
@@ -907,6 +910,44 @@ class theme_config {
 
         return $csscontent;
     }
+    /**
+     * Set post processed CSS content cache.
+     *
+     * @param string $csscontent The post processed CSS content.
+     * @return bool True if the content was successfully cached.
+     */
+    public function set_css_content_cache($csscontent) {
+
+        $cache = cache::make('core', 'postprocessedcss');
+        $key = $this->get_css_cache_key();
+
+        return $cache->set($key, $csscontent);
+    }
+
+    /**
+     * Return cached post processed CSS content.
+     *
+     * @return bool|string The cached css content or false if not found.
+     */
+    public function get_css_cached_content() {
+
+        $key = $this->get_css_cache_key();
+        $cache = cache::make('core', 'postprocessedcss');
+
+        return $cache->get($key);
+    }
+
+    /**
+     * Generate the css content cache key.
+     *
+     * @return string The post processed css cache key.
+     */
+    public function get_css_cache_key() {
+        $nosvg = (!$this->use_svg_icons()) ? 'nosvg_' : '';
+        $rtlmode = ($this->rtlmode == true) ? 'rtl' : 'ltr';
+
+        return $nosvg . $this->name . '_' . $rtlmode;
+    }
 
     /**
      * Get the theme designer css markup,
index 2fe8ec1..9d7a39c 100644 (file)
@@ -168,7 +168,10 @@ if ($type === 'editor') {
     }
 
     // Older IEs require smaller chunks.
-    $csscontent = $theme->get_css_content();
+    if (!$csscontent = $theme->get_css_cached_content()) {
+        $csscontent = $theme->get_css_content();
+        $theme->set_css_content_cache($csscontent);
+    }
 
     $relroot = preg_replace('|^http.?://[^/]+|', '', $CFG->wwwroot);
     if (!empty($slashargument)) {
index e90db34..597192c 100644 (file)
@@ -29,7 +29,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$version  = 2017060800.00;              // YYYYMMDD      = weekly release date of this DEV branch.
+$version  = 2017060800.01;              // YYYYMMDD      = weekly release date of this DEV branch.
                                         //         RR    = release increments - 00 in DEV branches.
                                         //           .XX = incremental changes.