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

uncleric

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Здравствуйте! Появилась необходимость каждому новому пользователю, который регистрируется на сайте - отправлять письмо приветствие!
Точнее, сначала он получает письмо с запросом на активацию, его то изменить можно, но не нужно...
А потом, после активации - он должен получить письмо с необходимым мне содержанием!
Кто может посоветовать где копать, или может уже есть готовые решения, но я не нашел?
Буду очень благодарен, спасибо!
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
А потом, после активации - он должен получить письмо с необходимым мне содержанием!
Кто может посоветовать где копать, или может уже есть готовые решения, но я не нашел?
components\com_user\controller.php
Код
function activate()
{
...
}
*

uncleric

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Я буду просто ЧРЕЗМЕРНО благодарен, если еще напишите, какой php скрипт надо вставить на место троеточия... СПАСИБО!
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Я буду просто ЧРЕЗМЕРНО благодарен, если еще напишите, какой php скрипт надо вставить на место троеточия... СПАСИБО!
как говориться "и рыбку съесть, и на х||й сесть", а мозгами пошевелить никак.
В этой функции после строчек
Код: php
		// Do we even have an activation string?
$activation = JRequest::getVar('activation', '', '', 'alnum' );
$activation = $db->getEscaped( $activation );
добавляем
Код: php
		$db = & JFactory::getDBO();
$query = 'SELECT id'
. ' FROM #__users'
. ' WHERE activation = '.$db->Quote($activation)
. ' AND block = 1';
$db->setQuery( $query );
$id = intval( $db->loadResult() );
$user =& JUser::getInstance( (int) $id );
Дальше после строчек, т.е. если активация прошла успешно
Код: php
			$message->title = JText::_( 'REG_ACTIVATE_COMPLETE_TITLE' );
$message->text = JText::_( 'REG_ACTIVATE_COMPLETE' );
добавляем
Код: php
			$mailfrom 		= $mainframe->getCfg( 'mailfrom' );
$fromname = $mainframe->getCfg( 'fromname' );
$subject = 'TITLE EMAIL';
$message = 'BODY EMAIL';
JUtility::sendMail($mailfrom, $fromname, $user->email, $subject, $message);
*

uncleric

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Спасибо! Вот это я понимаю помог! Все работает, кроме одного момента.
Когда пользователь переходит по ссылке активации, то видит пустую страницу на сайте там, где обычно написан текст: "Спасибо, активация завершена и т.д."
Письмо в ответ уходит... Где может быть проблема?
Пробовал размещать этот код чуть под другому, но в результате только ошибки на странице.

*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
заменить
Код: php
			$message = 'BODY EMAIL';
JUtility::sendMail($mailfrom, $fromname, $user->email, $subject, $message);
на
Код: php
			$msg = 'BODY EMAIL';
JUtility::sendMail($mailfrom, $fromname, $user->email, $subject, $msg);

В принципе можно вставить эту байду в libraries\joomla\user\helper.php
после строчек
Код
			$user->set('block', '0');
$user->set('activation', '');
вставить
Код: php
                        global $mainframe;
$mailfrom = $mainframe->getCfg( 'mailfrom' );
$fromname = $mainframe->getCfg( 'fromname' );
$subject = 'TITLE EMAIL';
$message = 'BODY EMAIL';
JUtility::sendMail($mailfrom, $fromname, $user->email, $subject, $message);

тогда не нужно будет делать лишний запрос к БД.
« Последнее редактирование: 09.08.2010, 20:48:44 от SmokerMan »
*

uncleric

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Сделал как сказали и все заработало! Вы меня очень выручили, спасибо!
Есть еще один аналогичный вопрос, но по phpBB форуму... после регистрации на сайте или форуме, нужно что-бы пользователь получал аналогичное письмо не на почту, а в личные сообщения на форуме... Не сталкивались с подобными задачами? Готов сбросить пару WMZ на пиво :)
« Последнее редактирование: 09.08.2010, 21:15:23 от uncleric »
*

andreyvw

  • Новичок
  • 4
  • 0 / 0
А как изменить само письмо об активации?
Где оно лежит?
тупо тут добавить? ^-^

.../language/ru-RU/ru-RU.com_user.ini

или как то можно по другому?
« Последнее редактирование: 26.01.2011, 19:11:36 от andreyvw »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не отправляется письмо с кодом восстановления пароля по SMTP

Автор Disdain

Ответов: 1
Просмотров: 2939
Последний ответ 24.08.2018, 19:14:22
от Disdain
письмо об подтверждении активации

Автор radiant

Ответов: 4
Просмотров: 2245
Последний ответ 09.12.2015, 09:45:32
от capricorn
Как отправить письмо? Ошибка: Письмо не может быть отправлено (com_mailto)

Автор Alexpro2011

Ответов: 11
Просмотров: 4477
Последний ответ 17.11.2014, 13:40:17
от sergeosn
Компонент контакты - нет сообщеня про отправленое письмо

Автор palexa

Ответов: 14
Просмотров: 3360
Последний ответ 27.06.2012, 22:33:16
от mortias
Как на сайт прикрутить почту?

Автор Mefody66

Ответов: 4
Просмотров: 3187
Последний ответ 18.06.2012, 10:32:49
от Mefody66