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

URARTU

  • Осваиваюсь на форуме
  • 16
  • 2 / 0
  • Destroyer
Не могу найти! Помогите. Как вывести?
*

flyingspook

  • Живу я здесь
  • 3590
  • 247 / 9
*

URARTU

  • Осваиваюсь на форуме
  • 16
  • 2 / 0
  • Destroyer
Re: Время генерации страницы 1.5.22
« Ответ #2 : 10.01.2011, 20:17:29 »
Опять двадцать пять. Ну уйма же ненужной(на данный момент) информации! как вывести только число генерации стр. и всё?
*

Aleks_El_Dia

  • Moderator
  • 3671
  • 353 / 0
  • AEDStudio Joomla! Direction
Re: Время генерации страницы 1.5.22
« Ответ #3 : 10.01.2011, 20:38:21 »
Опять двадцать пять. Ну уйма же ненужной(на данный момент) информации! как вывести только число генерации стр. и всё?
Нету такого.
Спам придумали боги в отместку за наши молитвы (с) Рома Воронежский
На молоко: Z369038872422 || R210017695494 || U247040729215 || ЯД 410011288250383
Мигрирую сайты, переношу расширения J!1.0->J!1.5->J!2.5. Более 50 успешных миграций.
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Время генерации страницы 1.5.22
« Ответ #4 : 10.01.2011, 21:29:57 »
Попробовать вставить в шаблон
Код: php
<?php 
global $_PROFILER;
$profiler = $_PROFILER->getBuffer();
echo $profiler[3];
?>
или написать плагин.
*

URARTU

  • Осваиваюсь на форуме
  • 16
  • 2 / 0
  • Destroyer
Re: Время генерации страницы 1.5.22
« Ответ #5 : 10.01.2011, 21:33:50 »
Ну так воть же! Включено только "отладка системы"----


