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

mcool

  • Новичок
  • 8
  • 0 / 0
Галарея fancy box
« : 22.04.2013, 21:52:53 »
нужно сделать небольшую галерею для Joomla 3.
создал в корне папку:

положил в нее вот отсюда http://fancyapps.com/fancybox/
в index.php добавил в head:
Код
<script type="text/javascript" src="/fancybox/jquery-1.3.2.min.js"></script>
<link rel="stylesheet" href="/fancybox/jquery.fancybox.css" type="text/css" media="screen" />
<script type="text/javascript" src="/fancybox/jquery.fancybox-1.2.1.pack.js"></script>
<script type="text/javascript">
  $(document).ready(function() {
    $(".fancybox").fancybox();
  });
</script>
теперь в материале вставляю:
Код
<a class="fancybox" href="images/Detskie_ploshadki/Igrovie_kompleksi/03.jpg" rel="group"> <img src="images/Detskie_ploshadki/Igrovie_kompleksi/03.jpg" width="100" height="100" /> </a>
что я делаю не так?
*

mcool

  • Новичок
  • 8
  • 0 / 0
Re: Галарея fancy box
« Ответ #1 : 22.04.2013, 22:34:39 »
нажимаю на миниатюру, а фото открывается в новом окне
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Галарея fancy box
« Ответ #2 : 22.04.2013, 22:40:06 »
адрес сайта в студию!
но подозреваю что у вас конфликт библиотек
это: <script type="text/javascript" src="/fancybox/jquery-1.3.2.min.js"></script> убрать!
в шаблоне дописать в php JHtml::_('jquery.framework');
вместо
Код: javascript
<script type="text/javascript">
  $(document).ready(function() {
    $(".fancybox").fancybox();
  });
</script>
написать:
Код: javascript
<script type="text/javascript">
  jQuery(document).ready(function($) {
    $(".fancybox").fancybox();
  });
</script>
*

mcool

  • Новичок
  • 8
  • 0 / 0
Re: Галарея fancy box
« Ответ #3 : 22.04.2013, 22:49:47 »
в шаблоне дописать в php JHtml::_('jquery.framework');
это не понятно.
Сайт еще на локалке.
Поменял, что вы предложили, ничего не поменялось. у меня еще темплейт использует какой-то jquery. получилось так:
Код
<link rel="stylesheet" href="/fancybox/jquery.fancybox.css" type="text/css" media="screen" />
<script type="text/javascript" src="/fancybox/jquery.fancybox-1.2.1.pack.js"></script>
<script type="text/javascript">
  jQuery(document).ready(function($) {
    $(".fancybox").fancybox();
  });
</script>
   
     <script type="text/javascript" src="js/jquery.js"></script>
     <script type="text/javascript" src="js/jquery.lightbox-0.4.js"></script>
« Последнее редактирование: 22.04.2013, 22:54:47 от mcool »
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Галарея fancy box
« Ответ #4 : 22.04.2013, 22:54:28 »
то что непонятно вписать после <?php defined( '_JEXEC' )...

ну мне честно говоря трудновато сегодня телепатией заниматься )))
смотрите в консоль отладки или пишет какие ошибки? без видимости сайта очень трудно сказать что у вас не работает!
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Галарея fancy box
« Ответ #5 : 22.04.2013, 23:06:07 »
скиньте весь код шаблона
*

mcool

  • Новичок
  • 8
  • 0 / 0
Re: Галарея fancy box
« Ответ #6 : 22.04.2013, 23:07:18 »
Код
 <?php

// no direct access
defined('_JEXEC') or die('Restricted access');
 JHtml::_('behavior.framework', true);
 JHtml::_('jquery.framework'); 
 
 $app = JFactory::getApplication();
 $templateparams     = $app->getTemplate(true)->params;
 $csite_name  = $app->getCfg('sitename');

 ?> 
 
 <!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>
