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

mVoid

  • Новичок
  • 6
  • 0 / 0
Прошу вашей помощи!
« : 16.03.2011, 13:08:49 »
Перенесли с одного хостинга на другой сайт Joomla в процесе переноса содали новую бд и тп.
Появились некоторые ошибки но в плане работ они все были исправлены. Но не заметил я еще одну которая таилась далеко от меня потому как вы уже наверное поняли я ее решить не могу, сколько не сидел не копался ну никак... >:(
Поэтому уважаемые члены этого форума прошу помощи у вас.

Ошибка такова, Поставил компонент EstateAgent на версию 1.5 все работает нормально, но в плане переноса появилась ошибка:


Код
Warning: Missing argument 3 for plgContentHider::onPrepareContent() in /home/evrotr/public_html/MONTEBEY.RU/plugins/content/hider.php on line 239

Проблема не в самой ошибке, а как я понял в плагине который выводит Лайтбокс галерею для просмотра картинки ...


Вот сам код этого файла hider.php

Код
<?php
/**
* Author: Dioscouri Design - www.dioscouri.com
* @package Hider
* @copyright Copyright (C) 2007 Dioscouri Design. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
*/

/** ensure this file is being included by a parent file */
defined( '_JEXEC' ) or die( 'Direct Access to this location is not allowed.' );

// Import library dependencies
jimport( 'joomla.plugin.plugin' );

/**
 * Hider Content Plugin
 *
 * @package Hider
 * @subpackage Content
 * @since 1.5
 */
class plgContentHider extends JPlugin
{

/**
* Constructor
*
* For php4 compatability we must not use the __constructor as a constructor for plugins
* because func_get_args ( void ) returns a copy of all passed arguments NOT references.
* This causes problems with cross-referencing necessary for the observer design pattern.
*
* @param object $subject The object to observe
* @param object $params  The object that holds the plugin parameters
* @since 1.5
*/
function plgContentHider( &$subject, $params )
{
parent::__construct( $subject, $params );
}

/**
* Gets a parameter value
*
* @access public
* @return mixed Parameter value
* @since 1.5
*/
function _getParameter( $name, $default='' ) {
$return = "";
$return = $this->params->get( $name, $default );

return $return;
}

/**
* Gets a parameter value
*
* @access public
* @return mixed Parameter value
* @since 1.5
*/
function _reg( &$matches ) {

$user = JFactory::getUser();
$return = '';

if ($user->id) { $return = $matches[1]; }

return $return;
}

/**
* Gets a parameter value
*
* @access public
* @return mixed Parameter value
* @since 1.5
*/
function _pub( &$matches ) {

$user = JFactory::getUser();
$return = $matches[1];

if ($user->id) { $return = ''; }

return $return;
}

/**
* Gets a parameter value
*
* @access public
* @return mixed Parameter value
* @since 1.5
*/
function _author( &$matches ) {

$user = JFactory::getUser();
$usertype = $user->get('usertype');
$usergid = $user->get('gid');

$return = $matches[1];

if ($usergid != '19')
{
$return = '';
}

return $return;
}

/**
* Gets a parameter value
*
* @access public
* @return mixed Parameter value
* @since 1.5
*/
function _editor( &$matches ) {

$user = JFactory::getUser();
$usertype = $user->get('usertype');
$usergid = $user->get('gid');

$return = $matches[1];

if ($usergid != '20')
{
$return = '';
}


return $return;
}

/**
* Gets a parameter value
*
* @access public
* @return mixed Parameter value
* @since 1.5
*/
function _publisher( &$matches ) {

$user = JFactory::getUser();
$usertype = $user->get('usertype');
$usergid = $user->get('gid');

$return = $matches[1];

if ($usergid != '21')
{
$return = '';
}

return $return;
}

/**
* Gets a parameter value
*
* @access public
* @return mixed Parameter value
* @since 1.5
*/
function _manager( &$matches ) {

$user = JFactory::getUser();
$usertype = $user->get('usertype');
$usergid = $user->get('gid');

$return = $matches[1];

if ($usergid != '23')
{
$return = '';
}

return $return;
}

/**
* Gets a parameter value
*
* @access public
* @return mixed Parameter value
* @since 1.5
*/
function _admin( &$matches ) {

$user = JFactory::getUser();
$usertype = $user->get('usertype');
$usergid = $user->get('gid');

$return = $matches[1];


if ($usergid != '24')
{
$return = '';
}

return $return;
}

/**
* Gets a parameter value
*
* @access public
* @return mixed Parameter value
* @since 1.5
*/
function _super( &$matches ) {

$user = JFactory::getUser();
$usertype = $user->get('usertype');
$usergid = $user->get('gid');

$return = $matches[1];

if ($usergid != '25')
{
$return = '';
}

return $return;
}


/**
* Example prepare content method
*
* Method is called by the view
*
* @param object The article object.  Note $article->text is also available
* @param object The article params
* @param int The 'page' number
*/
[color=red]function onPrepareContent( &$article, &$params, $limitstart ) {[/color]
$success = true;

// define the regular expression
$regex1 = "#{reg}(.*?){/reg}#s";
$regex2 = "#{pub}(.*?){/pub}#s";

$regex3 = "#{author}(.*?){/author}#s";
$regex4 = "#{editor}(.*?){/editor}#s";
$regex5 = "#{publisher}(.*?){/publisher}#s";
$regex6 = "#{manager}(.*?){/manager}#s";
$regex7 = "#{admin}(.*?){/admin}#s";
$regex8 = "#{super}(.*?){/super}#s";

$regex9 = "#\{19}(.*?){/19}#s";
$regex10 = "#\{20}(.*?){/20}#s";
$regex11 = "#\{21}(.*?){/21}#s";
$regex12 = "#\{23}(.*?){/23}#s";
$regex13 = "#\{24}(.*?){/24}#s";
$regex14 = "#\{25}(.*?){/25}#s";

// perform the replacement for _reg
$article->text = preg_replace_callback( $regex1, array('plgContentHider', '_reg'), $article->text );
// perform the replacement for _pub
$article->text = preg_replace_callback( $regex2, array('plgContentHider', '_pub'), $article->text );

// perform the replacement for groups by name
$article->text = preg_replace_callback( $regex3, array('plgContentHider', '_author'), $article->text );
$article->text = preg_replace_callback( $regex4, array('plgContentHider', '_editor'), $article->text );
$article->text = preg_replace_callback( $regex5, array('plgContentHider', '_publisher'), $article->text );
$article->text = preg_replace_callback( $regex6, array('plgContentHider', '_manager'), $article->text );
$article->text = preg_replace_callback( $regex7, array('plgContentHider', '_admin'), $article->text );
$article->text = preg_replace_callback( $regex8, array('plgContentHider', '_super'), $article->text );

// perform the replacement for groups by gid
$article->text = preg_replace_callback( $regex9, array('plgContentHider', '_author'), $article->text );
$article->text = preg_replace_callback( $regex10, array('plgContentHider', '_editor'), $article->text );
$article->text = preg_replace_callback( $regex11, array('plgContentHider', '_publisher'), $article->text );
$article->text = preg_replace_callback( $regex12, array('plgContentHider', '_manager'), $article->text );
$article->text = preg_replace_callback( $regex13, array('plgContentHider', '_admin'), $article->text );
$article->text = preg_replace_callback( $regex14, array('plgContentHider', '_super'), $article->text );

return $success;
}
}
В коде выше  Красным помечена 239 строка!

Зарание благодарю, и надеюсь на вашу помощь ...  *DRINK*
*

mVoid

  • Новичок
  • 6
  • 0 / 0
Re: Прошу вашей помощи!
« Ответ #1 : 17.03.2011, 11:22:10 »
Гуру сайта вы где? Помогите очень  нада сделать ....
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Undefined variable, прошу помощи, важный проект!

Автор Elimelech

Ответов: 15
Просмотров: 1592
Последний ответ 22.12.2016, 12:42:23
от Elimelech
Прошу помощи у знающих людей

Автор Garter4ik

Ответов: 3
Просмотров: 1407
Последний ответ 09.02.2015, 02:31:26
от Garter4ik
Не могу создать страницу. Прошу помощи

Автор Spaww

Ответов: 10
Просмотров: 1684
Последний ответ 07.02.2015, 23:57:43
от Spaww
Ошибки на сайте. Прошу помощи

Автор SenyaKulia

Ответов: 14
Просмотров: 4623
Последний ответ 15.06.2014, 10:54:09
от kirin
Уважаемые специалисты! Прошу помось разобраться с проблемой отображения frontpage slideshow в разных

Автор Polinizm

Ответов: 4
Просмотров: 1583
Последний ответ 09.07.2013, 09:18:36
от Polinizm