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

kate1987

  • Захожу иногда
  • 51
  • 0 / 0
Здравствуйте. Использую Joomla3 + JoomShopping-4.4.0
Была задача разместить аттрибуты на странице категории в таком виде
http://joxi.ru/pTbqUhjKTJC4Tm0FSVo
Аттрибуты отобразила без проблем с помошью темы в форуме и сделала из радиобытон кнопки таким образом
Код
<script>
// RadioButton
$('.radioblock').find('.radio').click(function(){
var valueRadio = $(this).html();
$(this).parent().find('.radio').removeClass('active');
$(this).addClass('active');
$(this).parent().find('input').val(valueRadio).attr('checked','checked')
});
    </script>

Код
  $html.='<div class="radio">'.$obj->$key.'</div><input type="hidden" name="'.$name.'" id="'.$id_text.'" value="'.$obj->$key.'"'.$sel.' '.$params.'> '."".$separator;


и
стилей
Код
/* = Переключатели Radio Button */
.radio {
display: block;
height: 25px;
background: #fdac74;

cursor: pointer;
text-indent: 10px;
font-size: 13px;
float:left;
color:#8f4d00;
min-width:27px;
margin-right:10px;
}




.radioblock label {
    float: left;

}
.radio.active {
background: #ffdfc8;
}
.radio.error {
border-color: #ff0000;
}

Проблема в том что внутри этих самых копочек аттрибутов выводится параметр $obj->$key то есть номер, а не название аттрибута, если я здесь
Код
  $html.='<div class="radio">'.$obj->$key.'</div><input type="hidden" name="'.$name.'" id="'.$id_text.'" value="'.$obj->$key.'"'.$sel.' '.$params.'> '."".$separator;
ставлю obj->$val вместо  $obj->$key  тогда значение аттрибута в корзине пустое

Прошу помощи. Как отобразить в кнопках название а не ид аттрибута?
*

kate1987

  • Захожу иногда
  • 51
  • 0 / 0
Никто не может подсказать?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Код: javascript
var valueRadio = $(this).html();
что содержит valueRadio после выполнения данного кода?

а потом вы делаете
Код: javascript
$(this).parent().find('input').val(valueRadio)
т.е. задаете для инпута value = valueRadio. и если valueRadio содержит не значение, а название атрибута, то понятно дело ничего хорошего из этого не выходит.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

kate1987

  • Захожу иногда
  • 51
  • 0 / 0
Код: javascript
var valueRadio = $(this).html();
что содержит valueRadio после выполнения данного кода?

а потом вы делаете
Код: javascript
$(this).parent().find('input').val(valueRadio)
т.е. задаете для инпута value = valueRadio. и если valueRadio содержит не значение, а название атрибута, то понятно дело ничего хорошего из этого не выходит.

Я понимаю что то что в valueRadio выводится, а там как я уже писала  $obj->$key, если поставить  obj->$val  тогда товар в корзину не добавляется понимате?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
я то прекрасно понимаю :) вы видимо меня не очень :) и на вопросы не хотите отвечать.

1. $(this).html() возвращает содержимое div. Поскольку div у нас содержит Значение атрибута, то все работает верно.
2. Если заменить содержимое дива на Имя, то будет возвращаться не Значение атрибута, а его Имя. И потом это возвращенное значение записывается в value инпута. И соответственно ничего не работает, потому что value должно содержать Значение атрибута, а никак не Имя

Выводы: поскольку $(this).html() возвращает только одно - содержимое элемента, то использовать его если в диве Имя не представляется возможным. Для хранения параметров и получения их в js придумали очень удобные HTML-атрибуты data-*. Записав сначала в такой атрибут $obj->$key, а потом считав его (а не содержимое дива), вы получите желаемый эффект. Содержимое дива при этом может быть абсолютно любым, хоть Имя атрибута, хоть что угодно другое
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

kate1987

  • Захожу иногда
  • 51
  • 0 / 0
(function ($) {
    $(document).ready(function() {
 



        $('input[type="radio"]').each(function() {
            var self = $(this);
            self.hide();
            if (this.getAttribute('checked')) {
                self.after('<div class="radio-style checked" data-id="' + this.getAttribute('id') + '"  data-name="' + this.getAttribute('id') + '"></div>');
            } else {
                self.after('<div class="radio-style" data-id="' + this.getAttribute('id') + '" data-name="' + this.getAttribute('id') + '"></div>');
            }
        })

        $('.radio-style').live('click', function(){
            var self = $(this);
            var id = this.getAttribute('data-id');
            var name = this.getAttribute('data-name');

            if(self.hasClass('checked')) {
                $('input[name="'+name+'"]').attr('checked', '');
                $('div[data-name="'+name+'"]').removeClass('checked');
                self.removeClass('checked');
                $('#' + id).attr('checked', '');
            } else {
                $('input[name="'+name+'"]').attr('checked', '');
                $('div[data-name="'+name+'"]').removeClass('checked');
                self.addClass('checked');
                $('#' + id).attr('checked', 'checked');
            }
        })
    });
})(jQuery);

   // RadioButton
   //var $j = jQuery.noConflict();
   
   
   
   //$j('#pid_<?php print $product->product_id?>_block_attr_sel_<?php foreach($attributes as $attribut){?><?php print $attribut->attr_id?><?php }?>').find('.input_type_radio').click(function(){
      //var valueRadio = $j(this).html();
      //$j(this).parent().find('.input_type_radio').removeClass('active');
      //$j(this).addClass('active');
      //$j(this).parent().find('input').attr('checked','checked');