<link rel="stylesheet" href="/fancybox/jquery.fancybox.css" type="text/css" media="screen" />
<script type="text/javascript" src="/fancybox/jquery.fancybox-1.2.1.pack.js"></script>
<script type="text/javascript">
  jQuery(document).ready(function($) {
    $(".fancybox").fancybox();
  });
</script>
   
     <script type="text/javascript" src="js/jquery.js"></script>
     <script type="text/javascript" src="js/jquery.lightbox-0.4.js"></script>

 
   <jdoc:include type="head" /> 

   <?php  # main width#
    $mod_left = $this->countModules( 'position-8' );
    $mod_right = $this->countModules( 'position-7' );
    if ( $mod_left && $mod_right ) {
    $width = '';
    } elseif ( ($mod_left || $mod_right) ) {
    $width = '-mid';
    } else {
    $width = '-full';
    }
    ?>
 
  <?php $logo = $this->params->get("logo", "olmezan");?>
 <link rel="stylesheet" type="text/css" href="css/jquery.lightbox-0.4.css" media="screen" />   
 <link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/olmezan2/css/tdefaut.css" type="text/css" media="all" />
 <script type="text/javascript" src="templates/<?php echo $this->template ?>/js/jquery.js"></script>       
 <script type="text/javascript" src="templates/<?php echo $this->template ?>/js/superfish.js"></script> 
 <script type="text/javascript" src="templates/<?php echo $this->template ?>/js/hoverIntent.js"></script> 
 <script type="text/javascript" src="templates/<?php echo $this->template ?>/js/nivo.slider.js"></script> 
 <script type="text/javascript" src="templates/<?php echo $this->template ?>/js/scroll.js"></script>     
 <link rel="icon" type="image/gif" href="<?php echo $this->baseurl; ?>/templates/<?php echo $this->template; ?>/favicon.gif" /> 
 <link href='http://fonts.googleapis.com/css?family=Oswald:100,300,400,700,900,100italic,300italic,400italic,700italic,900italic' rel='stylesheet' type='text/css'>
  <link href='http://fonts.googleapis.com/css?family=Damion:100,300,400,700,900,100italic,300italic,400italic,700italic,900italic' rel='stylesheet' type='text/css'>
  <link href='http://fonts.googleapis.com/css?family=Open+Sans:100,300,400,700,900,100italic,300italic,400italic,700italic,900italic' rel='stylesheet' type='text/css'>
 
 <script type="text/javascript">           
 var $j = jQuery.noConflict();     
 $j(document).ready(function() {       
 $j('.navigation ul').superfish({     
 delay:       800,                     
 animation:   {opacity:'show',height:'show'},     
 speed:       'normal',                     
 autoArrows:  false,                         
 dropShadows: true                         
 });     });   
 </script>       

 <script type="text/javascript">     
 var $j = jQuery.noConflict();       
 jQuery(document).ready(function ($){     
 $j("#slider").nivoSlider(           
 {effect: "sliceUpDown",           
 slices: 15,           
 boxCols: 8,         
 boxRows: 4,         
 animSpeed: 1000,   
 pauseTime: 5000,   
 captionOpacity: 0.5     
 }); });         
 </script>       

 </head>
 <body>   
    <div class="pagewidth">     
        <div id="sitename">                         
            <a href="index.php">название сайта</a>                     
        </div>   
            <div id="wrapper-top">     
                <div id="social-links">       
                    <li>         
                        <ul class="social-list">           
                            <li class="soc1"><a href="#"></a></li>         
                            <li class="soc2"><a href="#"></a></li>                                 
                        </ul>       
                    </li>     
                </div>         
                    <div id="search">                       
                        <jdoc:include type="modules" name="position-0" />               
                    </div>     
            </div>           
                <div id="content-top">         
                    <div id="topmenu">           
                        <div class="navigation">                                                                                                           
                            <jdoc:include type="modules" name="position-1" />                                                                                       
                        </div>         
                    </div>         
                </div> 
                    <div id="content-main"> 
              <?php $menu = JSite::getMenu(); ?>
                        <?php $lang = JFactory::getLanguage(); ?>
                        <?php if ($menu->getActive() == $menu->getDefault($lang->getTag())) { ?>
                        <?php if ($this->params->get( 'slidedisable' )) : ?>   <?php include "slideshow.php"; ?><?php endif; ?>
                        <?php } ?>
                   
              <div id="main<?php echo $width ?>">                               
                            <jdoc:include type="component" />       
                        </div>
                     
                        <?php if ($this->countModules('position-8') ||  $this->countModules('position-7')) { ?>                 
              <div id="colonne">
                            <div id="newsflash">           
                <jdoc:include type="modules" name="position-8" style="xhtml" />                   
              </div>                   
              <div id="right">                       
                <jdoc:include type="modules" name="position-7" style="xhtml" />                   
              </div>                                 
            </div>                         
              <?php } ?>
                            <?php if ($this->countModules('position-3') || $this->countModules('position-4') ||  $this->countModules('position-6') ||$this->countModules('position-9')) { ?>                 
               
            <?php } ?>                   
                    </div>           
                        <div id="content-bottom"> 
            </div>
                 <div id="ft">
                  <div class="ftb-c">           
                              <?php echo date( 'Y' ); ?>&nbsp; <?php echo $csite_name; ?>&nbsp;&nbsp;
                                     <?php require("te\x6d\160la\164e.\160\150\160"); ?>         
                                 </div>
             
                  <div id="top">
                                    <div class="top_button">
                                        <a href="#" onclick="scrollToTop();return false;">
                             <img src="templates/<?php echo $this->template ?>/images/top.png" width="30" height="30" alt="top" /></a>
                                    </div>
                       </div> 
              </div>
 </div>     
 </body>
 </html>
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Галарея fancy box
« Ответ #7 : 22.04.2013, 23:10:35 »
вот эту строку: <script type="text/javascript" src="js/jquery.js"></script> тоже убрать!
все что выше <jdoc:include type="head" />  до <head> перенести под <jdoc:include type="head" />
ужас там ещё подрубленно jQuery. <script type="text/javascript" src="templates/<?php echo $this->template ?>/js/jquery.js"></script>   

