Новости 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 Гость просматривают эту тему.
  • 11 Ответов
  • 2679 Просмотров
*

Dram

  • Захожу иногда
  • 211
  • 1 / 0
Как зная ID материала получит на него ссылку ЧПУ? 

У меня такая структура - категории висят на меню, далее подкатегория и материал.
*

sivers

  • Живу я здесь
  • 2596
  • 360 / 0
Код
$link = JRoute::_('index.php?option=com_content&view=article&id=161&Itemid=124');
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Dram

  • Захожу иногда
  • 211
  • 1 / 0
Так уже пробовал -

$link = JRoute::_('index.php?option=com_content&view=article&id=161&Itemid=2801');
echo $link;
выдает /component/content/?id=161&Itemid=2801
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Itemid=2801 - у вас есть пункт меню с id 2801 ?  :o
*

Dram

  • Захожу иногда
  • 211
  • 1 / 0
Мне нужно получить ЧПУ зная только id материала и все
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
а без Itemid вы не получите URL с привязкой к меню, надо доп.запрос к базе делать, такой примерно:
Код: php
$article_id = 161; /* id вашего материала */
$db = Factory::getDbo();
$Itemid = (int)$db->setQuery('select `id` from `#__menu` where `type`="component" and `component_id`=22 and `link` like "%id=' . $article_id . '%"')->loadResult();

теперь в $Itemid будет искомое id связанного пункта меню или 0, если пункт меню не найден, если найден - значение всегда более 100
*

Dram

  • Захожу иногда
  • 211
  • 1 / 0
Попробовал - ничего не выдало. Напоминаю что на меню у меня висят только категории, а не материалы. Не понимаю смысл этой части
`link` like "%id=
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Не понимаю смысл этой части
Код
`link` like "%id=' . $article_id . '%"'
на выходе в запросе это будет выглядеть как
Код
`link` like "%id=161%"'
sql-оператор link позволяет задавать условие с нестрогим соответствием по маске, символ % - любой символ в искомой строке

смысл всего запроса: найти id пункта меню, который имеет тип компонент, привязан к компоненту com_content (его id всегда 22, но это можно уточнить в таблице extensions), а поле link, которое содержит не-sef ссылку, ссылается на объект материала с искомым id (в частном случае 161)

если материал не привязан непосредственно к пункту меню - запрос вернёт 0
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
а вообще изначально некорректно подошли к проблеме, для материалов и их категорий есть отдельная функция получения ссылки:
Код
Joomla\CMS\HTML\HTMLHelper::addIncludePath(JPATH_ROOT . '/components/com_content/helpers');
$link = Joomla\CMS\Router\Route::_(ContentHelperRoute::getArticleRoute($article->slug, $article->catid, $article->language)); /* последний параметр необязателен, если у вас нет мультияза */

$article->slug формируется как $article->id . ':' . $article->alias;
« Последнее редактирование: 14.06.2019, 08:27:05 от AlekVolsk »
*

Dram

  • Захожу иногда
  • 211
  • 1 / 0
Спс не проверял вашу подсказу, сделал по другому :)))
У меня был массив ссылок НЕ ЧПУ.
Я включил на сайте плагин ноудублес и прошелся курлом по этим ссылкам собирая конечную после переадресации в массив :)))
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
оч странный подход, что-то изменится, добавится/удалится - и накроется ваш метод, или вы каждый раз так делать будете?
*

Dram

  • Захожу иногда
  • 211
  • 1 / 0
Мне это нужно было однократно :)))
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Нужна проф помощь в обновлении Joomla на лок.сервере osp. Можно платно

Автор Fati

Ответов: 0
Просмотров: 5112
Последний ответ 16.06.2025, 16:40:04
от Fati
Помогите с БАГом в панели администратора Joomla 3

Автор akteon25

Ответов: 2
Просмотров: 2164
Последний ответ 26.02.2025, 16:41:56
от akteon25
Версии РНР и Joomla 3

Автор Ebelous

Ответов: 8
Просмотров: 3910
Последний ответ 27.01.2025, 20:38:45
от pavelrer
Исчез компонент 'Поля' из меню в админке

Автор goga_pgasovav

Ответов: 2
Просмотров: 2137
Последний ответ 23.12.2024, 22:31:21
от goga_pgasovav
Trouble Upgrading from Joomla 3.8 to 3.9

Автор melissa00

Ответов: 0
Просмотров: 2694
Последний ответ 26.07.2024, 10:03:51
от melissa00