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

Rivvil

  • Осваиваюсь на форуме
  • 12
  • 1 / 0
Всем привет.
Уже не первый раз при написании модулей с динамическим содержимым сталкиваюсь с проблемой. При отключенном кэше все работает нормально, при включении в глобальных настройках Стандартного кэша начинаются странные вещи.
Модули просты до безобразия. К примеру, последним делал модуль для отображения результатов гуглевского поиска. То есть все, что делает модуль - вставляет на страницу div, в который уже потом через JS (скрипты я встраиваю через $document->addScriptDeclaration) с Google подгружаются данные. При включении кэша первый поисковый запрос обрабатывается нормально. При следующем же запросе, судя по всему, никакие скрипты не выполняются, из Google ничего не приходит. На странице остается "голый" div.
В настройках модуля присутствуют параметры управления кэшем:
Код
<field
name="cache"
type="list"
default="1"
label="COM_MODULES_FIELD_CACHING_LABEL"
description="COM_MODULES_FIELD_CACHING_DESC">
<option value="1">JGLOBAL_USE_GLOBAL</option>
<option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option>
</field>
<field
name="cache_time"
type="text"
default="900"
label="COM_MODULES_FIELD_CACHE_TIME_LABEL"
description="COM_MODULES_FIELD_CACHE_TIME_DESC" />
Однако выключение кэша через эти параметры не дает никакого положительного эффекта.
Самое простое, что приходит на ум в данном случае - как-то программно запретить кешировать мой модуль (все равно данные всякий раз будут на лету генерироваться). Но как это сделать?
Сомнения внушает то, что не выполняются клиентские скрипты, которые даже при включенном кэше находятся на странице.
Может, я вообще не понимаю проблемы?
*

co11ter

  • Захожу иногда
  • 151
  • 8 / 0
Re: Проблемы с кэшированием модулей
« Ответ #1 : 03.03.2012, 15:12:41 »
версия Joomla?

Для Joomla 1.5 в XML файл модуля вставляем
Код
<param name="cache" type="list" default="1" label="Caching" description="Select whether to cache the content of this module">
<option value="1">Use global</option>
<option value="0">No caching</option>
</param>
В настройках модуля отключаем кэширование
« Последнее редактирование: 03.03.2012, 15:18:46 от co11ter »
*

Rivvil

  • Осваиваюсь на форуме
  • 12
  • 1 / 0
Re: Проблемы с кэшированием модулей
« Ответ #2 : 03.03.2012, 15:39:43 »
версия Joomla?
Извиняюсь, совсем забыл. Joomla 1.7.3
Для Joomla 1.5 в XML файл модуля вставляем
У меня в XML-файле уже прописана подобная конструкция (только для соответствующей версии Joomla).
В настройках модуля отключаем кэширование
Это я уже пробовал, отключение кэша в настройках модуля проблем не решает.
Модули работают нормально только при отключении кэша в глобальных настройках.
*

genetics

  • Захожу иногда
  • 51
  • 5 / 0
  • «GeneticsPro»
Re: Проблемы с кэшированием модулей
« Ответ #3 : 10.05.2013, 15:59:45 »
Rivvil. Вы решили эту проблему?
Если да, то поделитесь как...
*

artlux

  • Захожу иногда
  • 466
  • 58 / 0
Re: Проблемы с кэшированием модулей
« Ответ #4 : 12.05.2013, 19:34:59 »
Если входные параметры получаете из jrequest например, то приходится сразу отключать кеш в модуле... Joomla 2.5

я например делаю так
Код
<field name="cache" type="hidden"
default="0"
label="COM_MODULES_FIELD_CACHING_LABEL"
description="COM_MODULES_FIELD_CACHING_DESC"
>
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>

далее добавляем параметр кеша свой

Код
<field name="cached" type="list"
default="1"
label="COM_MODULES_FIELD_CACHING_LABEL"
description="COM_MODULES_FIELD_CACHING_DESC"
>
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>

далее в модуле формируем нужный нам ключ кеширования после получения параметров и переменных c jrequest

Код
$cached = $params->get( 'cached', 1 );
$key = 'mod_mymodule.'.$var1.'.'.$var2.'.'.$var3.'.'.$var4; //и т.п. - это ключ кеширования
$cache = JFactory::getCache('mod_mymodule', 'output'); //папка для кеша + группа кеша (группу можно не указывать)
if($cached==1){
$cache->setCaching(1);
}

Код
if (!($output = $cache->get($key))) { //если кеша нет
ob_start();
/* грузим шаблон */
require(JModuleHelper::getLayoutPath('mod_mymodule',$layout));
$output = ob_get_clean();
$cache->store($output, $key);
}
echo $output; //вывод если кеш есть


Цитировать
Самое простое, что приходит на ум в данном случае - как-то программно запретить кешировать мой модуль
тут скорее не в модуле проблемы, а в компонентах или плагинах которые вы используете вместе с модулем
либо получаете данные прямо в шалоне а не во входном файле модуля (как предположение JModuleHelper::getLayoutPath - возможно кеширует данные дополнительно, ну это предположение и ничего больше)...

Поделился с тем, чем сталкивался при разработке модулей. Возможно кому-то поможет
« Последнее редактирование: 13.05.2013, 05:37:20 от artlux »
Разработка расширений: Joomla 1.5+, Bitrix 12+, Мобильные приложения для сайтов под Android (PhoneGap).
Для бонусов: Z136221252622, R242724126443, U423945028202. +79211696184(Мегафон), или плюсик в репу!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Нумерация модулей

Автор fiter

Ответов: 1
Просмотров: 1327
Последний ответ 15.07.2014, 02:05:53
от fiter
Получить количество активных модулей в определенной позиции

Автор zemelea

Ответов: 2
Просмотров: 1992
Последний ответ 18.02.2014, 11:13:05
от Aleks.Denezh
параметры в XML модулей

Автор ht1515

Ответов: 6
Просмотров: 4829
Последний ответ 11.02.2013, 19:41:00
от v-idea
Где находится php скрипт формирования модулей <jdoc:include type="modules" name="menu" style="xhtml

Автор ladan

Ответов: 6
Просмотров: 3988
Последний ответ 10.12.2012, 12:55:10
от ladan
Предложение разработчикам модулей включать параметр выбора layout'а модуля

Автор danik.html

Ответов: 8
Просмотров: 15576
Последний ответ 01.11.2011, 18:44:19
от smart