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

Аня

  • Давно я тут
  • 745
  • 33 / 0
  • Копатыч нестабилен!
Добрый день!
А вот такой вопрос. Я продаю билеты. Я разрешаю одному человеку заказать несколько билетов сразу. Но тогда я имею только номер заказа, а сами билеты внутри заказа не нумеруются. Чтобы у меня каждый билет имел свой номер, как это бывает в музеях, я должна разрешить заказывать только по одному билету в заказе или можно что-то еще придумать? Например, как-то использовать настраиваемые поля? Я сама не вижу другой возможности, но хочу уточнить.
Fatal error - это не фатально!!! Я проверила.
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
или можно что-то еще придумать?
Здравствуйте, по-любому можно придумать!  ^-^
Напомните, на каком варианте с датами Вы остановились?
Каждый день продаётся один и тот же товар (тот же id товара) или на каждый день создаются разные товары?
Используете ли дочерние?
Ограничиваете ли продажи по датам?
Опишите вкратце действующую схему.
Тогда, скорее всего, сможем Вам подсказать.
Возможно, будет интересно: Интеграция с Ozon
*

Аня

  • Давно я тут
  • 745
  • 33 / 0
  • Копатыч нестабилен!

Напомните, на каком варианте с датами Вы остановились?

Здравствуйте! Огромное спасибо, что отвечаете! Я сделала так: купила плагин Даты для товара
https://shop.st42.fr/en/products/date-for-cart-with-picker.htm - вот этот. Он мне блокирует выходные и праздники. Для времени входа в музей я просто сделала доп. поле: 11-12, 12-13, 13-14 и так далее. И ограничила 5 билетов в заказе. Блокировать день, если на него выкупили 80 билетов - это надо еще что-то программировать, но у нас не такой супербогатый и суперпосещаемый музей, поэтому мы не стали пока. 
http://museum.imli.ru/tickets - вот, собственно, пока наш вариант.
Идентификатор заказа формирует ВМ. Но нам надо индивидуальный  номер билета и не такой дикий, как идентификатор заказа. Я так понимаю, что если считают хиты продаж, то где-то этот подсчет уже ведется....
Fatal error - это не фатально!!! Я проверила.
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Ничего не понял. Вам нужно ограничить количество билетов в один заказ или один день, или просто нужен номер/ИД билета  для учета ?
*

AlexB

  • Завсегдатай
  • 1973
  • 54 / 2
а не прще ли использовать плагины для VirtueMart для продажи билетов?

*

Аня

  • Давно я тут
  • 745
  • 33 / 0
  • Копатыч нестабилен!
а не прще ли использовать плагины для VirtueMart для продажи билетов?


Какие плагины?
Fatal error - это не фатально!!! Я проверила.
*

Аня

  • Давно я тут
  • 745
  • 33 / 0
  • Копатыч нестабилен!
Ничего не понял. Вам нужно ограничить количество билетов в один заказ или один день, или просто нужен номер/ИД билета  для учета ?
Мне нужно присвоить каждому билету номер
Fatal error - это не фатально!!! Я проверила.
*

AlexB

  • Завсегдатай
  • 1973
  • 54 / 2
Какие плагины?
раньше https://www.artio.net/e-tickets/documentation работало в связке
сейчас вроде бы даже вирт не требуется

*

Аня

  • Давно я тут
  • 745
  • 33 / 0
  • Копатыч нестабилен!
раньше https://www.artio.net/e-tickets/documentation работало в связке
сейчас вроде бы даже вирт не требуется


Да, видела такое, сейчас они независимы от ВМ уже. Но нам нужен как раз вирт или что-то столь же популярное, родное и близкое сбербанку, потому что мы должны быть тесно связаны со сбербанк эквайрингом и еще чем-то сбербанковским... Ну, а коль скоро Joomla входит в число SMS, с которыми увязан СБ эквайринг, там есть свой плагин для ВМ и JoomShopping, я взяла именно вирт.
Fatal error - это не фатально!!! Я проверила.
*

AlexB

  • Завсегдатай
  • 1973
  • 54 / 2
Так в самостоятельных системах так же есть различные методы оплаты можно и со сбером найти
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
Один из вариантов решения.
Сразу скажу, потребует хаков VM. На стандартных возможностях пока такого не представляю.

В таблице БД где order_items содаём два новых int поля: ticket_number_first и ticket_number_last.
Внедряемся в код создания заказа VM. Делаем так, чтобы в эту таблицу он записывал:
* если билет в 1 кол-ве, тогда ticket_number_first = предыдущий ticket_number_last + 1, и ticket_number_last = ticket_number_first
(то есть один и тот же номер в first и last)
* если билет в количестве > 1, тогда ticket_number_last, соответственно, будет больше.
Примерно понятна логика?

А потом уже в письмо вставляем эти номера.
Если first == last, то один номер для позиции (билета)
Если last больше - то билеты номер 2020-2022, к примеру

Но надо немного попрограммить это на php  ^-^
Возможно, будет интересно: Интеграция с Ozon
*

Аня

  • Давно я тут
  • 745
  • 33 / 0
  • Копатыч нестабилен!
Возможно. Но сбербанк выделил особо любимые cms  для интеграции
 https://securepayments.sberbank.ru/wiki/doku.php/integration:cms:start
И для нас то, что со стороны СБ все уже налажено и понятно, имеет решающее значение.
Fatal error - это не фатально!!! Я проверила.
*

AlexB

  • Завсегдатай
  • 1973
  • 54 / 2
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
потребует хаков VM
Хотя... Можно и в шаблоне это сделать )
Возможно, будет интересно: Интеграция с Ozon
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как получить номер заказа после отправки формы?

Автор R31rus

Ответов: 1
Просмотров: 865
Последний ответ 21.12.2020, 23:07:31
от voland
Как вывести номер пагинации в title категории?

Автор Stasweb

Ответов: 3
Просмотров: 1032
Последний ответ 23.05.2017, 07:08:53
от Stasweb
Как получить номер текущей страницы?

Автор Mike_S

Ответов: 4
Просмотров: 1307
Последний ответ 08.07.2016, 16:04:00
от Mike_S
Можно ли сделать перенаправление на Главную страницу сайта после добавления отзыва к товару?

Автор lolitma3

Ответов: 0
Просмотров: 988
Последний ответ 18.06.2016, 00:38:45
от lolitma3
Как-то можно уменьшить количество запросов к серверу при применении сортировки?

Автор borro

Ответов: 0
Просмотров: 1112
Последний ответ 16.12.2014, 16:46:36
от borro