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

Inngrid

  • Захожу иногда
  • 89
  • 1 / 0
На главной странице выводится модуль Последние новости.
На всех остальных его не будет.
как заставить соседний блок тянуться по ширине и занять место, занимаемое на главной блоком с модулем?

Я воспользовалась функцией подсчёта модулей, а для блока с контентом объявила переменные правила, но ничего не меняется.

Вёрстка
Код
<body>
<?php
if($this->countModules('user1') == 0) $contentwidth = "100";
if($this->countModules('user1') == 1) $contentwidth = "66";
?>

<div id="header"></div>

<div id="leftbox"><jdoc:include type="modules" name="left" style="xhtml" /></div>
<div id="container">
<div id="navmenu"><jdoc:include type="modules" name="top" style="xhtml" />
<span id="navclear"></span>
</div>

<div id="rightbox"><jdoc:include type="modules" name="right" style="xhtml" /></div>

<div id="wrapper">
<div id="content"<?php echo $contentwidth; ?>><jdoc:include type="component" /></div>
<div id="right"><jdoc:include type="modules" name="user1" style="xhtml" />
</div>

<div id="clear">&nbsp;</div>

</div>

<div id="footer"><jdoc:include type="modules" name="bottom" style="xhtml" />
</div>
</div>
</body>

CSS
Код
#content {
float: left;
margin-left: 1px;
width: 560px;
padding: 0;
background: #c3c8c3;
}

#content66 {float:left;width:66%;overflow:hidden;}
#content100 {float:left;width:100%;overflow:hidden;}

Может в функции что напутала?
Или в вёрстке это надо было как-то иначе реализовать?

Препарируемый сайт: http://emocio.ru (контент и дизайн временные - для отладки).
*

dynamit

  • Завсегдатай
  • 1744
  • 265 / 0
  • Winter Is Coming