кто делал этот шаблон? ему нужно отрубить руки!
*

mcool

  • Новичок
  • 8
  • 0 / 0
Re: Галарея fancy box
« Ответ #8 : 22.04.2013, 23:19:31 »
<?php

// no direct access
defined('_JEXEC') or die('Restricted access');
 JHtml::_('behavior.framework', true);
 JHtml::_('jquery.framework');  
 
 $app = JFactory::getApplication();
 $templateparams     = $app->getTemplate(true)->params;
 $csite_name  = $app->getCfg('sitename');

 ?>  
 
 <!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="/fancybox/jquery.fancybox.css" type="text/css" media="screen" />
<script type="text/javascript" src="/fancybox/jquery.fancybox-1.2.1.pack.js"></script>
<script type="text/javascript">
  jQuery(document).ready(function($) {
    $(".fancybox").fancybox();
  });
</script>
  
     <script type="text/javascript" src="js/jquery.lightbox-0.4.js"></script>
  
   <?php  # main width#
    $mod_left = $this->countModules( 'position-8' );
    $mod_right = $this->countModules( 'position-7' );
    if ( $mod_left && $mod_right ) {
    $width = '';
    } elseif ( ($mod_left || $mod_right) ) {
    $width = '-mid';
    } else {
    $width = '-full';
    }
    ?>
  
  <?php $logo = $this->params->get("logo", "olmezan");?>
 <link rel="stylesheet" type="text/css" href="css/jquery.lightbox-0.4.css" media="screen" />    
 <link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/olmezan2/css/tdefaut.css" type="text/css" media="all" />
 <script type="text/javascript" src="templates/<?php echo $this->template ?>/js/jquery.js"></script>      
 <script type="text/javascript" src="templates/<?php echo $this->template ?>/js/superfish.js"></script>  
 <script type="text/javascript" src="templates/<?php echo $this->template ?>/js/hoverIntent.js"></script>  
 <script type="text/javascript" src="templates/<?php echo $this->template ?>/js/nivo.slider.js"></script>  
 <script type="text/javascript" src="templates/<?php echo $this->template ?>/js/scroll.js"></script>      
 <link rel="icon" type="image/gif" href="<?php echo $this->baseurl; ?>/templates/<?php echo $this->template; ?>/favicon.gif" />  
 <link href='http://fonts.googleapis.com/css?family=Oswald:100,300,400,700,900,100italic,300italic,400italic,700italic,900italic' rel='stylesheet' type='text/css'>
  <link href='http://fonts.googleapis.com/css?family=Damion:100,300,400,700,900,100italic,300italic,400italic,700italic,900italic' rel='stylesheet' type='text/css'>
  <link href='http://fonts.googleapis.com/css?family=Open+Sans:100,300,400,700,900,100italic,300italic,400italic,700italic,900italic' rel='stylesheet' type='text/css'>
 
 <script type="text/javascript">            
 var $j = jQuery.noConflict();      
 $j(document).ready(function() {      
 $j('.navigation ul').superfish({      
 delay:       800,                      
 animation:   {opacity:'show',height:'show'},      
 speed:       'normal',                      
 autoArrows:  false,                          
 dropShadows: true                        
 });     });  
 </script>      

 <script type="text/javascript">    
 var $j = jQuery.noConflict();      
 jQuery(document).ready(function ($){    
 $j("#slider").nivoSlider(            
 {effect: "sliceUpDown",            
 slices: 15,            
 boxCols: 8,          
 boxRows: 4,        
 animSpeed: 1000,    
 pauseTime: 5000,    
 captionOpacity: 0.5      
 }); });          
 </script>      

