Новости 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 Ответов
  • 1878 Просмотров
*

Alexpro2011

  • Захожу иногда
  • 195
  • 8 / 1
Уважаемые пользователи!

Что делать, если jQuery подключается не однократно к сайту?
Стоит simpleForm2 и AJAX Header Rotator, и то то использует эту библиотеку, из за этого simpleForm2 при отправке письма переносит пользователя на пустую страницу!
Как избавится от данного глюка, может есть плагин, который следит и пресекает все это буйство модулей?

За ранее при много благодарен!
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Как избавится от данного глюка, может есть плагин, который следит и пресекает все это буйство модулей?
такого плагина не будет.
Т.к. каждое расширение таскает свои библиотеки.
Если уверены что используются одинаковые версии и будет все работать на одной, то только лезть внутрь и отключать.
*

Alexpro2011

  • Захожу иногда
  • 195
  • 8 / 1
SmokerMan, как вы думаете, а вот такой метод поможет?:

1. Самый простой и безопасный:
Открываем саму библиотеку, и оборачиваем ее таким вот образом:

Код
 
// !
// Sometimes jQuery can be included more then ones,
// and after each next including
// all jquery-plugins removing automatically.
// That is why next check-code was set.
// This code initing jQuery
// just if it was not inited early.
if(window.jQuery == undefined) {
// здесь будет весь исходный код jQuery
//...
}
После этого можно переименовать имя файла, к примеру, на такое:
jquery-1.3.2.if-undefined.min.js во избежание случайного перетирания и подключать его. Хотя в этом случае придется изменить имя библиотеки во всех файлах где она подключается, а это не очень эффективно. К тому же в будущем может найтись человек, который не будет знать об этом фиксе или просто забудет о нем, и подключит библиотеку со стандартным именем.
Если же имя оставить стандартным, эта защита сработает везде автоматически.
Так что решать Вам.

Недостаток этого фикса тот, что библиотека может полностью подгружаться несколько раз. Хотя, если Вы не используете различные javascript-миксеры, оптимизацию яваскриптового кода путём склеивания, прочее, то, скорее всего, браузер просто повторно возьмёт эту библиотеку со своего кэша. Тем не менее есть второй, более красивый вариант:

2. Этот способ заключается в том, чтобы проверить яваскриптом инициализирована ли библиотека, и если нет – то сгенерировать запрос на ее подключение. Делается это просто:
 
Код
<script type="text/javascript"> 
if(window.jQuery==undefined) {
document.write(unescape("%3Cscript src='/js/jquery-1.3.2.min.js' type='text/javascript'%3E%3C/script%3E"));
}
</script>

Особенностью данного метода является то, что jQuery начнёт грузиться только после полной загрузки страницы. Это значит, что Вы должны учесть это, чтобы Ваш код не начал выполнять раньше чем подключится библиотера. А также все плагины придется подключить таким же образом через document.write.
« Последнее редактирование: 16.03.2011, 19:07:03 от Alexpro2011 »
*

Alexpro2011

  • Захожу иногда
  • 195
  • 8 / 1
Кстати 1 метод отлично сработал, Ура товарищи!
Проще не бывает)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Чем лучше всего делать резервные копии сайта?

Автор 7Azimuth

Ответов: 115
Просмотров: 59032
Последний ответ 29.11.2023, 14:41:12
от sivers
Поиск по сайту

Автор smadkz

Ответов: 0
Просмотров: 1620
Последний ответ 09.11.2018, 09:13:30
от smadkz
Подскажите по совместимости jquery

Автор M60aut

Ответов: 0
Просмотров: 1323
Последний ответ 10.02.2017, 11:05:05
от M60aut
Как вызвать модуль с текстом, если не работает админка?

Автор kirill-juk

Ответов: 2
Просмотров: 2362
Последний ответ 19.11.2016, 00:43:18
от SeBun
нужна помошь по сайту для слабовидящих

Автор twitti

Ответов: 0
Просмотров: 1478
Последний ответ 18.08.2016, 17:38:14
от twitti