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

dnb

  • Захожу иногда
  • 74
  • 0 / 0
Ошибка в плагине
« : 14.02.2011, 15:56:41 »
Други помогите пожалуйста, добавил модуль вроде всё пашет (но не так как надо) как убрать код (как я понял с ошибкой)
снизу и сверху

Это сверху
Notice: Undefined index: add_iceslideshow_box in /home/dnb166/public_html/modules/mod_ice_slideshow/mod_ice_slideshow.php on line 30

А это снизу
Notice: Undefined variable: tohead in /home/dnb166/public_html/modules/mod_ice_slideshow/mod_ice_slideshow.php on line 140




Если нужен код, то я добавлю
*

dnb

  • Захожу иногда
  • 74
  • 0 / 0
Re: Ошибка в плагине
« Ответ #1 : 14.02.2011, 16:04:47 »
// Variables
$iceslideshow_box                            = 'iceslideshow_box_' . $GLOBALS['add_iceslideshow_box'];

if (!isset($GLOBALS['add_iceslideshow_box'])) { $GLOBALS['add_iceslideshow_box'] = 1; } else { $GLOBALS['add_iceslideshow_box']++; }

$mod_url                                   = JURI::base(). 'modules/mod_ice_slideshow/';
$baseurl                                  = JURI::root( false, '' ) ;

$style                                      = $params->get('style', 'default');


$iceslideshow_autoplay                        = $params->get('iceslideshow_autoplay', 'true');
$iceslideshow_autoplay_delay                  = $params->get('iceslideshow_autoplay_delay', '5000');

$iceslideshow_preloader                        = $params->get('iceslideshow_preloader', 'true');
$iceslideshow_preloader_image                  = $params->get('iceslideshow_preloader_image', 'true');
$iceslideshow_preloader_error                  = $params->get('iceslideshow_preloader_error', 'true');

$iceslideshow_transition                     = $params->get('iceslideshow_transition', 'fadeslideleft');
$iceslideshow_transition_duration               = $params->get('iceslideshow_transition_duration', '1200');

$iceslideshow_infopane                        = $params->get('iceslideshow_infopane', 'true');
$iceslideshow_infopage_opacity                  = $params->get('iceslideshow_infopage_opacity', '0.7');
$iceslideshow_infopane_slide                  = $params->get('iceslideshow_infopane_slide', 'true');

$iceslideshow_carousel                        = $params->get('iceslideshow_carousel', 'true');
$iceslideshow_carousel_minopacity               = $params->get('iceslideshow_carousel_minopacity', '0.4');
$iceslideshow_carousel_minheight               = $params->get('iceslideshow_carousel_minheight', '20');
$iceslideshow_carousel_maxopacity               = $params->get('iceslideshow_carousel_maxopacity', '0.8');
$iceslideshow_carousel_thumbheight               = $params->get('iceslideshow_carousel_thumbheight', '45');
$iceslideshow_carousel_thumbwidth               = $params->get('iceslideshow_carousel_thumbwidth', '160');
$iceslideshow_carousel_thumbspace               = $params->get('iceslideshow_carousel_thumbspace', '10');
$iceslideshow_carousel_text                     = $params->get('iceslideshow_carousel_text', 'Show Thumbnails');
$iceslideshow_carousel_label                  = $params->get('iceslideshow_carousel_label', 'true');
$iceslideshow_carousel_close                  = $params->get('iceslideshow_carousel_close', 'true');
$iceslideshow_carousel_scroll                  = $params->get('iceslideshow_carousel_scroll', 'true');
$iceslideshow_carousel_preloader               = $params->get('iceslideshow_carousel_preloader', 'true');
$iceslideshow_carousel_loading                  = $params->get('iceslideshow_carousel_loading', 'Loading ...');

$iceslideshow_links                               = $params->get('iceslideshow_links', 1)? 'true' : 'false';

$iceslideshow_width                         = $params->get('iceslideshow_width', '820');
$iceslideshow_height                        = $params->get('iceslideshow_height', '230');






switch ($style) {
   default:
       require(JModuleHelper::getLayoutPath('mod_ice_slideshow', 'default'));
}



// Add this to Head
$doc =&JFactory::getDocument();
$doc->addScript($mod_url . 'js/ice_slideshow.js');
$doc->addScript($mod_url . 'js/ice_slideshow_transitions.js');
$doc->addStyleSheet($mod_url . 'css/ice_slideshow.css');

