Оптимизация механизма загрузки параметров мамботов Joomla 1.0

  • 18.10.2007

Сегодня, просматривая список запросов, которые Joomla выполняет при отображении страницы, обратил внимание на некоторую избыточность этих запросов. В первую очередь, это касается загрузки мамботами своих параметров. В результате небольших экспериментов была сделана модификация, которая позволяет сэкономить количество выполняемых запросов при использовании стандартных мамботов.

Введение в механизм загрузки параметров мамботов

У большинства мамботов, используемых в Joomla, есть параметры, которые можно настроить при редактировании мамбота в Менеджере мамботов административной панели сайта. При открытии страницы сайта ядро Joomla производит загрузку опубликованных мамботов и затем, по необходимости, их вызывает.

Примерно в версии 1.0.8 разработчиками была произведена оптимизация Joomla по сокращению количества запросов к базе данных. В частности, это коснулось и механизма загрузки параметров мамботов. После этой модификации код загрузки параметров в мамботах принял вид (на примере мамбота MosImage):

		// check if param query has previously been processed
		if ( !isset($_MAMBOTS->_content_mambot_params['mosimage']) ) {
			// load mambot params info
			$query = "SELECT params"
			. "\n FROM #__mambots"
			. "\n WHERE element = 'mosimage'"
			. "\n AND folder = 'content'"
			;
			$database->setQuery( $query );
			$database->loadObject($mambot);
			
			// save query to class variable
			$_MAMBOTS->_content_mambot_params['mosimage'] = $mambot;
		}

		// pull query data from class variable
		$mambot = $_MAMBOTS->_content_mambot_params['mosimage'];

Как видно из кода, разработчики предложили вариант сохранения прочитанных параметров мамбота в переменную глобального объекта $_MAMBOTS. И при следующей загрузке этот запрос уже не выполняется. Этим шагом получилось избавиться от повторной загрузки параметров.

Но, посмотрев код загрузчика мамботов в joomla.php, я увидел, что параметры мамботов и так выбираются в запросе при загрузке мамботов. Поэтому, появляется возможность проинициализировать массив _content_mambot_params еще на этапе загрузки мамботов, и тем самым вообще исключить запросы на загрузку параметров из самих мамботов.

Описание модификации механизма загрузки параметров мамботов

Перед началом модификаций рекомендую создать резервную копию изменяемых файлов. Если у вас вдруг что-то не получится — наличие резервной копии позволит вам откатить изменения и восстановить работоспособность сайта.

  1. Открываем файл /includes/joomla.php
  2. Находим в нем строчки:
    	// load query into class variable _content_mambots
    	if (!($this->_content_mambots = $database->loadObjectList())) {
    		//echo "Error loading Mambots: " . $database->getErrorMsg();
    		return false;
    	}
  3. и после них добавляем небольшой кусочек кода:
    	foreach( $this->_content_mambots as $mambot ) {
    		$this->_content_mambot_params[$mambot->element] = $mambot;
    	}
  4. Сохраняем изменения в файле.

После выполнения указанной модификации, параметры мамботов группы Content будут инициализироваться сразу же при загрузке мамботов этой группы. И впоследствии дополнительные запросы выполняться не будут.

Желаю успешных экспериментов, жду отзывов и вопросов на форуме!

Основной курс по Joomla

Joomla!® CMS — пожалуй, лучшая система управления контентом с открытым исходным кодом

Joomla! — это больше, чем просто программное обеспечение, это люди, включающие разработчиков, дизайнеров, системных администраторов, переводчиков, копирайтеров, и, что самое главное — простых пользователей.

Мы рады пригласить вас в ряды нашего сообщества!

Скачать Joomla! 3 Документация Joomla! CMS Свернуть

Новости портала

Новое в блогах

Видео