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

igordyak67

  • Новичок
  • 3
  • 1 / 0
Уважаемые господа!

Перерыл ВСЁ! Требуется помощь, так как в интернете полного решения вопроса нет.

Суть в том, что в VM2 в связке с Joomla 2.5 изначально не выдавалась ошибка 404 при вводе некоректных URL типа: site.ru/asfasff, а перенаправляло на главную. С категориями товаров и главной страницей, вроде задачу решил путём вставки:

в /components/com_virtuemart/virtuemart.php, на строке 111, вместо

Код
$mainframe->redirect(JRoute::_ ('index.php?option=com_virtuemart&view=virtuemart', FALSE));

Данный код:

Код
JError::raise(E_ERROR,'404','Not found');
      $mainframe->close();

Но возник главный вопрос:

ЕСЛИ ТОВАР БЫЛ УДАЛЁН, ТО ПРИ ПЕРЕХОДЕ ПО ЕГО URL ССЫЛКА ПРЕОБРАЗУЕТСЯ В
site.ru/название_категории?error=404


Всё бы ничего, но мало того, что не выдаётся страница ошибки 404, поисковик получает неправильный сигнал 303. Начал смотреть решения в интернете, но таковых не оказалось, только поверхностно разбирались темы.

Вопрос с выдачей страницы error 404 решил, но сигнал всё равно передаётся неправильный.
Сделал следующее:

В templates\шаблон\html\com_virtuemart\category\default.php
Добавил после строки defined ('_JEXEC') or die('Restricted access'):

Код
$input = JFactory::getApplication()->input;
if($input->getInt('error', 0) === 404)
{
JError::raise(E_ERROR,'404','Not found');
    $mainframe->close();
}

Так как программирование знаю поверхностно, даже это далось с большим трудом. Моя задача всё-таки заставить выдавать сигнал поисковику error 404, при переходе на удалённый товар.

ПРИЛАГАЮ ИЗОБРАЖЕНИЕ С ТАКОЙ ЖЕ ПРОБЛЕМОЙ. На нём видно, что по ссылке /женская_одежда/штаны?error=404 находился товар, который ранее располагался по адресу /женская_одежда/штаны/товар

Форумчане, возможно кто-то сталкивался с таким вопросом, я уже потерял надежду решить его.

*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
А так, в лоб,
Код: php-brief
ob_end_clean();
header("HTTP/1.0 404 Not Found");
include '404.php';
exit();
не катит?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

igordyak67

  • Новичок
  • 3
  • 1 / 0
Протестировал, предложенный вариант, выводит белый экран, категории перестают работать.
В варианте, который я описал страница 404 выдаётся, но выдаётся сигнал 303 на странице site.ru/категория/удалённый_товар и перенаправляет на site.ru/категория?error=404 при этом уже выдаётся ошибка 404. Интересно как сделать, чтобы на странице site.ru/категория/удалённый_товар сразу выдавалась 404.

Код
В templates\шаблон\html\com_virtuemart\category\default.php
Добавил после строки defined ('_JEXEC') or die('Restricted access'):

Код:

$input = JFactory::getApplication()->input;
if($input->getInt('error', 0) === 404)
{
JError::raise(E_ERROR,'404','Not found');
    $mainframe->close();
}
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Протестировал, предложенный вариант, выводит белый экран
А 404.php существует?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

igordyak67

  • Новичок
  • 3
  • 1 / 0
Файл error.php существует стандартный, в папке с шаблоном. Возможно стоит в моём случае прописать такой код:
Код
ob_end_clean();
header("HTTP/1.0 404 Not Found");
include 'error.php';
exit();

Я так понял его нужно поместить вместо

Код
$input = JFactory::getApplication()->input;
if($input->getInt('error', 0) === 404)
{
JError::raise(E_ERROR,'404','Not found');
    $mainframe->close();
}

или заменить в /components/com_virtuemart/virtuemart.php, на строке 111?

вместо
Код
JError::raise(E_ERROR,'404','Not found');
      $mainframe->close();

Ваш код говорит
Если заголовок HTTP/1.0 404 Not Found, то выдавай error.php. Правильно?

Если нет, нужно ли что-то добавлять к данному коду типа if($input->getInt('error', 0) === 404)

Благодарю за проявление интереса к моему вопросу.
« Последнее редактирование: 04.12.2015, 11:32:55 от igordyak67 »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Ваш код говорит
Если заголовок HTTP/1.0 404 Not Found, то выдавай error.php. Правильно?
Нет, он просто отправляет код 404 и заодно показывает error.php, без каких-либо условий.
Не будь паразитом, сделай что-нибудь самостоятельно!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Расчёт стоимости товара в VirtueMart за периметр

Автор NIKOLY

Ответов: 0
Просмотров: 473
Последний ответ 04.07.2025, 09:18:31
от NIKOLY
VirtueMart 3 Отображать только товары в наличии!

Автор GaziroFFka

Ответов: 4
Просмотров: 3983
Последний ответ 06.06.2023, 13:55:13
от Akeksandr
SP VirtueMart Category Search

Автор ve1006

Ответов: 10
Просмотров: 7861
Последний ответ 18.01.2023, 10:39:10
от AzMandius
Как вывести ID товара в описании товара?

Автор Stasweb

Ответов: 8
Просмотров: 4517
Последний ответ 28.11.2022, 23:22:27
от Evgen Kulibin
Как вывести модуль в страницу VirtueMart?

Автор harddrop

Ответов: 11
Просмотров: 4868
Последний ответ 13.11.2022, 13:11:37
от Evgen Kulibin