OPTIMALIZATION: cache widget area content for one pageload

This commit is contained in:
Michal Kváček
2016-04-06 19:06:03 +02:00
parent fc9f3a403b
commit de287abf24
+22 -2
View File
@@ -5,11 +5,28 @@ use App\Models\WidgetArea;
class WidgetAreas class WidgetAreas
{ {
/**
* @var array list of inicialized widget areas
*/
protected static $widgetAreas = [];
/**
* Renderer for whole widget area.
*
* @param $uniqueCode
*
* @return mixed
*/
public static function render($uniqueCode) public static function render($uniqueCode)
{ {
$widgetArea = new WidgetArea(); if (isset(self::$widgetAreas[$uniqueCode])) {
echo self::$widgetAreas[$uniqueCode];
return;
}
$widgets = $widgetArea->getWidgets($uniqueCode)->get(); $widgetArea = new WidgetArea();
$widgets = $widgetArea->getWidgets($uniqueCode)
->get();
$content = ''; $content = '';
foreach ($widgets as $widget) { foreach ($widgets as $widget) {
@@ -19,6 +36,9 @@ class WidgetAreas
$content .= call_user_func([$presenter, 'render'], json_decode($widget->settings)); $content .= call_user_func([$presenter, 'render'], json_decode($widget->settings));
} }
// cache this widget area
self::$widgetAreas[$uniqueCode] = $content;
echo $content; echo $content;
} }
} }