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

Дмитрий Плотников

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
id="current" в модуле latestnews
« : 21.03.2011, 14:20:29 »
Нужна помощь, хочу отображать последние новости на главной странице. Выглядеть будет как обычное меню, новые новости сверху, это все я могу и мне понятно.

Но нужно, чтобы было как в обычном меню - при переходе, пункту меню присваивался id="current"

Но последние новости выводятся динамически стандартным модулем Joomla mod_latestnews

Вопрос, где и какой код прописать, чтобы при переходе, пункту меню присваивался id="current"?
*

aantipov

  • Новичок
  • 9
  • 0 / 0
  • alexei.me
Re: id="current" в модуле latestnews
« Ответ #1 : 21.03.2011, 16:26:07 »
Немного поменять логику модуля - сделать условие: если id новости совпадает с id текущей статьи, то добавить идентификатор "current"
*

Дмитрий Плотников

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: id="current" в модуле latestnews
« Ответ #2 : 21.03.2011, 16:47:46 »
Немного поменять логику модуля - сделать условие: если id новости совпадает с id текущей статьи, то добавить идентификатор "current"

Идея хорошая, сам я только не смогу такое написать.
Кто нибудь может помочь написать это условие?
« Последнее редактирование: 21.03.2011, 17:20:34 от Дмитрий Плотников »
*

Дмитрий Плотников

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: id="current" в модуле latestnews
« Ответ #3 : 21.03.2011, 18:17:47 »
Неужели никто не может помочь с 1 условием?(((
*

Дмитрий Плотников

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: id="current" в модуле latestnews
« Ответ #4 : 22.03.2011, 09:35:07 »
Мне на другом форуме подсказали, что нужно:

<?php $article_id = JRequest::getVar('id');
if ($article_id ==$item->id ){
 $active = " id='active' ";
}

 ?>

Но за динамический вывод отвечает:

Код
$i		= 0;
$lists = array();
foreach ( $rows as $row )
{
if($row->access <= $aid)
{
$lists[$i]->link = JRoute::_(ContentHelperRoute::getArticleRoute($row->slug, $row->catslug, $row->sectionid));
} else {
$lists[$i]->link = JRoute::_('index.php?option=com_user&view=login');
}
$lists[$i]->text = htmlspecialchars( $row->title );
$i++;
}

как только не вставлял не работает
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: id="current" в модуле latestnews
« Ответ #5 : 22.03.2011, 09:55:05 »
так не сюда надо вставлять. тут только ссылки формируются и текст для них.
сам вывод осуществляется в mod_latestnews\tmpl\default.php
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: id="current" в модуле latestnews
« Ответ #6 : 22.03.2011, 10:39:31 »
в общем,  в helper.php
после
      foreach ( $rows as $row )
      {
добавляем      
      $lists[$i]->id = (int)$row->id;

а \tmpl\default.php
приводим к такому виду:
Код

<?php // no direct access
defined('_JEXEC') or die('Restricted access'); ?>
<ul class="latestnews<?php echo $params->get('moduleclass_sfx'); ?>">

<?php


$article_id = (int)JRequest::getVar('id');

foreach ($list as $item) :  
$active="none";
if ($article_id == $item->id ) $active = "active";

?>
<li class="latestnews<?php echo $params->get('moduleclass_sfx'); ?>">
<a href="<?php echo $item->link; ?>" class="latestnews<?php echo $params->get('moduleclass_sfx')." ".$active; ?>">
<?php echo $item->text; ?></a>
</li>
<?php endforeach; ?>
</ul>

*

Дмитрий Плотников

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: id="current" в модуле latestnews
« Ответ #7 : 22.03.2011, 12:29:17 »
в общем,  в helper.php
после
      foreach ( $rows as $row )
      {
добавляем      
      $lists[$i]->id = (int)$row->id;

а \tmpl\default.php
приводим к такому виду:
Код

<?php // no direct access
defined('_JEXEC') or die('Restricted access'); ?>
<ul class="latestnews<?php echo $params->get('moduleclass_sfx'); ?>">

<?php


$article_id = (int)JRequest::getVar('id');

foreach ($list as $item) : 
$active="none";
if ($article_id == $item->id ) $active = "active";

?>
<li class="latestnews<?php echo $params->get('moduleclass_sfx'); ?>">
<a href="<?php echo $item->link; ?>" class="latestnews<?php echo $params->get('moduleclass_sfx')." ".$active; ?>">
<?php echo $item->text; ?></a>
</li>
<?php endforeach; ?>
</ul>



Большое вам спасибо, все работает как вы написали!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как увиличить максимальное количество символов в стандартном модуле (mod_custom)?

Автор genkey

Ответов: 0
Просмотров: 1459
Последний ответ 27.04.2017, 14:41:22
от genkey
Как применить атрибут size для элемента select в модуле simpleform 2?

Автор Loh

Ответов: 5
Просмотров: 2010
Последний ответ 06.06.2015, 13:44:28
от motokraft
Вывести view в модуле

Автор xim002

Ответов: 0
Просмотров: 1366
Последний ответ 31.03.2015, 14:27:40
от xim002
Баннеры не отображаются в модуле mod_banners на хосте.

Автор Roman Petrenko

Ответов: 19
Просмотров: 12392
Последний ответ 31.01.2015, 16:15:02
от drema71
Как разместить статью в модуле?

Автор adcroco

Ответов: 5
Просмотров: 2090
Последний ответ 28.01.2014, 17:33:41
от adcroco