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

Kostimur

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
  • Создание сайтов www.vislittera.com
Привет всем, работаю над проектом(10000 товаров, около 600 категорий-подкатегорий), но столкнулся с проблемой большого количества запросов к БД
Сначала хотел использовать красивое дерево от фока, но оно приносило с собой 2600 запросов, а с СЕФ все 5500 запросов.
Аналогичный штатному(ограниченно 2х уровневый) каталог приносит около 200 запросов, а с СЕФ 1000запросов.
В нашем каталоге 10 главных разделов. Появилась мысль разбить каталог на 10 частей(благо есть возможность скопировать модуль каталога 10 раз и назначить каждому свой верхний уровень каталога), чтобы уменьшить количество запросов.
Для этого я установил плагин всплывающих окон, создал статичное меню с 10 главными разделами, и каждому разделу назначил свое всплывающее окно, за которыми закреплены каждые из 10 продублированных модулей. Т.е. простыми словами, у меня статичное меню в HTML модуле с 10 ссылками разделами - 1,2,3,4,5,6,7,8,9,10. Нажимая на раздел №1 открывается
всплывающее окно и в нем появляются все подразделы раздела №1. как на сайте http://www.etm.ru/cat/katclass/
Все конечно очень хорошо, но есть одно но. Идея уменьшить запросы не достигнута, т.к. все что выводят все эти всплывающие окна - загружается вместе со страницей,
выводит или не выводит пользователь всплывающее окно, запросы каждый раз идут с перезагрузкой страницы.
Как решить? кто знает? Как сделать чтобы структура каталога делала запросы в базу только по КЛИКУ ? и уже после появлялось всплывающее окно со структурой разделов

Или еще вариант. Есть мысль, создать 10 страниц(т.к. главных разделов 10), на каждую вывести свой модуль своей категории. Создать 10 HTML модулей, в каждом прописать через <iframe src="ссылка на страницу.php"></iframe>  и подключить эти модули в позиции всплывающего окна. Все хорошо, Кликаем, пошли обращения в БД(до клика обращений НЕТ), открывается iframe во всплывающем окне, НО при переходе по категории меню, мы остаемся там же во фрейме.
Как заставить перейти скрипт назад и закрыть за собой всплывающее окно с фреймом?
« Последнее редактирование: 16.07.2012, 17:26:21 от Kostimur »
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Цитировать
Как заставить перейти скрипт назад и закрыть за собой всплывающее окно с фреймом?
http://joomlaforum.ru/index.php/topic,220388.msg1154737.html#msg1154737
Создание сайтов, шаблонов, помощь в решении проблем.
*

Kostimur

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
  • Создание сайтов www.vislittera.com
Да, извиняюсь я не уточнил, у меня используется модальное окно-всплывающее окно на переднем плане, и после выбора категории нужно вернуться обратно в тоже окно откуда пришел, думаю мне это решение не подходит
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Цитировать
и после выбора категории нужно вернуться обратно в тоже окно откуда пришел, думаю мне это решение не подходит
После выбора категории вам нужно попасть на страницу категории, которую выбрали, я так понимаю.
То есть так
Вы выбираете категорию во всплывающем окне. Переход на нужную страницу происходит, но вас не устраивает, что он происходит во фрейме, а не на основном сайте? Так?
Создание сайтов, шаблонов, помощь в решении проблем.
*

Kostimur

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
  • Создание сайтов www.vislittera.com
........Переход на нужную страницу происходит, но вас не устраивает, что он происходит во фрейме, а не на основном сайте? Так?
Да Вы все верно говорите,
У меня так и было ранее, когда я просто подключил модуль категорий ВМ2 к всплывающему модальному окну, при переходе окно закрывалось и я попадал на то же окно главной страницы и даже дальше - в раздел меню Каталог, Но т.к. модальное окно имеет свойство подгрузить себе данные вместе с загрузкой, я имел 200 запросов в БД независимо буду я выводить модальное окно или дальше пойду гулять по сайту.
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Нифига не понял. Я вам говорю, как перейти по нужной ссылке, одновременно закрывая фрейм, а вы говорите, что это не то.
Создание сайтов, шаблонов, помощь в решении проблем.
*

Kostimur

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
  • Создание сайтов www.vislittera.com
а Вы можете подсказать что где подправить?
1. Возможно ли изменить модуль модального окна от S5 чтобы он не грузил в фоне подключенный модуль каталога?
Модуль всплывающего окна от S5 http://talk-it.com.ua/дополнения-joomla/все-материалы-блога/joomla/модули-компонетны-плагины-для-joomla-1-5-1-7-2-5/модуль-s5-box-помещает-любой-модуль-во-всплывающее-ок
2. Если использовать страницу с модулем каталога и выводить во фрейме окна S5, что нужно править? сам модуль каталога?
Модуль каталога http://extensions.joomla.org/extensions/extension-specific/virtuemart-extensions/virtuemart-categories/21393
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Цитировать
Если использовать страницу с модулем каталога и выводить во фрейме окна S5, что нужно править? сам модуль каталога?
Вы как-то расплывчасто вопросы ставите... Что такое модуль каталога? Модуль категорий? У вас должны быть разные модули. Один выводит в основном окне категории, другой во фрейме подкатегории. Так?
Создание сайтов, шаблонов, помощь в решении проблем.
*

