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

migus

  • Moderator
  • 992
  • 144 / 0
  • OPEN THE BOX
Если вы используете CommunityBuilder 1.2.3 и хотите поощрять своих участников сообщества за установление дружбы - вот 2 правила:

- Устанавливаем их через админку AUP и назначаем стоимость... например

1. За подтверждение дружбы: newconnection_cb.xml (см. аттач) + 50 баллов
2. За прекращение дружбы: remconnection_cb.xml (см. аттач) - 50 баллов



- меняем файл: ...home.../docs/components/com_comprofiler/comprofiler.php (см. аттач)
  (или анализируем код и редактируем свой)

NB: Не забудьте сделать бэкап!  ;D

Дружим...

P.S. - Баллы начисляются не инициатору дружбы, а тому кто ее подтверждает...
       - Списываются баллы у пользователя, прекратившего дружбу...

- удачи  ;)





[вложение удалено Администратором]
« Последнее редактирование: 16.09.2010, 18:05:34 от migus »
"The Lord Of A SandBox"
*

damirg

  • Новичок
  • 8
  • 0 / 0
Уважаемый Migus, подскажите пожалуйста, сделал все согласно примера, но списание баллов идет не только за разрыв дружбы, но и за отказ на запрос о дружбе. Это неправильно. Что нужно подправить? Спасибо.
*

migus

  • Moderator
  • 992
  • 144 / 0
  • OPEN THE BOX
На какой версии CB? Покажите код.
"The Lord Of A SandBox"
*

damirg

  • Новичок
  • 8
  • 0 / 0
версия 1.4

Вот два фрагмента где были сделаны вставки в коде (файл: comprofiler.php)


Цитировать
//Connections

function addConnection($userid,$connectionid,$umsg=null) {
   global $_CB_framework, $ueConfig;

   $andItemid = getCBprofileItemid(true);

   if(!$ueConfig['allowConnections']) {
      echo _UE_FUNCTIONALITY_DISABLED;
      return;
   }
   if (! ($_CB_framework->myId() > 0 ) ) {
      cbNotAuth();
      return;
   }
   $cbCon=new cbConnection($userid);
   $cbCon->addConnection($connectionid,stripcslashes($umsg));
   $url=cbSef( "index.php?option=com_comprofiler&task=userProfile&user=" . $connectionid . $andItemid );
   echo "<script type=\"text/javascript\"> alert('".addslashes(htmlspecialchars($cbCon->getUserMSG()))."'); document.location.href='".cbUnHtmlspecialchars($url)."'; </script>\n";
}

function removeConnection( $userid, $connectionid ) {
   global $_CB_framework, $ueConfig;

   $andItemid   =   getCBprofileItemid(true);

   if ( ! $ueConfig['allowConnections'] ) {
      echo _UE_FUNCTIONALITY_DISABLED;
      return;
   }
   if ( ! ( $_CB_framework->myId() > 0 ) ) {
      cbNotAuth();
      return;
   }
   $cbCon      =   new cbConnection( $userid );
   if ( ! $cbCon->removeConnection( $userid, $connectionid ) ) {
      $msg   =   $cbCon->getErrorMSG();
   } else {
      $msg   =   $cbCon->getUserMSG();
   
            //alpha remove connection
            $api_AUP = JPATH_SITE.DS.'components'.DS.'com_alphauserpoints'.DS.'helper.php';
            if ( file_exists($api_AUP))
            {
            require_once ($api_AUP);
            AlphaUserPointsHelper::newpoints( 'plgaup_remconnection_cb' );
            }
            //alpha remove connection 
            
   }


Цитировать
   // simple spoof check security
   cbSpoofCheck( 'manageConnections' );

   if(!$ueConfig['allowConnections']) {
      echo _UE_FUNCTIONALITY_DISABLED;
      return;
   }
   if ( ! ( $_CB_framework->myId() > 0 ) ) {
      cbNotAuth();
      return;
   }
   $cbCon   =   new cbConnection( $_CB_framework->myId() );

   if (is_array($connectionids)) {
      foreach($connectionids AS $cid) {
         $action      =   cbGetParam( $_POST, $cid . 'action' );
         if ( $action== 'd' ) {
            $cbCon->denyConnection( $_CB_framework->myId(), $cid );
         } elseif ( $action == 'a' ) {
            $cbCon->acceptConnection( $_CB_framework->myId(), $cid );
//alpha new connection
$api_AUP = JPATH_SITE.DS.'components'.DS.'com_alphauserpoints'.DS.'helper.php';
if ( file_exists($api_AUP))
{
  require_once ($api_AUP);
  AlphaUserPointsHelper::newpoints( 'plgaup_newconnection_cb' );
 }
//alpha new connection     
*

migus

  • Moderator
  • 992
  • 144 / 0
  • OPEN THE BOX
Странно. По-идее там функция denyConnection существует отдельно. Для CB 1.4 еще не смотрел, но скоро на одном из сайтов придется делать самому, т.ч. проверю - отпишусь.
"The Lord Of A SandBox"
*

damirg

  • Новичок
  • 8
  • 0 / 0
Спасибо!
*

damirg

  • Новичок
  • 8
  • 0 / 0
Уважаемый migus, как у Вас с этим правилом на для CB 1.4, проблем не было?
*

migus

  • Moderator
  • 992
  • 144 / 0
  • OPEN THE BOX
Не довелось использовать на CB 1.4, но на одном из сайтов с версией CB 1.7 все работает нормально...
"The Lord Of A SandBox"
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как делать собственные правила? Перевод документации для разработчиков AUP?

Автор migus

Ответов: 8
Просмотров: 9479
Последний ответ 23.07.2016, 15:11:01
от Lake
Правила AUP для кармы Kunena 1.6

Автор migus

Ответов: 11
Просмотров: 7665
Последний ответ 01.12.2012, 11:50:46
от Horned_HedgeHog
Правила AUP для опросов Kunena 1.6

Автор migus

Ответов: 0
Просмотров: 4863
Последний ответ 02.02.2011, 04:43:25
от migus