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

LyalyaChornaya

  • Захожу иногда
  • 236
  • 15 / 1
Вопрос следующий: Зачем в модуле нужен helper.php?
Хочу попробовать разработать модуль калькулятора для сайта - расчет стоимости стекла. Сразу возник вопрос, не могу найти ответ на него (хэлловорд, как пример, на всех сайтах с обучением ответа, естественно на него не даст). Просмотрела все стандартные модули Joomla, тоже не помогло, они работают с компонентом com_content. Конечно, я понимаю, если модуль берет данные из таблицы компонента, то он нужен, но у меня будет в админке администратор вводит цены на стекло, коэффициент на сложность, цену на отверстия и т.д., а уж с фронтэнда пользователь будет вводить размер и и выбирать нужные данные из формы. Хотелось бы с самого начала сделать по всем правилам, то есть с этим хэлпером, тогда сразу возникает следующий вопрос, что туда вписывать.
Ну написала я обязательное defined( '_JEXEC' ) or die; а вот дальше что?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
helper.php в модуле просто дополнительный файл в который вынесли бизнес логику!

Ну написала я обязательное defined( '_JEXEC' ) or die; а вот дальше что?
А дальше создаете нужный вам класс либо функции и используете их в шаблоне, или точке вызова модуля...
*

LyalyaChornaya

  • Захожу иногда
  • 236
  • 15 / 1
Istaan, вот это
Цитировать
вынесли бизнес логику
для меня пока набор слов. Опытному программисту это, конечно, может, и смешно, но все когда-то начинали. Я у вас на сайте попробовала сделать модуль, в хэлпере этом получилось следующее:
Цитировать
<?php

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

class ModuleTestHelper
{

   /**
    * getData method
    * @param $params
    * @return array
    */
   static function getData( $params )
   {
      $db = JFactory::getDbo();
      return array();
   }

}
$db = JFactory::getDbo(); - это ведь модуль обращается к БД или я ошибаюсь?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Istaan, вот это  для меня пока набор слов. Опытному программисту это, конечно, может, и смешно, но все когда-то начинали.
ну бизнес логика скажем так это вы в отдельный файл выносите работу с базой данный, обработку этих данных, подготовка к выводу что бы не мешать в одном файле с отображением данных, тоесть грубо говоря если вы посмотрите в шаблоны модулей то вы не заметите там запросов в базу например, банально вывод например данных, пару условий, и т.д. все потому что данные подготовленны уже в helper!

Я у вас на сайте попробовала сделать модуль, в хэлпере этом получилось следующее:$db = JFactory::getDbo(); - это ведь модуль обращается к БД или я ошибаюсь?
Ну не обращается к БД, а получает объект класса JDatabaseDriver с помощью которого вы можете выполнять запросы в БД..
сделано у меня это банально для того что бы меньше писанины было ) кому не надо работаать в модуле с базой - удалит.. кому надо допишет функционал )
*

LyalyaChornaya

  • Захожу иногда
  • 236
  • 15 / 1
Ладно, для чего нужен хэлпер, я вроде бы разобралась. Он делает выборку из БД и (или) присваивает значения переменным из манифеста. Что там писать, я так и не поняла, хотя хотелось бы разобраться. Ну написала defined( '_JEXEC' ) or die;, ну написала class modCalcglassHelper и что дальше? Поймите, хочу разобраться, а не тупо переписывать готовый код у других, не понимая смысла. Только очень прошу, если кто-то из программистов мне ответит, помните, что отвечаете человеку, который только пытается научиться и не программист, без всяких страшных слов, ладно?

Теперь вопрос уже конкретно по калькулятору.
mod_calcglass.xml
Код
<field name="otvsm" type="text" label="Цена за 1 отверстие д.15-20мм" default="60"/>
<field name="otvmed" type="text" label="Цена за 1 отверстие д.26-42мм" default="130"/>
<field name="otvlar" type="text" label="Цена за 1 отверстие свыше 42мм" default="200"/>

default.php
Код
<script type="text/javascript">
otvsmall = eval(form.otvsmall.value); //Присваиваем otvsmall значение из поля otvsmall
otvmedium = eval(form.otvmedium.value); //Присваиваем otvmedium значение из поля otvmedium
otvlarge = eval(form.otvlarge.value); //Присваиваем otvlarge значение из поля otvlarge
result = otvsmall*60+otvmedium*130+otvlarge*200;
form.total1.value = result; //выдаем результат
</script>

