Load home dashboard faster
authorColeman Watts <coleman@civicrm.org>
Tue, 2 Aug 2016 17:34:25 +0000 (13:34 -0400)
committerColeman Watts <coleman@civicrm.org>
Fri, 12 Aug 2016 03:32:34 +0000 (23:32 -0400)
Eliminate unnecessary ajax call should speed up load times significantly.

CRM/Contact/Page/DashBoard.php
js/jquery/jquery.dashboard.js
templates/CRM/common/dashboard.tpl

index 5f95110a916ae1903a5fe45ff1dbf02480a40534..40019a3f0bc7dcceb9665a20ea26eaea95bb1724 100644 (file)
@@ -44,6 +44,7 @@ class CRM_Contact_Page_DashBoard extends CRM_Core_Page {
     $resources = CRM_Core_Resources::singleton();
     $resources->addScriptFile('civicrm', 'js/jquery/jquery.dashboard.js', 0, 'html-header', FALSE);
     $resources->addStyleFile('civicrm', 'css/dashboard.css');
+    $this->assign('contactDashlets', CRM_Core_BAO_Dashboard::getContactDashlets());
 
     $resetCache = CRM_Utils_Request::retrieve('resetCache', 'Positive', CRM_Core_DAO::$_nullObject);
 
index d1f68bb4e16badc3d23e99def5a6048643ba2cf8..34cfec6109ad94753f0ac9edce9b4fd6fdcadea6 100644 (file)
     // Merge in the caller's options with the defaults.
     var opts = $.extend({}, $.fn.dashboard.defaults, options);
 
-    // Execution 'forks' here and restarts in init().  Tell the user we're busy with a throbber.
-    var throbber = $(opts.throbberMarkup).appendTo(dashboard.element);
-    $.getJSON(opts.ajaxCallbacks.getWidgetsByColumn.url, opts.ajaxCallbacks.getWidgetsByColumn.data, init);
-    asynchronousRequestCounter++;
+    init(opts.widgetsByColumn);
+
     return dashboard;
     // End of constructor and private properties for dashboard object.
 
      * Private methods of dashboard.
      */
 
-    // Ajax callback for getWidgetsByColumn.
-    function init(widgets, status) {
-      asynchronousRequestCounter--;
-      throbber.remove();
+    // Initialize widget columns.
+    function init(widgets) {
       var markup = '<li class="empty-placeholder">' + opts.emptyPlaceholderInner + '</li>';
 
       // Build the dashboard in the DOM.  For each column...
         minimize: {
           description: ts('Collapse or expand'),
           callback: widget.toggleMinimize,
-          icon: 'fa-caret-down',
+          icon: 'fa-caret-down'
         },
         fullscreen: {
           description: ts('View fullscreen'),
           callback: widget.enterFullscreen,
-          icon: 'fa-expand',
+          icon: 'fa-expand'
         },
         close: {
           description: ts('Remove from dashboard'),
index 7c922c7d5361d02763ccadc1939a1660491355bb..e009699bb326939e6f4ddf5dd4e0cb5fc2b1be1e 100644 (file)
@@ -38,22 +38,11 @@ CRM.$(function($) {
     // Required.
     emptyPlaceholderInner: '',
 
+    widgetsByColumn: {/literal}{$contactDashlets|@json_encode}{literal},
+
     // These define the urls and data objects used for all of the ajax requests to the server.
-    // data objects are extended with more properties, as defined below.
-    // All are required.  All should return JSON.
     ajaxCallbacks: {
 
-      // Server returns the configuration of widgets for this user;
-      // An array (keyed by zero-indexed column ID), of arrays (keyed by widget ID) of
-      // booleans; true if the widget is minimized.  False if not.
-      // E.g. [{ widgetID: isMinimized, ...}, ...]
-      getWidgetsByColumn: {
-        url:  {/literal}'{crmURL p='civicrm/ajax/dashboard' h=0 }'{literal},
-        data: {
-          op: 'get_widgets_by_column', key: {/literal}"{crmKey name='civicrm/ajax/dashboard'}"{literal}
-        }
-      },
-
       // Given the widget ID, the server returns the widget object as an associative array.
       // E.g. {content: '<p>Widget content</p>', title: 'Widget Title', }
       //