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

d9k

  • Осваиваюсь на форуме
  • 16
  • 1 / 1
  • Дмитрий
Здравствуйте! Разрабатываю простенький компонент для Joomla 2.5.
Уже несколько дней не могу понять, как заставить работать orderup и orderdown- кнопки. Или хотя бы перехватывать от них сообщения в контроллере и обрабатывать самому.

Код в views/[all]/default_body.php:
Код
            <span><?php echo $this->pagination->orderUpIcon($i, ($i > 0), 'orderup'); ?></span>
            <span><?php echo $item->ordering; ?></span>
            <span><?php echo $this->pagination->orderDownIcon($i, $n, ($i < $n), 'orderdown')?></span>
Кнопки выводятся, но при нажатии на них ничего не происходит.
И с отладчиком мучался, и код исходный читал, сравнивал со "стандартными" компонентами. Сил моих больше нет.
Всё, что нагуглил, очень запутанное, устаревшее и не работает:
http://blog.actsmedia.com/2009/11/joomla-component-ordering-positioning-rows/
http://forum.joomla.org/viewtopic.php?t=413577

Есть ли в интернете нормальные туториалы или, может быть, исходники простеньких компонентов, в коде которых это всё объяснено?

Меня, так же, крайне удивляет скудность и запутанность стандартной документации для разработчика компонентов Joomla. То есть, до какого-то уровня всё просто и понятно, потом начинается сложность и запутанность, а потом мрак и костыли. очень много страниц документации от Joomla 1.5 удалено вместо переписывания под J2.5. И эти люди хотят, чтобы их CMS использовали как можно больше людей.  crazy!

Я, действительно, настолько разочарован сложностью разработки даже простых компонентов, что подумываю о смене CMS.
« Последнее редактирование: 03.08.2013, 20:14:07 от d9k »
*

d9k

  • Осваиваюсь на форуме
  • 16
  • 1 / 1
  • Дмитрий
Обнаружил отладчиком, поставленным на точку входа компонента, что события orderup и orderdown по умолчанию повешены на JControllerAdmin.reorder() в JControllerAdmin.taskmap.
Буду разбираться дальше.
« Последнее редактирование: 03.08.2013, 20:14:22 от d9k »
*

d9k

  • Осваиваюсь на форуме
  • 16
  • 1 / 1
  • Дмитрий
Уффф... Заработало
Компонент назывался ColorLinks.

Значит,
 в ColorLinksControllerColorLinks скопировал метод JControllerAdmin->reorder(),
 в ColorLinksModelColorLink метод JModelAdmin->reorder(),
 в ColorLinksTableColorLink метод JTable->move()
вроде бы удалил всякие проверки на права и то, что было связано со всякими asset'ами (мой компонент не использует настройку прав пользователей и, соответственно, таблицу assets) и, непонятным чудом, всё стало работать.

В NetBeans отлаживал запросы к таблице, создав наблюдение (string)$query, базу данных проверял по HeidiSQL. Без отладки бы точно не разобрался.
Сейчас буду думать, как сделать автоматическую коррекцию ordering перед показом списка, потому что ошибки нумерации накапливаются, например при удалении элемента.
« Последнее редактирование: 03.08.2013, 20:14:28 от d9k »
*

SDKiller

  • Живу я здесь
  • 2705
  • 329 / 5
  • ...ergo sum
... потому что ошибки нумерации накапливаются, например при удалении элемента.

Добавьте после успешного удаления элемента вызов пересортировки.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Увеличьте размер активных элементов на странице

Автор leo78

Ответов: 1
Просмотров: 1952
Последний ответ 31.07.2015, 14:23:24
от leo78
Поле вывода календаря как d-m-Y. XML элемент календарь

Автор oppo

Ответов: 0
Просмотров: 1566
Последний ответ 19.07.2014, 15:43:47
от oppo
Условия вывода <div class=""> в меню

Автор Snippet

Ответов: 1
Просмотров: 2249
Последний ответ 19.06.2014, 04:30:26
от Snippet
[Решено] Пагинация в Joomla 2.5 Жестко прописать количество элементов на страницу

Автор Зверушь

Ответов: 4
Просмотров: 3516
Последний ответ 10.01.2014, 16:03:03
от Зверушь
Модуль вывода статей

Автор Kulgar

Ответов: 1
Просмотров: 993
Последний ответ 24.12.2013, 21:38:18
от Kulgar