//   });
    </script>

вот что то такое сделала, но товар не добавляется, и при выборе нового аттрибута предыдуший не обнояется(( иссякли все идеи уже
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
что за функция
Код: javascript
this.getAttribute
?

я это... я что-то не понял, зачем вы стока всего переписали? вам всего то надо было для дива там где сейчас значение атрибута выводится (там, где вы имя хотите вывести) добавить какой нибудь например
data-attr-id="'.$obj->$key.'" и содержимое при этом уже как угодно пишите, да
Код: javascript
var valueRadio = $j(this).html();
заменить на
Код: javascript
var valueRadio = $j(this).data('attrId');
« Последнее редактирование: 31.01.2014, 18:49:13 от dmitry_stas »
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

kate1987

  • Захожу иногда
  • 51
  • 0 / 0
да название вывело но добавлять аттрибут в корзину не хочет тк.к добавляет попараметру записаному в valueRadio. Так как там не ид а название добавлять не хочет((

вот как для инпута параметр аттрибута изменяется $(this).parent().find('input').val(valueRadio).attr('checked','checked')

*

nevigen

  • Moderator
  • 10451
  • 863 / 25
  • http://n*****n.com
Тема
Цитировать
Re: Отображение аттрибутов на странице категории в виде кнопок
теперь
Цитировать
да название вывело но добавлять аттрибут в корзину не хочет
:)

разные задачи априори.
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
kate1987, та ну шо ж за апврп4еек4ц3! вы читаете что я пишу, или просто делаете, что считаете нужным? я могу прекратить, если вам оно не надо.

вы заменили на var valueRadio = $(this).data('attrId'); и в <span... добавили data-attr-id="'.$obj->$key.'" ? вы сделали это?

PS и я по двум темам не успеваю :) вы или тут, или там :)
« Последнее редактирование: 31.01.2014, 20:18:44 от dmitry_stas »
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

kate1987

  • Захожу иногда
  • 51
  • 0 / 0
я извиняюсь не пойму к какой a href? этой
Код
 href="<?php print $product->buy_link?> data-attr-id="'.$obj->$key.'"">
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
я исправил уже. span судя по сообщению в соседней теме, тот что раньше был <div class="radio">
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

kate1987

  • Захожу иногда
  • 51
  • 0 / 0
Нет не хочет добавлять в корзину(( Пишет выбирите параметры

Код
<script>
// RadioButton
var $j = jQuery.noConflict();
$j('#pid_<?php print $product->product_id?>_block_attr_sel_<?php foreach($attributes as $attribut){?><?php print $attribut->attr_id?><?php }?>').find('.input_type_radio').click(function(){
var valueRadio = $j(this).data('attrId');
$j(this).parent().find('.input_type_radio').removeClass('active');
$j(this).addClass('active');
$j(this).parent().find('input').val(valueRadio).attr('checked','checked');
});
    </script>

Код
  $html.='<span class="input_type_radio" data-attr-id="'.$obj->$key.'">'.$obj->$val.'</span><input type="radio" name="'.$name.'" id="'.$id_text.'" value="'.$obj->$key.'"'.$sel.' '.$params.'> '."".$separator;
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Код: javascript
$j('#pid_<?php print $product->product_id?>_block_attr_sel_<?php foreach($attributes as $attribut){?><?php print $attribut->attr_id?><?php }?>')
что это и для чего это?

kate1987, у вас в первом посте - полностью рабочий код. добавление в корзину работает как нужно, за исключением того, что вас там не устраивало, что у вас в диве выводится $obj->$key. так? для чего вы объясните мне пожалуйста наделали это все что есть сейчас? верните все обратно как было в первом посте, и сделайте только те 2 вещи которые я написал тут. то, что вы собственно уже сделали. и больше ничего менять не нужно по отношению к первоначальному рабочему коду
« Последнее редактирование: 31.01.2014, 22:23:21 от dmitry_stas »
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

kate1987

  • Захожу иногда
  • 51
  • 0 / 0
Да вы правы все работает ^-^ ^-^ Юольшое спасибо Я просто хотела поправить для плагина который добавляет аттрибуты, который нашла попозже
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Цитировать
Да вы правы все работает
Я искренне рад :)

Цитировать
хотела поправить для плагина который добавляет аттрибуты, который нашла попозже
Ну... Тяжело найти черную кошку в темной комнате, особенно если ее там нет… Я то знаю только то, что вы в теме показываете :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вывести заголовок прописанный в пункте меню вместо названия категории

Автор anatolij

Ответов: 13
Просмотров: 2403
Последний ответ 04.12.2024, 15:20:00
от kit2m2
В описании категории не работает плагин Jshortcodes

Автор SLV

Ответов: 1
Просмотров: 1310
Последний ответ 09.09.2024, 17:35:29
от kit2m2
Сортировка товаров внутри категории

Автор oslyabya

Ответов: 1
Просмотров: 1429
Последний ответ 02.08.2024, 22:06:39
от nevigen
Как исключить отображение текста в определенных категориях?

Автор art22

Ответов: 4
Просмотров: 1469
Последний ответ 25.07.2023, 19:53:58
от art22
Сравнить общее количество товаров категории с количеством на странице

Автор goga_pgasovav

Ответов: 6
Просмотров: 1446
Последний ответ 25.01.2023, 20:12:58
от goga_pgasovav