Просмотр исходного кода

#5176 Speed improvements: additional DB caches

Alex Trofimov 1 год назад
Родитель
Сommit
d9cc24181f

+ 4 - 7
inc/classes/BxDolConnectionQuery.php

@@ -27,13 +27,10 @@ class BxDolConnectionQuery extends BxDolDb
 
     static public function getConnectionObject ($sObject)
     {
-        $oDb = BxDolDb::getInstance();
-        $sQuery = $oDb->prepare("SELECT * FROM `sys_objects_connection` WHERE `object` = ?", $sObject);
-        $aObject = $oDb->getRow($sQuery);
-        if (!$aObject || !is_array($aObject))
-            return false;
-
-        return $aObject;
+        $a = BxDolDb::getInstance()->fromCache('sys_objects_connection', 'getAllWithKey', "SELECT * FROM `sys_objects_connection`", 'object');
+        if ($a && isset($a[$sObject]))
+            return $a[$sObject];
+        return false;
     }
 
     public function getCommonContentSQLParts ($sContentTable, $sContentField, $iInitiator1, $iInitiator2, $isMutual = false)

+ 10 - 4
inc/classes/BxDolMenu.php

@@ -100,7 +100,7 @@ class BxDolMenu extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
     protected $_oQuery;
     protected $_oPermalinks;
     protected $_aMarkers = array();
-    protected $_bMultilevel = false;
+    protected $_isMultilevel = null;
 
     protected $_sSessionKeyCollapsed;
 
@@ -127,9 +127,7 @@ class BxDolMenu extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
         $this->_sObject = isset($aObject['object']) ? $aObject['object'] : 'bx-menu-obj-' . time() . rand(0, PHP_INT_MAX);
         $this->_aObject = $aObject;
         $this->_oQuery = new BxDolMenuQuery($this->_aObject);
-        $this->_oPermalinks = BxDolPermalinks::getInstance();
-
-        $this->_bMultilevel = !empty($this->_aObject['set_name']) && $this->_oQuery->isSetMultilevel($this->_aObject['set_name']);
+        $this->_oPermalinks = BxDolPermalinks::getInstance();        
 
         $this->_sSessionKeyCollapsed = 'bx_menu_collapsed_';
 
@@ -492,6 +490,14 @@ class BxDolMenu extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
         return true;
     }
     