Kostimur

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
  • Создание сайтов www.vislittera.com
Категории, каталог, раздел это все об одном и том же. Есть модуль меню который выводит структуру каталога Virtuemart2. Если его прикрутить к странице, то с загрузкой страницы будет подгружена вся структура этого меню. Т.е. без этого меню я имею 30 запросов к БД, а с этим меню 200 запросов. Это очень много, с учетом того что часть посетителей вообще не будет пользоваться этим меню.
Вот я их хочу чтобы это меню как бы отсутствовало на странице(не подгружалось и не делало запросы к БД), НО если посетителю оно нужно, он смог бы вывести его во всплывающем окне.
Тем самым я экономлю место на странице и разгружаю сайт(в плане запросов к БД)
Итак я установил всплывающее S5окно, установил в него модуль структуры каталога Virtuemart2, Окно всплывает, при переходе окно закрывается и я попадаю на страницу куда нужно.
НО как с прямой установкой модуля структуры каталога Virtuemart2 на страницу, так и через всплывающее окно, около 200 запросов к БД так и остались.
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Я о грешном, вы о праведном... :)
Я рассматривал только вариант с фреймом. Зачем вы мне опять про 200 запросов? Насколько я понял, у вас была проблема всего лишь фрейм закрыть... К чему всё вышеописаное?
Создание сайтов, шаблонов, помощь в решении проблем.
*

Kostimur

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
  • Создание сайтов www.vislittera.com
Я о грешном, вы о праведном... :)
Просто я не знаю какой вариант лучше использовать, вот и рассказываю Вам всю историю, чтобы Вы посоветовали какой лучше, первый вариант это заставить модальное окно не грузиться в фоне со страницей а только после клика на раскрытие окна(что более привлекательно)
И второй это вариант с фреймом,
Хотел услышать мнение со стороны, может от какого то варианта лучше отказаться?
Вы уж не серчайте сильно, но я рассчитывал на помощь типа, в файле таком-то, этот код замените на этот и будет вам счастье, понимаю, нужно ставить себе эти модули чтобы понять.
Но не так нет, буду пытаться, может тут подправить?

<script language="javascript" type="text/javascript">
var $TCVN = jQuery.noConflict();
$TCVN(document).ready(function() {
   $TCVN('#VMmenu<?php echo $id; ?> li ul').hide();   
   
   var cclass = '';
   
   $TCVN('#VMmenu<?php echo $id; ?> li').mouseenter(function() {
      $TCVN('#VMmenu<?php echo $id; ?> li.VmClose ul').hide();
      if($TCVN(this).children('ul').is(':hidden')) {
         $TCVN(this).children('ul').slideDown(350, 'linear');
         cclass = $TCVN(this).attr('class');
         $TCVN(this).addClass('VmOpen').removeClass(cclass);
      }
   }).mouseleave(function() {
      $TCVN(this).addClass(cclass).removeClass('VmOpen');
      $TCVN(this).children('ul').slideUp(350, 'linear');
   });
});
</script>
« Последнее редактирование: 17.07.2012, 15:03:40 от Kostimur »
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Что вы хотите подправить? Чтоб фрейм ссылка закрывала или опять что-то своё? :)
Создание сайтов, шаблонов, помощь в решении проблем.
*

Kostimur

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
  • Создание сайтов www.vislittera.com
Так я описал проблему проблему вдоль и поперек, я не знаю точно тут нужно править или не тут, и не знаю каким из двух вариантов воспользоваться и будет решить легче,
Вы хоть скажите, что нибудь посоветуйте, вот ссылку я ранее указывал http://www.etm.ru/cat/katclass/
меню наверху, как так сделать?
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Цитировать
Вы хоть скажите, что нибудь посоветуйте, вот ссылку я ранее указывал http://www.etm.ru/cat/katclass/
меню наверху, как так сделать?
Ну так вы же сами предложили. Или AJAX или фрейм.
Если использовать AJAX, и подгружать менюшку со ссылками, то я не знаю, сможет ли к ним поисковик добраться. А если во фрейме, то сможет. Вобщем ваше дело. Я вызвался только фрейм закрыть. В модуле там где вы скрипт взяли, чуть выше разметка.
этот код
Цитировать
<?php echo JHTML::link($caturl, $cattext); ?>
замените на этот
Цитировать
<?php echo JHTML::link($caturl, $cattext, array('onclick' => 'window.parent.location.href=href')); ?>
Создание сайтов, шаблонов, помощь в решении проблем.
*

Kostimur

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
  • Создание сайтов www.vislittera.com
Спасибо большое, все получилось)
и даже больше, тут нашел описание как вывести только модуль по ссылке, эти ссылки и поставил во фрейм
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться