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

RAZORG1991

  • Захожу иногда
  • 349
  • 6 / 0
mod_menu и его файлы вывода
« : 20.08.2013, 14:21:14 »
Не могу разобраться с файлами в папке mod_menu/tmpl

Какой за что отвечает?

В каком файле лежат ссылки меню?

Пытаюсь прикрутить стили bootstrap для выпадающего меню, но что-то не получается со ссылками.

Нехитрыми манипуляциями изменил файл default.php добавил где нужно классы и создал альтернативный макет в папке мой_шаблон/html/mod_menu/default1.php

Код
<?php
/**
 * @package Joomla.Site
 * @subpackage mod_menu
 * @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
 * @license GNU General Public License version 2 or later; see LICENSE.txt
 */

// No direct access.
defined('_JEXEC') or die;

// Note. It is important to remove spaces between elements.
?>
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
     <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
    </button>
</div>
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="menu<?php echo $class_sfx;?> nav navbar-nav menu-horizontal"<?php
$tag = '';
if ($params->get('tag_id')!=NULL) {
$tag = $params->get('tag_id').'';
echo ' id="'.$tag.'"';
}
?>>
<?php
foreach ($list as $i => &$item) :
$class = 'item-'.$item->id;
if ($item->id == $active_id) {
$class .= ' current';
}

if (in_array($item->id, $path)) {
$class .= ' active';
}
elseif ($item->type == 'alias') {
$aliasToId = $item->params->get('aliasoptions');
if (count($path) > 0 && $aliasToId == $path[count($path)-1]) {
$class .= ' active';
}
elseif (in_array($aliasToId, $path)) {
$class .= ' alias-parent-active';
}
}

if ($item->deeper) {
$class .= ' deeper dropdown';
}

if ($item->parent) {
$class .= ' parent';
}

if (!empty($class)) {
$class = ' class="'.trim($class).'"';
}

echo '<li'.$class.'>';

// Render the menu item.
switch ($item->type) :
case 'separator':
case 'url':
case 'component':
require JModuleHelper::getLayoutPath('mod_menu', 'default_'.$item->type);
break;

default:
require JModuleHelper::getLayoutPath('mod_menu', 'default_url');
break;
endswitch;

// The next item is deeper.
if ($item->deeper) {
echo '<ul class="dropdown-menu">';
}
// The next item is shallower.
elseif ($item->shallower) {
echo '</li>';
echo str_repeat('</ul></li>', $item->level_diff);
}
// The next item is on the same level.
else {
echo '</li>';
}
endforeach;
?></ul>
</div>

На одном блоге прочитал, что за ссылки отвечает файл default_component и немного также изменил его, перед этим также создав мой_шаблон?html/mod_menu/default1_component

Код
<?php
/**
 * @package Joomla.Site
 * @subpackage mod_menu
 * @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
 * @license GNU General Public License version 2 or later; see LICENSE.txt
 */

// No direct access.
defined('_JEXEC') or die;

// Note. It is important to remove spaces between elements.
$class = $item->anchor_css ? 'class="'.$item->anchor_css.'" ' : '';
$title = $item->anchor_title ? 'title="'.$item->anchor_title.'" ' : '';
if ($item->menu_image) {
$item->params->get('menu_text', 1 )?
$linktype = '<img src="'.$item->menu_image.'" alt="'.$item->title.'" /><span class="image-title">'.$item->title.'</span> ' :
$linktype = '<img src="'.$item->menu_image.'" alt="'.$item->title.'" />';
}
else { $linktype = $item->title;
}

$data_toggle = $item->deeper ? 'data-toggle="dropdown"' : '';

switch ($item->browserNav) :
default:
case 0:
?><a <?php echo $class; ?>href="<?php echo $item->deeper ? '#' : $item->flink; ?>" <?php echo $data_toggle; ?> <?php echo $title; ?>><?php echo $linktype; ?><?php echo $data_toggle !== '' ? '<b class="caret"></b>' : '' ?></a><?php
break;
case 1:
// _blank
?><a <?php echo $class; ?>href="<?php echo $item->flink; ?>" target="_blank" <?php echo $title; ?>><?php echo $linktype; ?></a><?php
break;
case 2:
// window.open
?><a <?php echo $class; ?>href="<?php echo $item->flink; ?>" onclick="window.open(this.href,'targetWindow','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes');return false;" <?php echo $title; ?>><?php echo $linktype; ?></a>
<?php
break;
endswitch;

Но не получается сделать дропдаун ((((

мне нужно к ссылке прикрутить следующее
Код
class="dropdown-toggle" data-toggle="dropdown"><b class="caret"></b>

Никак не прикручивается эта строка к ссылке. Прошу помощи

« Последнее редактирование: 20.08.2013, 14:27:39 от RAZORG1991 »
*

antp

  • Новичок
  • 4
  • 0 / 0
Re: mod_menu и его файлы вывода
« Ответ #1 : 01.09.2013, 02:38:57 »
Тебе надо переписать default_url.php
У меня работает так:
Спойлер
[свернуть]
ЗЫ: погугли "joostrap", на трекере есть..
« Последнее редактирование: 01.09.2013, 02:45:29 от antp »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Поле вывода календаря как d-m-Y. XML элемент календарь

Автор oppo

Ответов: 0
Просмотров: 1566
Последний ответ 19.07.2014, 15:43:47
от oppo
Условия вывода <div class=""> в меню

Автор Snippet

Ответов: 1
Просмотров: 2249
Последний ответ 19.06.2014, 04:30:26
от Snippet
Модуль вывода статей

Автор Kulgar

Ответов: 1
Просмотров: 995
Последний ответ 24.12.2013, 21:38:18
от Kulgar
Изменение порядка вывода элементов с сохранение в БД в backend'е

Автор d9k

Ответов: 3
Просмотров: 1972
Последний ответ 03.08.2013, 20:29:37
от SDKiller
Настройка вывода меню (нужна помощь)

Автор Mantoptera

Ответов: 9
Просмотров: 1579
Последний ответ 25.05.2013, 18:09:10
от Aleks.Denezh