Информация о профиле
Application afterLoad: 0.001 seconds, 0.39 MB
Application afterInitialise: 3.584 seconds, 3.99 MB
Application afterRoute: 3.600 seconds, 5.00 MB
Application afterDispatch: 3.651 seconds, 8.79 MB
Application afterRender: 3.993 seconds, 9.86 MB
Использование памяти
10457520
Зарегистрировано запросов: 10

   1.
      DELETE
        FROM jos_session
        WHERE ( time < '1294084084' )
   2.
      SELECT *
        FROM jos_session
        WHERE session_id = '3ed1861ed210ccde555f72686bed9d49'
   3.
      UPDATE `jos_session`
        SET `time`='1294684085',`userid`='0',`usertype`='',`username`='',`gid`='0',`guest`='1',`client_id`='0'
        WHERE session_id='3ed1861ed210ccde555f72686bed9d49'
   4.
      SELECT *
        FROM jos_components
        WHERE parent = 0
   5.
      SELECT folder AS type, element AS name, params
        FROM jos_plugins
        WHERE published >= 1
        AND access <= 0
        ORDER BY ordering
   6.
      SELECT m.*, c.`option` AS component
        FROM jos_menu AS m
        LEFT JOIN jos_components AS c
        ON m.componentid = c.id
        WHERE m.published = 1
        ORDER BY m.sublevel, m.parent, m.ordering
   7.
      SELECT template
        FROM jos_templates_menu
        WHERE client_id = 0
        AND (menuid = 0 OR menuid = 1)
        ORDER BY menuid DESC
        LIMIT 0, 1
   8.
      SELECT a.id, a.title, a.alias, a.title_alias, a.introtext, a.fulltext, a.sectionid, a.state, a.catid, a.created, a.created_by, a.created_by_alias, a.modified, a.modified_by, a.checked_out, a.checked_out_time, a.publish_up, a.publish_down, a.images, a.attribs, a.urls, a.metakey, a.metadesc, a.access, CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(':', a.id, a.alias) ELSE a.id END AS slug, CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS(":", cc.id, cc.alias) ELSE cc.id END AS catslug, CHAR_LENGTH( a.`fulltext` ) AS readmore, u.name AS author, u.usertype, g.name AS groups, u.email AS author_email, cc.title AS category, s.title AS section, s.ordering AS s_ordering, cc.ordering AS cc_ordering, a.ordering AS a_ordering, f.ordering AS f_ordering
        FROM jos_content AS a
        INNER JOIN jos_content_frontpage AS f
        ON f.content_id = a.id
        LEFT JOIN jos_categories AS cc
        ON cc.id = a.catid
        LEFT JOIN jos_sections AS s
        ON s.id = a.sectionid
        LEFT JOIN jos_users AS u
        ON u.id = a.created_by
        LEFT JOIN jos_groups AS g
        ON a.access = g.id
        WHERE 1
        AND a.access <= 0
        AND a.state = 1
        AND (( cc.published = 1
        AND s.published = 1 ) OR ( a.catid = 0
        AND a.sectionid = 0 ) )
        AND ( a.publish_up = '0000-00-00 00:00:00' OR a.publish_up <= '2011-01-10 18:28:07' )
        AND ( a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2011-01-10 18:28:07' )
        ORDER BY  f.ordering
        LIMIT 0, 9
   9.
      SELECT a.id, a.title, a.alias, a.title_alias, a.introtext, a.fulltext, a.sectionid, a.state, a.catid, a.created, a.created_by, a.created_by_alias, a.modified, a.modified_by, a.checked_out, a.checked_out_time, a.publish_up, a.publish_down, a.images, a.attribs, a.urls, a.metakey, a.metadesc, a.access, CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(':', a.id, a.alias) ELSE a.id END AS slug, CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS(":", cc.id, cc.alias) ELSE cc.id END AS catslug, CHAR_LENGTH( a.`fulltext` ) AS readmore, u.name AS author, u.usertype, g.name AS groups, u.email AS author_email, cc.title AS category, s.title AS section, s.ordering AS s_ordering, cc.ordering AS cc_ordering, a.ordering AS a_ordering, f.ordering AS f_ordering
        FROM jos_content AS a
        INNER JOIN jos_content_frontpage AS f
        ON f.content_id = a.id
        LEFT JOIN jos_categories AS cc
        ON cc.id = a.catid
        LEFT JOIN jos_sections AS s
        ON s.id = a.sectionid
        LEFT JOIN jos_users AS u
        ON u.id = a.created_by
        LEFT JOIN jos_groups AS g
        ON a.access = g.id
        WHERE 1
        AND a.access <= 0
        AND a.state = 1
        AND (( cc.published = 1
        AND s.published = 1 ) OR ( a.catid = 0
        AND a.sectionid = 0 ) )
        AND ( a.publish_up = '0000-00-00 00:00:00' OR a.publish_up <= '2011-01-10 18:28:07' )
        AND ( a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2011-01-10 18:28:07' )
        ORDER BY  f.ordering
  10.
      SELECT id, title, module, position, content, showtitle, control, params
        FROM jos_modules AS m
        LEFT JOIN jos_modules_menu AS mm
        ON mm.moduleid = m.id
        WHERE m.published = 1
        AND m.access <= 0
        AND m.client_id = 0
        AND ( mm.menuid = 1 OR mm.menuid = 0 )
        ORDER BY position, ordering

Языковые файлы загружены

    * /home/***to/public_html/language/ru-RU/ru-RU.ini 1
    * /home/***to/public_html/administrator/language/ru-RU/ru-RU.plg_system_captcha.ini
    * /home/***to/public_html/administrator/language/en-GB/en-GB.plg_system_captcha.ini 1
    * /home/***to/public_html/language/ru-RU/ru-RU.plg_system_debug.ini 1
    * /home/***to/public_html/administrator/language/ru-RU/ru-RU.plg_system_cdscriptegrator.ini
    * /home/***to/public_html/administrator/language/en-GB/en-GB.plg_system_cdscriptegrator.ini 1
    * /home/***to/public_html/language/ru-RU/ru-RU.com_content.ini 1
    * /home/***to/public_html/language/ru-RU/ru-RU.plg_content_pagebreak.ini 1
    * /home/***to/public_html/language/ru-RU/ru-RU.tpl_theme213.ini
    * /home/***to/public_html/language/en-GB/en-GB.tpl_theme213.ini
    * /home/***to/public_html/language/ru-RU/ru-RU.mod_mainmenu.ini 1

Диагностика непереведённых строк

Нет

Дизайнер непереведённых строк
*

URARTU

  • Осваиваюсь на форуме
  • 16
  • 2 / 0
  • Destroyer
Re: Время генерации страницы 1.5.22
« Ответ #6 : 10.01.2011, 21:35:53 »
Что-то я не пойму, эта функция никому не нужна была ещё? я в шоке!
*

Alldar

  • Завсегдатай
  • 1504
  • 195 / 1
Re: Время генерации страницы 1.5.22
« Ответ #7 : 10.01.2011, 21:40:47 »
вам выше написали об этом
Цитировать
включи в настройках отладку
*

URARTU

  • Осваиваюсь на форуме
  • 16
  • 2 / 0
  • Destroyer
Re: Время генерации страницы 1.5.22
« Ответ #8 : 10.01.2011, 21:53:29 »
Попробовать вставить в шаблон
Код: php
<?php 
global $_PROFILER;
$profiler = $_PROFILER->getBuffer();
echo $profiler[3];
?>
или написать плагин.
Call to a member function getBuffer() on a non-object in /home/***/index.php on line 447

вам выше написали об этом

Слишком много не нужной информации!! Я выше писал про это...
*

Alldar

  • Завсегдатай
  • 1504
  • 195 / 1
Re: Время генерации страницы 1.5.22
« Ответ #9 : 10.01.2011, 21:58:51 »
и что? вы не можете отделить нужное от ненужной? Это техническая информация смысл извращаться, тем более вам нужны только верхние строчки
*

URARTU

  • Осваиваюсь на форуме
  • 16
  • 2 / 0
  • Destroyer
Re: Время генерации страницы 1.5.22
« Ответ #10 : 10.01.2011, 22:02:19 »
С разбегу не могу. Отделить не знаю где, надо копать код, а времени нет... Неужели на такое способна только joostina, и только там был увиден смысл вывода только этой информации?
*

justsome

  • Осваиваюсь на форуме
  • 14
  • 0 / 0
Re: Время генерации страницы 1.5.22
« Ответ #11 : 26.01.2011, 21:30:02 »
Как вариант:
в корневой index.php в самом начале добавить
Код: php
define('tstart',microtime(true));
и в конце:
Код: php
echo 'time: ',(microtime(true) - constant('tstart'));

Оно работает везде, а не только в Joomla.

ПС: не уверенн будет ли работать функция getmicrotime() в Винде.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

php скрипт для вызова url адреса открытой страницы

Автор bigrash

Ответов: 10
Просмотров: 6900
Последний ответ 17.02.2024, 20:12:05
от Vastriet
Вместо некоторых разделов стали отображаться пустые страницы

Автор ch

Ответов: 0
Просмотров: 1268
Последний ответ 04.12.2020, 15:07:27
от ch
Страницы не прогружаются до конца

Автор HeroYukki

Ответов: 0
Просмотров: 1369
Последний ответ 11.09.2018, 21:12:00
от HeroYukki
Вместо главной страницы - содержимое файла корневого каталога index.php

Автор Igoritaly

Ответов: 2
Просмотров: 2157
Последний ответ 10.08.2017, 17:03:57
от Gosha5767
Не открываются некоторые страницы сайта

Автор nadin

Ответов: 5
Просмотров: 1952
Последний ответ 12.04.2017, 18:34:22
от SeBun