Идём по-порядку по запросам (взятыми с
http://www.luxter.ru/debug.htm):
1. ?SELECT folder, element, published, params
FROM jos_mambots
WHERE published >= 1
AND access <= 0
AND folder = 'system'
ORDER BY ordering
возникает в файле /index.php в строке
// load system bot group
$_MAMBOTS->loadBotGroup( 'system' );
Цель запроса — загрузка мамботов группы system. Если таковые отсутствуют (а во многих случаях это действительно так) — можно закомментировать в этом файле эту, а также следующие строки:
// trigger the onStart events
$_MAMBOTS->trigger( 'onStart' );
// trigger the onAfterStart events
$_MAMBOTS->trigger( 'onAfterStart' );
2. +SELECT id, link
FROM jos_menu
WHERE menutype = 'mainmenu'
AND published = 1
ORDER BY parent, ordering
LIMIT 1
возникает в файле /index.php в блоке
if ($option == '') {
if ($Itemid) {
//пропущено
}
}
Цель — определить компонент по-умолчанию (который должен запускаться при заходе по адресу
www.site.com). Если этот компонент и его Itemid известны (по-умолчанию это com_frontpage и Itemid=1 — эти значения можно определить по ссылке, на которую указывает первый пункт меню в модуле mainmenu), то от лишнего запроса к БД можно избавиться, заменив вышеприведенный блок на
if ($option == '') {
$option = 'com_frontpage';
$Itemid = 1;
}
3. ?SELECT template
FROM jos_templates_menu
WHERE client_id = 0
AND ( menuid = 0 OR menuid = 1 )
ORDER BY menuid DESC
LIMIT 1
возникает в файле /includes/joomla.php при вызове
$this->_setTemplate( $isAdmin );
в функции mosMainFrame.
Цель — определить шаблон, соответствующий текущему пункту меню. Если у вас на всех страницах используется один и тот же шаблон (например, my_template), то эту строку можно заменить на
if($isAdmin) $this->_setTemplate( $isAdmin );
else $this->_template = 'my_template';
4-7.DELETE FROM jos_session
WHERE (
( time < '1172571909' )
AND guest = 0
AND gid > 0
) OR (
( time < '1172571909' )
AND guest = 1
AND userid = 0
)
SELECT *
FROM jos_session
WHERE session_id = 'ee2ba326d4dec27bfa542f334e20b5b1'
SELECT session_id
FROM jos_session
WHERE session_id = 'dde8aac46113d15f07d2a279f7b60cf4'
INSERT INTO jos_session ( `session_id`,`time`,`username`,`gid`,`guest` ) VALUES ( 'dde8aac46113d15f07d2a279f7b60cf4','1172572809','','0','1' )
Это работа с сессиями. Тут вряд ли можно избавиться от запросов к БД (хотя, можно попробовать убрать сессии для "гостей", но что из этого получится — не знаю).
Пункт 4 — удаление пользователей, которые покинули сайт, из списка "активных".
Пункт 5 — попытка загрузить текущую сессию.
Пункт 6 — проверка того, что созданный идентификатор сессии - уникальный.
Пункт 7 — занесение пользователя в список "активных".
Все эти запросы возникают в функции initSession в файле /includes/joomla.php. Можно ли здесь что-то оптимизировать — пока не знаю.
8. ?SELECT value FROM jos_jomcomment_config WHERE name='all'
Это «след» от какого-то компонента комментариев (видимо, Jom Comment). Так как в стандартную поставку такой не входит — прокомментировать не могу. Запрос, видимо, происходит в обработчике onAfterStart группы system, поэтому оптимизацию, приведенную в пункте
1, применять нельзя — можно навредить работе компонента.
9. -SELECT *
FROM jos_menu
WHERE id = 1
запрос вызывается в /index.php при вызове mosMenuCheck:
$ret = mosMenuCheck( $Itemid, $option, $task, $gid );
Цель — проверка прав доступа к текущему компоненту.
10. ?SELECT a.*
FROM jos_components AS a
WHERE ( a.admin_menu_link = 'option=com_syndicate' OR a.admin_menu_link = 'option=com_syndicate&hidemainmenu=1' )
AND a.option = 'com_syndicate'
вызывается при вызове mosShowHead из шаблона.
Проверяется, нужно ли экспортировать RSS и если да, то в блок <head> сайта добавится строка
<link rel="alternate" type="application/rss+xml" title="..." href="..." />
Если Вам такая строка не нужна, то вставьте в файле /includes/frontend.php:
перед строкой
$row = new mosComponent( $database );
и
перед
// favourites icon
if ( !$mosConfig_favicon ) {
Если нужна — сделайте то же самое и вставьте её в шаблон «вручную».
11.SELECT m.* FROM jos_menu AS m
WHERE menutype='mainmenu' AND published='1' AND access <= '0' AND parent=0
ORDER BY ordering
Очень похоже на запрос, возникающий при вызове mosShowHFMenu (горизонтальное плоское меню) в /modules/mod_mainmenu.php, но в запросе отсутствуют присутствовавшие бы в этом случае дополнительные переводы строк. Поэтому данный запрос, скорее всего, соответствует стороннему компоненту меню. И, видимо, это меню не кешируется.
12.SELECT m.* FROM jos_menu AS m
WHERE menutype='mainmenu' AND published='1'
Скорее всего, тоже соответствует стороннему компоненту меню.
13-16. вызывается при вызове функции getItemid в /includes/joomla.php.
По-идее, если всё кешируется, то этого вызова быть не должно.
13. +SELECT COUNT( id )
FROM jos_menu
WHERE type = 'content_typed'
AND published = 1
вызывается в функции getStaticContentCount (/includes/joomla.php)
Цель — определить количество статического контента. Можно исключить этот запрос, если заменить
if ($_Itemid == '' && $typed && $this->getStaticContentCount()) {
на
if ($_Itemid == '' && $typed) {
в файле /includes/joomla.php
14.SELECT id
FROM jos_menu
WHERE type = 'content_typed'
AND published = 1
AND link = 'index.php?option=com_content&task=view&id=2254'
вызывается в функции getItemid в /includes/joomla.php
15. +SELECT COUNT( id )
FROM jos_menu
WHERE type = 'content_item_link'
AND published = 1
вызывается в функции getContentItemLinkCount (/includes/joomla.php)
Цель - определить количество ссылок на содержимое. Как и ранее, можно попробовать заменить
if ($_Itemid == '' && $link && $this->getContentItemLinkCount()) {
на
if ($_Itemid == '' && $link) {
в файле /includes/joomla.php
16.SELECT id
FROM jos_menu
WHERE type = 'content_item_link'
AND published = 1
AND link = 'index.php?option=com_content&task=view&id=2254'
вызывается в функции getItemid в /includes/joomla.php
17-19.SELECT m.* FROM jos_menu AS m
WHERE menutype='mainmenu' AND published='1' AND access <= '0' AND parent=1
ORDER BY ordering
SELECT m.* FROM jos_menu AS m
WHERE menutype='mainmenu' AND parent>0 AND published='1'
SELECT m.* FROM jos_menu AS m
WHERE menutype='mainmenu' AND published='1' AND access <= '0' AND parent=-1
ORDER BY ordering
Скорее всего, эти запросы соответствуют стороннему компоненту меню, для которого отключено кеширование.
20. -SELECT id, title, module, position, content, showtitle, params
FROM jos_modules AS m
INNER JOIN jos_modules_menu AS mm ON mm.moduleid = m.id
WHERE m.published = 1
AND m.access <= 0
AND m.client_id != 1
AND ( mm.menuid = 0 OR mm.menuid = 1 )
ORDER BY ordering
возникает в файле /includes/frontend.php при вызове функции initModules (обычно это происходит при вызове mosLoadModules в шаблоне).
Цель — загрузить информацию об установленных модулях. Запрос нужный — тут уж ничего не поделаешь.
21. ?SELECT id
FROM jos_menu
WHERE link = 'index.php?option=com_search'
возникает в модуле mod_search (файл /modules/mod_search.php).
Цель запроса — ищется пункт меню «Поиск» (чтобы сделать активным этот пункт меню при выдаче страницы с результатами поиска). Наличие такого запроса говорит о том, что для модуля «Поиск» не выставлено кеширование.
22. ?SELECT folder, element, published, params
FROM jos_mambots
WHERE access <= 0
AND folder = 'content'
ORDER BY ordering
Цель запроса — загрузка мамботов группы content (выполняется обычно в com_content или в модулях типа User, но может также и в сторонних компонентах/модулях). Раз происходит их загрузка, то, возможно, не для всех модулей установлено кеширование.