$tohead.='
      <script type="text/javascript">



это 40 строчка
« Последнее редактирование: 14.02.2011, 16:15:05 от dnb »
*

dnb

  • Захожу иногда
  • 74
  • 0 / 0
Re: Ошибка в плагине
« Ответ #2 : 14.02.2011, 16:08:57 »
   <!--
         function startGallery() {
            var myGallery = new IceSlideShow($(\''. $iceslideshow_box .'\'), {
               
               /* AutoPlay */
               timed: '. $iceslideshow_autoplay .',
               delay: '. $iceslideshow_autoplay_delay .',
               
                  /* Base URL */
                 baseurl:\''. $baseurl .'\',
                
               /* Preloader */
               preloader: '. $iceslideshow_preloader .',
               preloaderImage: '. $iceslideshow_preloader_image .',
               preloaderErrorImage: '. $iceslideshow_preloader_error .',
               
               /* Effects */
               defaultTransition: "'. $iceslideshow_transition .'",
               fadeDuration: '. $iceslideshow_transition_duration .',
               
               /* InfoPane options */
               showInfopane: '. $iceslideshow_infopane .',
               slideInfoZoneOpacity: '. $iceslideshow_infopage_opacity .',
               slideInfoZoneSlide: '. $iceslideshow_infopane_slide .',
               
               /* Carousel options */
               showCarousel: '. $iceslideshow_carousel .',
               carouselMinimizedOpacity: '. $iceslideshow_carousel_minopacity .',
               carouselMinimizedHeight: '. $iceslideshow_carousel_minheight .',
               carouselMaximizedOpacity: '. $iceslideshow_carousel_maxopacity.',
               thumbHeight: '. $iceslideshow_carousel_thumbheight .',
               thumbWidth: '. $iceslideshow_carousel_thumbwidth .',
               thumbSpacing: '. $iceslideshow_carousel_thumbspace .',
               textShowCarousel: \''. $iceslideshow_carousel_text .'\',
               showCarouselLabel: '. $iceslideshow_carousel_label .',
               thumbCloseCarousel: '. $iceslideshow_carousel_close .',
               activateCarouselScroller: '. $iceslideshow_carousel_scroll .',
               carouselPreloader: '. $iceslideshow_carousel_preloader .',
               textPreloadingCarousel: \''. $iceslideshow_carousel_loading .' \',
               
               /* Add links to pictures */
               embedLinks: '. $iceslideshow_links .'
               
            });
         }
         window.addEvent(\'domready\',startGallery);
   -->
   </script>
      ';
      $mainframe->addCustomHeadTag($tohead);
      
      
 
?>



странно но здесь 140 строчка если неошибаюсь точка с запятой оО
*

dnb

  • Захожу иногда
  • 74
  • 0 / 0
Re: Ошибка в плагине
« Ответ #3 : 14.02.2011, 16:36:42 »
Вообще возможно это исправит??
*

vmir

  • Осваиваюсь на форуме
  • 17
  • 4 / 0
Re: Ошибка в плагине
« Ответ #4 : 15.02.2011, 09:03:13 »
Глючные какие-то плагины у вас :)

Вот этот код
Код
$iceslideshow_box  = 'iceslideshow_box_' . $GLOBALS['add_iceslideshow_box'];
if (!isset($GLOBALS['add_iceslideshow_box'])) { $GLOBALS['add_iceslideshow_box'] = 1; } else { $GLOBALS['add_iceslideshow_box']++; }

попробуйте переписать так
Код
$iceslideshow_box  = (isset($GLOBALS['add_iceslideshow_box']))? 'iceslideshow_box_' . $GLOBALS['add_iceslideshow_box'] : 'iceslideshow_box_1';
if (!isset($GLOBALS['add_iceslideshow_box'])) { $GLOBALS['add_iceslideshow_box'] = 1; } else { $GLOBALS['add_iceslideshow_box']++; }

По второй ошибке, скорее всего javascript код должен быть заключен в кавычки в php коде, но сделано это криво и php не понимает чего от него хотят.
« Последнее редактирование: 15.02.2011, 09:08:00 от vmir »
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Ошибка в плагине
« Ответ #5 : 15.02.2011, 11:21:14 »
Цитировать
$tohead.='
      <script type="text/javascript">