+    protected function isMultilevel ()
+    {
+        if ($this->_isMultilevel !== null)
+            return $this->_isMultilevel;
+
+        $this->_isMultilevel = !empty($this->_aObject['set_name']) && $this->_oQuery->isSetMultilevel($this->_aObject['set_name']);
+    }
+
     protected function _getVisibilityClass($a)
     {
         $aHiddenOn = array(

+ 1 - 1
inc/classes/BxDolMenuQuery.php

@@ -183,7 +183,7 @@ class BxDolMenuQuery extends BxDolDb
 
     public function isSetMultilevel($sName)
     {
-        $sSql = $this->prepare("SELECT COUNT(*) FROM `sys_menu_items` WHERE `set_name`=? AND `parent_id`<>'0' LIMIT 1", $sName);
+        $sSql = $this->prepare("SELECT 1 FROM `sys_menu_items` WHERE `set_name` = ? AND `parent_id` != '0' LIMIT 1", $sName);
         return (int)$this->getOne($sSql) > 0;
     }
 }

+ 2 - 3
inc/classes/BxDolPaymentsQuery.php

@@ -19,9 +19,8 @@ class BxDolPaymentsQuery extends BxDolDb
 
     public function getObjects()
     {
-    	$sQuery = $this->prepare("SELECT * FROM `sys_objects_payments` WHERE 1");
-    	
-        $aObjects = $this->getAll($sQuery);
+    	$sQuery = "SELECT * FROM `sys_objects_payments` WHERE 1";
+        $aObjects = $this->fromCache('sys_objects_payments', 'getAll', $sQuery);
         if(empty($aObjects) || !is_array($aObjects))
             return array();
 

+ 4 - 8
inc/classes/BxDolPrivacyQuery.php

@@ -43,15 +43,11 @@ class BxDolPrivacyQuery extends BxDolDb
 
     static public function getPrivacyObject($sObject)
     {
-        $oDb = BxDolDb::getInstance();
+        $a = BxDolDb::getInstance()->fromCache('sys_objects_privacy', 'getAllWithKey', "SELECT * FROM `sys_objects_privacy`", 'object');
+        if ($a && isset($a[$sObject]))
+            return $a[$sObject];
 
-        $sQuery = $oDb->prepare("SELECT * FROM `sys_objects_privacy` WHERE `object` = ?", $sObject);
-
-        $aObject = $oDb->getRow($sQuery);
-        if(!$aObject || !is_array($aObject))
-            return false;
-
-        return $aObject;
+        return false;
     }
 
     public function init($aObject = array())

+ 1 - 1
modules/base/profile/classes/BxBaseModProfileDb.php

@@ -21,7 +21,7 @@ class BxBaseModProfileDb extends BxBaseModGeneralDb
 
     public function getContentInfoById ($iContentId)
     {
-        $aInfo = $this->getRow("SELECT `c`.*, `p`.`account_id`, `p`.`id` AS `profile_id`, `a`.`email` AS `profile_email`, `a`.`active` AS `profile_last_active`, `a`.`ip` AS `profile_ip`, `p`.`status` AS `profile_status` FROM `" . $this->_oConfig->CNF['TABLE_ENTRIES'] . "` AS `c` INNER JOIN `sys_profiles` AS `p` ON (`p`.`content_id` = `c`.`id` AND `p`.`type` = :type) INNER JOIN `sys_accounts` AS `a` ON (`p`.`account_id` = `a`.`id`) WHERE `c`.`id` = :id", [
+        $aInfo = $this->fromMemory("profile_content_info_" . $this->_oConfig->getName() . $iContentId, 'getRow', "SELECT `c`.*, `p`.`account_id`, `p`.`id` AS `profile_id`, `a`.`email` AS `profile_email`, `a`.`active` AS `profile_last_active`, `a`.`ip` AS `profile_ip`, `p`.`status` AS `profile_status` FROM `" . $this->_oConfig->CNF['TABLE_ENTRIES'] . "` AS `c` INNER JOIN `sys_profiles` AS `p` ON (`p`.`content_id` = `c`.`id` AND `p`.`type` = :type) INNER JOIN `sys_accounts` AS `a` ON (`p`.`account_id` = `a`.`id`) WHERE `c`.`id` = :id", [
             'type' => $this->_oConfig->getName(),
             'id' => $iContentId
         ]);

+ 2 - 2
modules/boonex/timeline/classes/BxTimelineMenuFeeds.php

@@ -24,7 +24,7 @@ class BxTimelineMenuFeeds extends BxTemplMenu
 
         parent::__construct($aObject, $this->_oModule->_oTemplate);
 
-        $this->_bMultilevel = true;
+        $this->_isMultilevel = true;
         $this->_bDisplayAddons = true;
     }
 
@@ -106,7 +106,7 @@ class BxTimelineMenuFeeds extends BxTemplMenu
             'js_object' => $this->_sJsObject,
             'style_prefix' => $this->_sStylePrefix,
             'bx_if:show_toggle' => [
-                'condition' => $this->_bMultilevel && !empty($a['subitems']),
+                'condition' => $this->isMultilevel() && !empty($a['subitems']),
                 'content' => [
                     'js_object' => $this->_sJsObject,
                     'style_prefix' => $this->_sStylePrefix,

+ 2 - 2
template/scripts/BxBaseMenu.php

@@ -275,7 +275,7 @@ class BxBaseMenu extends BxDolMenu
      */
     protected function getMenuItemsRaw ()
     {
-        if($this->_bMultilevel)
+        if($this->isMultilevel())
             return $this->_oQuery->getMenuItemsHierarchy();
         else 
             return $this->_oQuery->getMenuItems();
@@ -423,7 +423,7 @@ class BxBaseMenu extends BxDolMenu
         );
 
         $aTmplVarsSubitems = array('subitems' => '');
-        $bTmplVarsSubitems = $this->_bMultilevel && !empty($a['subitems']);
+        $bTmplVarsSubitems = $this->isMultilevel() && !empty($a['subitems']);
         if($bTmplVarsSubitems) {
             $sClassCollpsed = 'bx-mi-collapsed';
             if(($iCollapsed = $this->getUserChoiceCollapsedSubmenu($a)) !== false)

+ 1 - 1
template/scripts/BxBaseMenuProfileFollowings.php

@@ -22,7 +22,7 @@ class BxBaseMenuProfileFollowings extends BxTemplMenu
     {
         parent::__construct ($aObject, $oTemplate);
 
-        $this->_bMultilevel = true;
+        $this->_isMultilevel = true;
         $this->_bDisplayAddons = true;
 
         $this->_sConnection = 'sys_profiles_subscriptions';