<form name="form" style="display: block;" class="calc" action="" method="post" onClick="calculate(this.form); return false;">
   <p>Введите кол-во отверстий д.15-20мм: <input type="text" name="otvsmall" value="0"></p>
   <p>Введите кол-во отверстий д.26-42мм: <input type="text" name="otvmedium" value="0"></p>
   <p>Введите кол-во отверстий д.свыше 42мм: <input type="text" name="otvlarge" value="0"></p>
</form>

Как в javascript передать значения 60,130,200 из mod_calcglass.xml? Попытка вставить
Код
<?php $otvsm ?>
вместо чисел не прокатила.
Кстати, есть у меня в форме еще селект, хотела вставить вместо
Код
<option value="1300">
(к примеру)
Код
<option value=<?php $price_t8 ?>>
не прокатило тоже. Я догадываюсь, что я что-то не так делаю, но что не так - даже божественный Google не помог.
*

fsv

  • Живу я здесь
  • 2782
  • 411 / 2
var x = "<?php echo $otvsm ?>";
<option value="<?php echo $price_t8 ?>">
Веб-разработка: заказ. Только новая разработка.
*

LyalyaChornaya

  • Захожу иногда
  • 236
  • 15 / 1
В том-то и дело, что такая запись почему-то не действует
Код
<option value="<?php echo $price_t8; ?>"><?php echo JText::_('MOD_CALCGLASS_PRICET8'); ?></option>
В исходном коде страницы получается
Код
<option value="">Толщина 8мм</option>
То есть JText все нормально, а вот вместо переменной просто нет ничего
И вот эта запись не подействовала
Код
var x = "<?php echo $otvsm ?>";
Более того, когда я просто на странице вывожу
Код
<?php echo $otvsm ?>
, ну чтобы проверить, действует ли вообще такая запись, так вот и нет, не действует, пусто на странице. Я подозреваю, что это колдунство связано с самой Joomla, то ли в хэлпере нужно что-то прописать очень важное (поэтому я так к нему и привязалась), то ли класс какой-то должен быть добавлен, ну типа JText, только что-то другое. Пересмотрела все стандартные модули самой Joomla, они связаны с компонентами и выборка идет из БД. А вот так, чтобы в админке пользователь вносил данные, а на выходе они попадали в javascript, таких нет совсем.
*

LyalyaChornaya

  • Захожу иногда
  • 236
  • 15 / 1
Уважаемый модератор! тему можно закрывать. Как обычно, не дождалась ответа. Перерыла инет, сделала модуль калькулятора с внесением цен из админки на Javascript. Спасибо всем, кто попытался помочь
*

varX

  • Живу я здесь
  • 2467
  • 141 / 5
  • разработка компонентов
Уважаемый модератор! тему можно закрывать. Как обычно, не дождалась ответа. Перерыла инет, сделала модуль калькулятора с внесением цен из админки на Javascript. Спасибо всем, кто попытался помочь

Плохо смотрели
http://joomlaforum.ru/index.php/topic,228015.0.html
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

LyalyaChornaya

  • Захожу иногда
  • 236
  • 15 / 1
Нет, уважаемый lcd25, смотрела я хорошо, более того, я его тестировала. Такой калькулятор моему заказчику не нужен. Мне нужен был такой калькулятор, чтобы пользователь зашел в админку сайта и поменял цены, не залезая в формулы и код, прямо в форме ввода. Я его сделала, о чем теперь говорить-то
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Модернизировать модуль

Автор kurz

Ответов: 4
Просмотров: 729
Последний ответ 13.09.2022, 15:35:31
от kurz
[SP Page Builder] Модуль ajax contact в модальном окне

Автор TW-WEB

Ответов: 2
Просмотров: 3179
Последний ответ 24.02.2018, 17:34:50
от TW-WEB
Модуль авторизации OpenId

Автор greytm

Ответов: 7
Просмотров: 3322
Последний ответ 04.11.2016, 00:04:31
от KypuHa9_Hora
Как вставить модуль в контент компонента

Автор sava36

Ответов: 21
Просмотров: 18611
Последний ответ 15.06.2016, 09:55:51
от Ilja93
Как вставить модуль в код нужной страницы php?

Автор zvi

Ответов: 7
Просмотров: 3776
Последний ответ 12.04.2016, 19:36:55
от AlekVolsk