Новости Joomla

Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях

Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях

👩‍💻 Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях. На старте его сайт на Joomla 3 вообще не смог обновиться на Joomla 5. Пришлось делать экспорт/импорт материалов. Проделав всё это он запустил-таки этот объём данных на Joomla 5. Тестовый скрипт грузил 200 материалов из этого объёма всего за 94 секунды ))) А главная страница с категориями грузилась 20 секунд. Добавив индекс для таблицы #__content

CREATE INDEX idx_catid_state ON #__content (catid, state);
он сократил время загрузки категорий до 1 секунды. Затем наш герой решил поковырять SQL-запрос в ArticleModel, который отвечает за выборку материалов. И решил заменить тип JOIN на STRAIGHT_JOIN для категорий.
// ->from($db->quoteName('#__content', 'a'))->from(    $db->quoteName('#__content', 'a')    . ' STRAIGHT_JOIN ' . $db->quoteName('#__categories', 'c')    . ' ON ' . $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid'))// ->join('LEFT', $db->quoteName('#__categories', 'c'), $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid'))
Что сократило загрузку 200 материалов из 150к с 94 секунд до 5. К слову сказать, боевой сайт на Joomla 3 крутится на 12CPU 64GB рамы. А все манипуляции с кодом он делает на базовом 1CPU 1GB сервере и замеры скорости даны именно для базового сервера. Но это всё в дискуссии, хотя в идеале должно вылиться в Pull Requests. Мы - Open Source сообщество, где никто никому ничего не должен. Джунгли. Но человек ищет пути оптимизации Joomla и предлагает решения. Если оказать поддержку и предложить помощь хотя бы с тестированием самых разнообразных сценариев, то возможно эти улучшения смогут войти в ядро. Пусть не быстро, пусть через несколько лет, пусть не все, но войдут. Достаточно предложить руку помощи и приложить немного усилий.
Дискуссию на GitHub можно почитать здесь.@joomlafeed#joomla #community #php

0 Пользователей и 1 Гость просматривают эту тему.
  • 2 Ответов
  • 1636 Просмотров
*

mewtwo

  • Новичок
  • 3
  • 0 / 0
У каждого пункта меню есть свой псевдоним (alias). В файле helper.php я могу вывести его в качестве имени стиля для ссылок
Код
switch ($tmp->browserNav)
   {
default:
case 0:
// _top
   $data = '<a class="'.$item->alias.'" href="'.$tmp->url.'">'.$image.$tmp->name.'</a>';
   break;

в HTML получается следующее:
Код
<ul class="menu">
<li><a class="menu1" href="index.php">Главная страница</a></li>
<li><a class="menu2" href="#">Пункт 1</a>
       <ul>
<li><a class="2010-07-04-18-12-52" href="#">П/пункт 1</a></li>
<li><a class="2010-07-04-18-12-53" href="#">П/пункт 2</a></li>
        </ul>
</li>
<li><a class="menu3" href="#">Пункт 2</a>
       <ul>
<li><a class="2010-07-04-18-12-54" href="#">П/пункт 1</a></li>
<li><a class="2010-07-04-18-12-55" href="#">П/пункт 2</a></li>
        </ul>
</li>
</ul>

как сделать так, чтобы выводился alias для тега <ul> подпункта меню и плюс буква (в моем случае я добавляю s), чтобы в CSS затем лучше распознать:
Код
<ul class="menu">
<li><a class="menu1" href="index.php">Главная страница</a></li>
<li><a class="menu2" href="#">Пункт 1</a>
       <ul class="smenu2">
<li><a class="2010-07-04-18-12-52" href="#">П/пункт 1</a></li>
<li><a class="2010-07-04-18-12-53" href="#">П/пункт 2</a></li>
        </ul>
<li><a class="menu3" href="#">Пункт 2</a>
       <ul class="smenu3">
<li><a class="2010-07-04-18-12-54" href="#">П/пункт 1</a></li>
<li><a class="2010-07-04-18-12-55" href="#">П/пункт 2</a></li>
        </ul>
</li>
</li>
</ul>

в самом коде пробовал по аналогии с функцией function _getItemData(&$params, $item) передавать параметр $item в функцию function _getLevelXML($depth)
но в итоге в названии выводился alias последнего пункта меню
« Последнее редактирование: 09.07.2010, 21:52:57 от mewtwo »
*

mewtwo

  • Новичок
  • 3
  • 0 / 0
В результате вышеперечисленных действий выводился в качестве стиля для <ul> псевдоним последнего пункта меню.
Может кто подскажет регулярное выражение, чтобы достать из строки название стиля menu1
Код
<a class="menu1" href="http://localhost/"><![CDATA[Главная страница]]></a>
« Последнее редактирование: 09.07.2010, 14:11:07 от mewtwo »
*

mewtwo

  • Новичок
  • 3
  • 0 / 0
Изучил регулярные выражения, оказалось все просто:
	
function 
_getLevelXML($depth)
	
{
	
	
$depth++;
	
	
$link $this->_current->link;
	
	
preg_match("/<a class\=\"(.*)\" href/i"$link$matches);
	
	

	
	
// Start the item
	
	
$rel = (!empty($this->_current->mid))? ' rel="'.$this->_current->mid.'"' ''
	
	
$this->_buffer .= '<li access="'.$this->_current->access.'" level="'.$depth.'" id="'.$this->_current->id.'"'.$rel.'>';

	
	
// Append item data
	
	
$this->_buffer .= $this->_current->link;

	
	
// Recurse through item's children if they exist
	
	
while (
$this->_current->hasChildren())
	
	
{
	
	
	
$this->_buffer .= '<ul class="s'.$matches[1].'">';
	
	
	
foreach (
$this->_current->getChildren() as $child)
	
	
	
{
	
	
	
	
$this->_current = & $child;
	
	
	
	
$this->_getLevelXML($depth);
	
	
	
}
	
	
	
$this->_buffer .= '</ul>';
	
	
}

	
	
// Finish the item
	
	
$this->_buffer .= '</li>';
	
}
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Добавление и выведение на нормальный вид верхнее меню

Автор ekaterina_rb

Ответов: 0
Просмотров: 1504
Последний ответ 24.04.2013, 10:35:39
от ekaterina_rb
mod_mainmenu добавить пару спанов

Автор NexWeb

Ответов: 1
Просмотров: 1671
Последний ответ 20.03.2013, 22:18:12
от NexWeb
Убрать ссылку с current в стандартном mod_mainmenu

Автор goga_pgasovav

Ответов: 1
Просмотров: 1597
Последний ответ 27.12.2012, 15:51:40
от Fedor Vlasenko
Автоматический вывод списка материалов в меню

Автор vladvz

Ответов: 5
Просмотров: 2715
Последний ответ 20.12.2012, 17:01:32
от tigra-uki
Как редактировать CSS главного меню ? (mod_mainmenu)

Автор Oggy

Ответов: 0
Просмотров: 1978
Последний ответ 31.05.2012, 13:00:03
от Oggy