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

sergvlask

  • Осваиваюсь на форуме
  • 26
  • 0 / 0
вот такая ошибка Фатальная ошибка : Невозможно переопределить showQuestions () (ранее объявленный в / home/j/jforum.hut4.ru/WWW/administrator/components/com_mycomp/admin.mycomp.php: 53) в / home/j/jforum.hut4.ru / WWW / администратор / компоненты / com_mycomp / admin.mycomp.html.php на линии 226
  
Исходный текст
Fatal error: Cannot redeclare showQuestions() (previously declared in /home/j/jforum.hut4.ru/WWW/administrator/components/com_mycomp/admin.mycomp.php:53) in /home/j/jforum.hut4.ru/WWW/administrator/components/com_mycomp/admin.mycomp.html.php on line 226
вот код admin.mycomp.php
Код
function showQuestions($option)
{
$db =& JFactory::getDbo();
$query = "SELECT * FROM #__myquestions";
$db->setQuery($query);
$rows = $db->loadObjectList();
if ($db->getErrorNum())
{
echo $db->stderr();
return false;
}
HTML_questions::showQuestions($option, $rows);
}
и код на HTML представление admin.mycomp.html.php
Код
<?php
jimport('joomla.filter.output');
$k = 0;
for ($i = 0, $n = count($rows); $i < $n; $i ++)
{
$row = &$rows[$i];
$checked = JHTML::_('grid.id', $i, $row->id);
$link = JFilterOutput::ampReplace('index.php?option=' .$option . '&task=reply&cid[]='. $row->id);
?>
<tr class="<?php echo "row$k";?>">
<td><?=$checked?></td>
<td><?=$row->name?></td>
<td><?=JHTML::_('date', $row->date, JText::_('DATE_FORMAT_LC3'))?></td>
<td><?='<a href="'.$link.'">'.substr(strip_tags($row->question),
0,$maxlen-1).'</a>'?></td>
<td><?=$row->email?></td>
<td align="center">
<?php
if ($row->published == '1')
echo JText::_('JYES');
else
echo JText::_('JNO');?>
</td>
<td>
<?php
if ($row->expiration_date == '0000-00-00 00:00:00')
echo JText::_('COM_MYQUESTIONS_DATE_NOT_DEFINED');
else
echo JHTML::_('date', $row->expiration_date, JText::_('DATE_FORMAT_LC3'));?>
</td>
<td align="center">
<?php
if ($row->senttoexpert == '1')
echo JText::_('JYES');
else
echo JText::_('JNO');?>
</td>
<td><?=substr(strip_tags($row->answer),0,$maxlen-1)?></td>
<td align="center">
<?php
if ($row->senttoauthor == '1')
echo JText::_('JYES');
else
echo JText::_('JNO');
?>
</td>
</tr>
<?php
$k = 1 - $k;
}
?>
</table>
<input type="hidden" name="option"
value="<?php echo $option;?>"/>
<input type="hidden" name="task"
value=""/>
<input type= "hidden" name="boxchecked"
value="0"/>
</form>
<?php
}
?>
где может скрываться ошибка?
*

kreker92

  • Захожу иногда
  • 390
  • 18 / 0
Назовите метод по-другому.
Все вопросы и предложения на почту.
*

sergvlask

  • Осваиваюсь на форуме
  • 26
  • 0 / 0
я уже менял, не помогло, попробую еще другое название.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Fatal error: Call to undefined method UsersModelLogin::store()

Автор jservice

Ответов: 37
Просмотров: 9753
Последний ответ 17.02.2015, 15:41:54
от kolio
JFactory::getUser($id); fatal error

Автор alxcube

Ответов: 11
Просмотров: 3554
Последний ответ 05.08.2013, 12:39:08
от alxcube