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

Agrainel

  • Осваиваюсь на форуме
  • 36
  • 1 / 0
Добрый день! Подскажите, пожалуйста, есть ли способ установить 2 по своим действиям одинаковых плагина (только переменные у второго по-другому названы).
Просматриваю XML файлик установки, всё вроде поменяла, но не устанавливается. Какие ключевые моменты необходимы для изменения?
Дело в том, что необходимо плагин JoomSimple Steps (http://demo.jsimple.info/index.php?option=com_content&view=article&id=19:joomla-overview&catid=29:the-cms&Itemid=27) использовать в материале несколько раз, но при прописывании обращения к нему во второй раз, он цепляет информацию, которая относилась к первому случаю.
Либо, может быть, Вы подскажете, как это лечится?
Спасибо.
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
Надо не только .xml править, но и сам файл модуля. Имена классов привязани к названию модулей. Более того, управляющий код видимо в копии тоже надо будет сделать другим. Иначе копия всё равно будет делать то же самое, что и оригинал. Хотя, не факт.

Проще, наверное, плагин поправить под себя, если есть базовые знания PHP.
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?
*

Agrainel

  • Осваиваюсь на форуме
  • 36
  • 1 / 0
С разработчиком связалась, сказал, что проверит данную проблему (видимо, всё подразумевалось, что использовать можно несколько раз). Но когда он проверит - кто его знает, а мне, понятное дело, нужно, как всегда, быстрее.
Я смотрю код - не могу найти ошибку.
Была бы благодарна, если бы кто-нибудь помог  ^-^

Т.е. ещё раз сформулирую проблему: данный плагин позволяет пролистывать текст внутри статьи как слайд-шоу. При использовании один раз - всё в порядке. Во второй раз цепляется текст из первого случая использования.

Код
<?php

/*
* @name JoomSimple Steps 1.03
* @type Joomla 1.5 Plugin
* @author Eugene Bendersky
* @website http://jsimple.info
* @email ugn@jsimple.info
* @copyright Copyright (C) 2010 JoomSimple. All rights reserved.
* @license http://www.gnu.org/licenses/gpl.html - GNU GENERAL PUBLIC LICENSE
*
* JoomSimple Steps Plugin is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
*/

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.plugin.plugin' );

class plgContentJoomSimpleSteps extends JPlugin {

function plgContentJoomSimpleSteps( &$subject, $config ) {
parent::__construct( $subject, $config );
}

function onPrepareContent( &$article, &$params, $limitstart ) {

$uri = JRequest::getURI();
if( strpos( 'J'. $uri, 'administrator/' ) ){
return true;
}

global $mainframe;

       $db = JFactory::getDBO();
if ( JString::strpos( $article->text, 'simplesteps' ) === false ) {
return true;
     }

$title_tag = $this->params->get( 'title_tag' );
$step_tag = $this->params->get( 'link_tag' );
$slide_border = $this->params->get( 'slide_border' );
$border_w = $this->params->get( 'border_width' );
$text_color = $this->params->get( 'text_color' );
$border_color = $this->params->get( 'border_color' );
$font_size = $this->params->get( 'font_size' );
$controls_position = $this->params->get( 'controls_position' );

if ( $this->params->get( 'jss_enable' ) == 0 ) {
$article->text = preg_replace( array('/{simplesteps.+}/U', '/{\/simplesteps}/U', '/<'.$title_tag.'>.+<\/'.$title_tag.'>/sU', '/<'.$step_tag.'>.+<\/'.$step_tag.'>/sU'), '', $article->text );
return true;
}

preg_match('/{simplesteps\|width\:(?P<width>\d+)}(?P<html>.+){\/simplesteps}/sU', $article->text, $steps);

$blockwidth = $steps['width'].'px;';
    
$steps = explode('<hr />', $steps['html']);

$simple_steps = array();
foreach($steps as $k => $v) {
if(preg_match("/<$title_tag>(?P<name>.+)<\/$title_tag>/sU", $v, $temp))
$simple_steps[$k]['name'] = $temp['name'];
if(preg_match("/<$step_tag>(?P<step>.+)<\/$step_tag>/sU", $v, $temp))
    $simple_steps[$k]['step'] = $temp['step'];

if($k == 1)
$simple_steps[$k]['prev'] = $simple_steps[0]['name'];
elseif($k > 1)
$simple_steps[$k]['prev'] = $simple_steps[$k-2]['step'];
else
$simple_steps[$k]['prev'] = null;

$simple_steps[$k]['content'] = str_replace(array("<$title_tag>", "</$title_tag>", "<$step_tag>", "</$step_tag>"), '', str_replace("<$title_tag>".$simple_steps[$k]['name']."</$title_tag>", "", str_replace("<$step_tag>".( isset($simple_steps[$k]['step'])? $simple_steps[$k]['step'] : '')."</$step_tag>", "", $v)));
}


$document =& JFactory::getDocument();
$document->addScriptDeclaration('
   
var jss_scroller;

window.addEvent("domready", function(){
jss_scroller = new Fx.Scroll("jss");
jss_scroller.scrollTo(0,0);
});
window.addEvent("domready", function() {
   window.extend({
       getHeight: function(){
   if (this.webkit419) return this.innerHeight;
           return document.documentElement.clientHeight;
       }
});
       });
');

  $document->addStyleDeclaration('
.jsimplesteps {
   overflow:hidden;
   position:relative;
   width:'.$blockwidth.';
   '.($slide_border == 1 ? ('border: '.intval($border_w).'px solid '.$border_color.';') : '' ).'
}
.jss_panes {
       clear:both;
   width:10000em;
}
.jss_active {

}
.jss_pane {
   width:'.$blockwidth.';
padding-top: 20px;
   float:left;
}
.jss_name {
   margin-bottom: 20px;
   '.(($controls_position == 1 || $controls_position == 2)? 'margin-top: 80px;' : '').'
   text-align:center !important;
}
.jss_name span {
   font-size:'.$font_size.';
   color:'.$text_color.';
   text-align:center;
}
.jss_prev {
   margin-top:20px;
   text-align:left !important;
}
.jss_prev span {
   border:'.intval($border_w).'px solid '.$border_color.';
   cursor:pointer;
   font-weight:bold;
   margin:10px;
   padding:10px;
}
.jss_contents {
   margin-bottom:70px;
   '.($slide_border == 1 ? 'margin-left:15px;
   margin-right:15px;' : '').'
}
.jss_step_top {
   margin-top:20px;
   text-align:right !important;
   position: absolute;
   top: 0;
   width: 100%;
}
.jss_step_bottom {
   margin-top:20px;
   text-align:right !important;
   position: absolute;
   bottom: 0;
   width: 100%;
}
.jss_step_top span, .jss_step_bottom span {
   border:'.intval($border_w).'px solid '.$border_color.';
   cursor:pointer;
   font-weight:bold;
   margin:10px;
   padding:10px;
   float: right;
   color:'.$text_color.';
}
.jss_step_top span.prev, .jss_step_bottom span.prev {
   float:left;
}
.jss_thanks {
   float:right;
   text-align:right;
   margin:10px;
   color:#999999;
   font-size:0.8em;
}
.jss_thanks a {
   text-decoration:none;
   color:#999999;
   line-height:0.9;
}
   ');

   $result = '<div id="jss" class="jsimplesteps"><div id="jss_panes" class="jss_panes">';

foreach($simple_steps as $step_n => $step) {
   $result .= '<div class="jss_pane'.($step_n == 0 ? ' jss_active' : '').'">';
       $result .= '<div class="jss_name"><span>'.$step['name'].'</span></div>';
   
$temp_controls =
($step_n > 0
?
'<span class="prev" onclick="jss_scroller.scrollTo('.($step_n-1)*intval($blockwidth).', 0)">'.$step['prev'].'</span>'
:
'')
.
($step_n < (count($simple_steps)-1)
?
('<span onclick="jss_scroller.scrollTo('.($step_n+1)*intval($blockwidth).', 0)">'.$step['step'].'</span>')
:
'');

$controls_top = '<div class="jss_step_top">'.$temp_controls.'</div>';
$controls_bottom = '<div class="jss_step_bottom">'.$temp_controls.'</div>';

if($controls_position == 1 || $controls_position == 2)
$result .= $controls_top;
if($controls_position == 1 && $step_n == (count($simple_steps)-1))
$result .= '<div class="jss_thanks"><a href="http://joomsimple.com">Joomla Extensions</a> <br />by JoomSimple</div>';
$result .= '<div class="jss_contents">'.$step['content'].'</div>';
if($controls_position == 0 || $controls_position == 2) {
$result .= $controls_bottom;
if($step_n == (count($simple_steps)-1))
$result .= '<div class="jss_thanks"><a href="http://joomsimple.com">Joomla Extensions</a> <br />by JoomSimple</div>';
}
   
   $result .= '</div>';
}
   $result .= '</div></div>';

$article->text = preg_replace('/{simplesteps.+{\/simplesteps}/sU', $result, $article->text);

}


}

?>
« Последнее редактирование: 15.05.2011, 09:28:06 от Agrainel »
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
Тут без установки на свой комп и экспериментов не обойтись.
Скорее всего там, где у тегов id, надо их делать уникальными. Это надо в нескольких местах изменить.

Я бы советовал подождать результата от разработчика. И скинуть ему 10-20 баксов в качестве благодарности - очень мотивирует разработчиков.
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Установка шрифта TriodPostnajaMedium в Joomla 1.5

Автор VSpicy

Ответов: 6
Просмотров: 13845
Последний ответ 16.11.2017, 11:34:39
от VSpicy
Установка новогодней мотни (гирлянды) на Joomla 1.5

Автор acamaz

Ответов: 7
Просмотров: 5508
Последний ответ 18.12.2014, 02:04:31
от darkghost
Установка баннера - проблема!

Автор Gorgeous92

Ответов: 2
Просмотров: 2037
Последний ответ 20.11.2014, 10:45:36
от SerGo777
Создание модального окона с эффектом lightbox для вывода плагинов

Автор Timerlan

Ответов: 3
Просмотров: 1729
Последний ответ 03.09.2014, 15:20:44
от aspidy
Не открывается менеджер плагинов

Автор nikolich253

Ответов: 1
Просмотров: 1769
Последний ответ 25.08.2014, 08:47:06
от draff