Код
$tohead = '
      <script type="text/javascript">

вообще бы не советовал использовать такие плагины.
*

dnb

  • Захожу иногда
  • 74
  • 0 / 0
Re: Ошибка в плагине
« Ответ #6 : 16.02.2011, 17:00:47 »
Спасибо) очень помогли

Re: Ошибка в плагине
« Ответ #7 : 30.04.2011, 21:03:25 »
Код
$tohead = '
      <script type="text/javascript">

вообще бы не советовал использовать такие плагины.


Такая же ошибка была в модуле ice_menu

ваше замечание помогло

Подскажите пожалуйста как убрать вторую ошибку
Notice: Undefined variable: moo_bgiframe in H:\wamp\www\....\modules\mod_ice_menu\helper.php on line 46

ошибка в строке
      $bgiframe = ($moo_bgiframe)?"true":"false";

Код
<?php
/**
 * @version $Id$
 * @package IceTheme Module
 * @subpackage IceTheme ModIceMenu
 * @copyright Copyright (C) 2009 IceTheme. All rights reserved.
 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
 */

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

class modIceMenuHelper
{
function geticemenu(&$params)
{
global $mainframe, $Itemid;

JHTML::_( 'behavior.mootools' );

$menu_name = $params->get('menutype', 'mainmenu');
$tag_id = $params->get('tag_id', 'icemenu');
$class_sfx = $params->get('class_sfx', 'icemenu');
$moduleclass_sfx = $params->get('moduleclass_sfx', '');

$icemenu_bgiframe = $params->get('icemenu_bgiframe', 0);
$icemenu_delay = $params->get('icemenu_delay', 500);
$icemenu_duration = $params->get('icemenu_duration', 300);
$icemenu_fps = $params->get('icemenu_fps', 100);
$icemenu_transition = $params->get('icemenu_transition', 'Back.easeInOut');
$icemenu_effects = $params->get('icemenu_effects', 'height');

$effects = str_replace (',','\',\'',$icemenu_effects);

$document = &JFactory::getDocument();
$renderer = $document->loadRenderer( 'module' );
$module = JModuleHelper::getModule( 'mod_mainmenu' );

$module->params = "menutype=$menu_name\nshowAllChildren=1\ntag_id=$tag_id";
$module->params .= "\nmoduleclass_sfx=$moduleclass_sfx\nclass_sfx=$class_sfx";
$icemenu = $renderer->render( $module);


$document->addStyleSheet(JURI::base(). "modules/mod_ice_menu/css/ice_menu.css");
$document->addScript(JURI::base(). "modules/mod_ice_menu/js/ice_menu.js");
$bgiframe = ($moo_bgiframe)?"true":"false";

$tohead = '
      <script type="text/javascript">
<!--
window.addEvent(\'domready\', function() {
new IceMenu($E(\'ul.menu'.$class_sfx.'\'), {
bgiframe: '. $bgiframe .',
delay: '. $icemenu_delay .',
animate: {
props: [\''.$effects.'\'],
opts: {
duration:'. $icemenu_duration .',
fps: '. $icemenu_fps .',
transition: Fx.Transitions.'. $icemenu_transition .'
}
}
});
});
-->
</script>
';
$mainframe->addCustomHeadTag($tohead);


return $icemenu;
}
}
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

simpleform2 ошибка ajax error в Google chrome

Автор safronoff343

Ответов: 1
Просмотров: 1260
Последний ответ 05.06.2020, 20:36:42
от safronoff343
Ошибка #1050 при переносе базы данных на хостинг

Автор Ksen

Ответов: 7
Просмотров: 24924
Последний ответ 16.03.2020, 17:47:29
от Petrovich
При попытке войти в админку 404 ошибка компонента

Автор omezik

Ответов: 4
Просмотров: 2899
Последний ответ 31.08.2019, 22:41:46
от Taatshi
Ошибка в компоненте CKForms

Автор Vas80

Ответов: 9
Просмотров: 1743
Последний ответ 22.04.2019, 13:34:48
от sivers
Ошибка Fatal error: Allowed memory size of 73400320 bytes exhausted

Автор Andre109

Ответов: 1
Просмотров: 2172
Последний ответ 03.12.2018, 01:29:56
от voland