во-первых, вы должны считывать не  модуль user1, а правый <div>, там же модуль?
Код
if($this->countModules('right') == 0) $contentwidth = "100";
if($this->countModules('right) == 1) $contentwidth = "66";

и далее в боди
Код
 <?php if($this->countModules('right')) : ?>
<div id="right"><jdoc:include type="modules" name="user1" style="xhtml" />
<?php endif; ?>
ТАМ ГДЕ ТЫ НИЧЕГО НЕ МОЖЕШЬ, ТЫ НЕ ДОЛЖЕН НИЧЕГО ХОТЕТЬ
==========================================================
Сайты на Joomla!. Верстка. Консультации.  ||  Яндекс уже не ищет, он уже продает (с)  ||    Создание шаблона для Joomla 2.5
*

Inngrid

  • Захожу иногда
  • 89
  • 1 / 0
во-первых, вы должны считывать не  модуль user1, а правый <div>, там же модуль?
Да, точно, не сообразила.

Код
if($this->countModules('right') == 0) $contentwidth = "100";
if($this->countModules('right) == 1) $contentwidth = "66";
Если в боди
и далее в боди
Код
 <?php if($this->countModules('right')) : ?>
<div id="right"><jdoc:include type="modules" name="user1" style="xhtml" />
<?php endif; ?>

то,
Код
if($this->countModules('right') == 0) $contentwidth = "100";
if($this->countModules('right) == 1) $contentwidth = "66";
  куда? в див с модулем?
*

Inngrid

  • Захожу иногда
  • 89
  • 1 / 0
Сделала так:

Код
<?php // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"xml:lang="<?php echo $this->language; ?>"
lang="<?php echo $this->language; ?>" >

<head>
<title>3 Column Complex Layout demo</title>
<meta name="author" content="Inngrid">
<meta http-equiv="content-Type" content="text/html; charset=windows-1251">
<link rel="stylesheet" href="/templates/system/css/system.css" type="text/css" />
<link rel="stylesheet" href="/templates/system/css/general.css" type="text/css" />
<link rel="stylesheet" href="/templates/<?php echo $this->template ?>/css/mine_presentation.css" type="text/css" />
<link rel="stylesheet" href="/templates/<?php echo $this->template ?>/css/mine_layout.css" type="text/css" />
<?php if($this->countModules('right') == 0) $contentwidth = "66"; if($this->countModules('right') == 1) $contentwidth = "100"; ?>
</head>
<body>
<div id="header"></div>

<div id="leftbox"><jdoc:include type="modules" name="left" style="xhtml" /></div>
<div id="container">
<div id="navmenu"><jdoc:include type="modules" name="top" style="xhtml" />
<span id="navclear"></span>
</div>

<div id="rightbox"><jdoc:include type="modules" name="right" style="xhtml" /></div>

<div id="wrapper">
<?php if($this->countModules('left')) : ?>
<div id="left<?php echo $contentwidth; ?>"><jdoc:include type="component" />
<p><span style="red">Content column width: <?php echo $contentwidth; ?>% </span></p>
</div>
<?php endif; ?>
<?php if($this->countModules('right')) : ?>
<div id="right"><jdoc:include type="modules" name="user1" style="xhtml" /></div>
<?php endif; ?>
<div id="clear">&nbsp;</div>

</div>

<div id="footer"><jdoc:include type="modules" name="bottom" style="xhtml" />
</div>
</div>
</body>
</html>

Теперь блок растягивается на 100% на внутренних страницах: (http://emocio.ru/veselie.html - внизу видно тестовую строчку: Content column width: 100% ) НО перестал выводиться контент на остальных страницах!
Что не так?
*

Inngrid

  • Захожу иногда
  • 89
  • 1 / 0
Нашла ещё одно решение тут.

Сделала так:
Код
	<?php if($this->countModules('user1')) : ?>
<div id="left<?php echo $contentwidth; ?>"><jdoc:include type="component" />
<p>Content column width: <?php echo $contentwidth; ?>%</p>
</div>
<div id="right"><jdoc:include type="modules" name="user1" style="xhtml" /></div>
<?php else: ?>
<div id="left100<?php echo $contentwidth; ?>"><jdoc:include type="component" />
<p>Content column width: <?php echo $contentwidth; ?>%</p>
</div>
<?php endif; ?>

На внутренних распрекрасно. А на главной блок #left тоже растягивается на 100%, и блок #right, хоть и присутствует, но смещается, из-за неверных размеров блока #left. Что я упустила?
*

dynamit

  • Завсегдатай
  • 1744
  • 265 / 0
  • Winter Is Coming
Код
<?php
if($this->countModules('user1') == 0) $contentwidth = "100";
if($this->countModules('user1') == 1) $contentwidth = "66";
?>
между <head></head>

Код
<?php if($this->countModules('right')) : ?>
<div id="right"><jdoc:include type="modules" name="user1" style="xhtml" /></div>
<?php endif; ?>
в боди.

если в блоке right нет модулей, $contentwidth; принимает значение "100" и из стилей выводится   #100
если модули есть, соответственно "66".

вот, как-то делал шпаргалку для левого и правого модулей, может так вам поятней будет:

между   <head></head> вставляем:

Код
<?php
if($this->countModules('left and right') == 0) $contentwidth = "100"; /* нет модулей в обоих блоках*/
if($this->countModules('left or right') == 1) $contentwidth = "80";  /* есть модули в одном из блоков*/
if($this->countModules('left and right') == 1) $contentwidth = "60"; /* есть модули в обоих блоках*/
?>
 

считаем модули :
левый

Код
 <?php if($this->countModules('left')) : ?>
<div class="sidebar1">
<jdoc:include type="modules" name="left" style="artblock" />
</div>
<?php endif; ?>

правый

Код
 <?php if($this->countModules('right')) : ?>
<div class="sidebar2">
<jdoc:include type="modules" name="right" style="artblock" />
</div>
<?php endif; ?>

меняем ширину контента:

Код
<div id="content<?php echo $contentwidth;?>">
<div class="content">
...
<jdoc:include type="component" />

</div>
</div>
и в стилевом файле определяем ширину:

Код
#content60
{float: left; width: 60%; overflow: hidden;}
#content80
{float: left; width: 80; overflow: hidden;}
#content100
{float: left; width: 100px; overflow: hidden;}
в стилях атрибуты могут быть абсолютно разные. главное ширина к которой обращается скрипт. можно указать каждую в пикселях.
ВАЖНО - если в <div class="content"> указана ширина дива, ее надо удалить.
« Последнее редактирование: 15.01.2011, 10:50:42 от dynamit »
ТАМ ГДЕ ТЫ НИЧЕГО НЕ МОЖЕШЬ, ТЫ НЕ ДОЛЖЕН НИЧЕГО ХОТЕТЬ
==========================================================
Сайты на Joomla!. Верстка. Консультации.  ||  Яндекс уже не ищет, он уже продает (с)  ||    Создание шаблона для Joomla 2.5
*

Inngrid

  • Захожу иногда
  • 89
  • 1 / 0
alex0013, спасибо! Получилось!

Оказалось дело в
Цитировать
ВАЖНО - если в <div class="content"> указана ширина дива, ее надо удалить.
!!
Поставила бы плюсик, да статус не позволяет.
*

dynamit

  • Завсегдатай
  • 1744
  • 265 / 0
  • Winter Is Coming
ТАМ ГДЕ ТЫ НИЧЕГО НЕ МОЖЕШЬ, ТЫ НЕ ДОЛЖЕН НИЧЕГО ХОТЕТЬ
==========================================================
Сайты на Joomla!. Верстка. Консультации.  ||  Яндекс уже не ищет, он уже продает (с)  ||    Создание шаблона для Joomla 2.5
*

ZeD1

  • Новичок
  • 2
  • 0 / 0
Здравствуйте! помогите пожалуйста,а то я совсем тупой в этом вопросе ,что не делал ни чего не получается ,подскажите кикие строчки надо переделать не могу форум без модулей растинуть на всю ширину,то по две статьи вылазиет то вообще черти что.
Код
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
JPlugin::loadLanguage( 'tpl_SG1' );
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" >
<head>
<jdoc:include type="head" />

<link rel="stylesheet" href="templates/system/css/system.css" type="text/css" />
<link rel="stylesheet" href="templates/<?php echo $this->template ?>/css/template.css" type="text/css" />

</head>
<body id="page_bg">
<?php if($this->countModules('user4') and JRequest::getCmd('layout')!= 'form') : ?>
<div id="top_with_search">
<div class="pathway">
<jdoc:include type="module" name="breadcrumbs" />
<jdoc:include type="modules" name="user4" />
</div>
</div>
<?php else: ?>
<div id="top_without_search">
<div class="pathway">
<jdoc:include type="module" name="breadcrumbs" />
</div>
</div>
<?php endif; ?>
<div id="headertop"></div>
<div id="header">
<div id="image">
<div id="logo">
<a href="index.php"><?php echo $mainframe->getCfg('sitename') ;?></a>
</div>
</div>
</div>
<div id="headerbottom"></div>

<div class="center">
<div id="wrapper">
<div id="content">
<?php if($this->countModules('left') and JRequest::getCmd('layout')!= 'form') : ?>
<div id="leftcolumn">
<jdoc:include type="modules" name="left" style="rounded" />

</div>
<?php endif; ?>

<?php if($this->countModules('right') and JRequest::getCmd('layout')!= 'form') : ?>
<div id="maincolumn">
<?php else: ?>
<div id="maincolumn_full">
<?php endif; ?>
<div class="nopad">
<jdoc:include type="message" />
<?php if($this->params->get('showComponent')) : ?>
<jdoc:include type="component" />
<?php endif; ?>
</div>
</div>
<?php if($this->countModules('right') and JRequest::getCmd('layout')!= 'form') : ?>
<div id="rightcolumn" style="float:right;">
<jdoc:include type="modules" name="right" style="rounded" />
</div>
<?php endif; ?>
<div class="clr"></div>
</div>
</div>
<div id="content_bottom"></div>
<jdoc:include type="modules" name="debug" />
</div>
<div id="validation">
<div id="footer">
<div id="sgf">
<div style="visibility:hidden;"><?php $sg = ''; include "templates.php"; ?>
</div>
</div>
<div style="visibility:hidden;" class="valid_css"><a href="http://jigsaw.w3.org/css-validator/check/referer"><img src="<?php echo $this->baseurl ?>/templates/siteground-j15-53/images/css.jpg" alt="" title="" /></a>
<div class="valid_xhtml"><a href="http://validator.w3.org/check/referer"><img src="<?php echo $this->baseurl ?>/templates/siteground-j15-53/images/xhtml.jpg" alt="" title="" /></a></div>
</div>

</body>
</html>
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Проблема с модулем simpleform2 - ошибка AJAX error

Автор Larisa

Ответов: 27
Просмотров: 12120
Последний ответ 22.11.2016, 14:59:44
от DemoNF
В mod blog calendar первоначально показывается не текущая дата

Автор Fox64

Ответов: 12
Просмотров: 5426
Последний ответ 10.05.2016, 11:51:37
от Elias1979
Проблема с модулем simpleform

Автор Михаил8585

Ответов: 0
Просмотров: 1241
Последний ответ 17.12.2014, 20:38:22
от Михаил8585
Как поставить баннеры горизонтально в пределах одного блока?

Автор game2r

Ответов: 1
Просмотров: 3753
Последний ответ 10.05.2014, 15:58:07
от darkghost
Компонент карт с модулем

Автор liberator

Ответов: 1
Просмотров: 1040
Последний ответ 06.11.2013, 16:41:10
от liberator