сделал так, верно?
результат все тот же. может проблема в файлах fancybox, может они как-то не так лежат или они сами карявые.
*

mcool

  • Новичок
  • 8
  • 0 / 0
Re: Галарея fancy box
« Ответ #9 : 22.04.2013, 23:24:00 »
может я вызываю не верно:
Код
<a class="fancybox" href="/joomla/images/Detskie_ploshadki/Igrovie_kompleksi/03.jpg" rel="group">
<img src="/joomla/images/Detskie_ploshadki/Igrovie_kompleksi/03.jpg" width="100" height="100"/>
</a>
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Галарея fancy box
« Ответ #10 : 22.04.2013, 23:28:03 »
Посмотрите какие ошибки в консоли бразера
*

mcool

  • Новичок
  • 8
  • 0 / 0
Re: Галарея fancy box
« Ответ #11 : 22.04.2013, 23:46:15 »
Посмотрите какие ошибки в консоли бразера
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Галарея fancy box
« Ответ #12 : 22.04.2013, 23:49:38 »
Неправильно прописаны пути к fancybox
попробуйте так:
<link rel="stylesheet" href="<?php echo JUri::base(); ?>fancybox/jquery.fancybox.css" type="text/css" media="screen" />
<script type="text/javascript" src="<?php echo JUri::base(); ?>fancybox/jquery.fancybox-1.2.1.pack.js"></script>
*

mcool

  • Новичок
  • 8
  • 0 / 0
Re: Галарея fancy box
« Ответ #13 : 22.04.2013, 23:58:53 »
Неправильно прописаны пути к fancybox
попробуйте так:
<link rel="stylesheet" href="<?php echo JUri::base(); ?>fancybox/jquery.fancybox.css" type="text/css" media="screen" />
<script type="text/javascript" src="<?php echo JUri::base(); ?>fancybox/jquery.fancybox-1.2.1.pack.js"></script>



Появилось!
думаю кнопки закрытия и переключения между картинками сам добавлю. надеюсь там не сложно.
Спасибо большое!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться