MDL-65394 portfolio: add cache for portfolio_add_button
authorRyan Wyllie <ryan@moodle.com>
Fri, 12 Apr 2019 03:14:52 +0000 (11:14 +0800)
committerRyan Wyllie <ryan@moodle.com>
Wed, 1 May 2019 08:27:34 +0000 (16:27 +0800)
lang/en/cache.php
lib/db/caches.php
lib/portfoliolib.php

index 441b191..73acbeb 100644 (file)
@@ -65,6 +65,7 @@ $string['cachedef_observers'] = 'Event observers';
 $string['cachedef_plugin_functions'] = 'Plugins available callbacks';
 $string['cachedef_plugin_manager'] = 'Plugin info manager';
 $string['cachedef_presignup'] = 'Pre sign-up data for particular unregistered user';
+$string['cachedef_portfolio_add_button_portfolio_instances'] = 'Portfolio instances for portfolio_add_button class';
 $string['cachedef_postprocessedcss'] = 'Post processed CSS';
 $string['cachedef_tagindexbuilder'] = 'Search results for tagged items';
 $string['cachedef_questiondata'] = 'Question definitions';
index 71ebe33..7247f54 100644 (file)
@@ -391,4 +391,13 @@ $definitions = array(
         'simplekeys' => true,
         'simpledata' => true,
     ),
+
+    // Cache the list of portfolio instances for the logged in user
+    // in the portfolio_add_button constructor to avoid loading the
+    // same data multiple times.
+    'portfolio_add_button_portfolio_instances' => [
+        'mode' => cache_store::MODE_REQUEST,
+        'simplekeys' => true,
+        'staticacceleration' => true
+    ],
 );
index 68d5fe5..cc00cc5 100644 (file)
@@ -117,7 +117,14 @@ class portfolio_add_button {
             debugging('Building portfolio add button while portfolios is disabled. This code can be optimised.', DEBUG_DEVELOPER);
         }
 
-        $this->instances = portfolio_instances();
+        $cache = cache::make('core', 'portfolio_add_button_portfolio_instances');
+        $instances = $cache->get('instances');
+        if ($instances === false) {
+            $instances = portfolio_instances();
+            $cache->set('instances', $instances);
+        }
+
+        $this->instances = $instances;
         if (empty($options)) {
             return true;
         }