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

Neznajka

  • Осваиваюсь на форуме
  • 27
  • 0 / 0
Помогите, пожалуйста, разобраться новичку. Пытаюсь создать модуль показа залогинившемуся на сайт юзеру информации о его текущих платежах. Каркас довольно сложной HTML-таблицы разработал (это для меня - уже подвиг), теперь хочу его "поженить" с PHP+MySQL. Для этого мне надо запрограммировать обращение к БД и поиск соответствующей записи с id-юзера. С этой целью попытался подсмотреть в Joomla код модуля авторизации, чтобы найти в нём, как именно происходит обращение из этого модуля к БД и сравнение логина/пароля с соответствующими полями. Странно, но ничего там похожего нет, даже издалека. Хотя запись текущего юзера в таблице prefix_users - имеется, я через панель phpMyAdmin просмотрел: id, имя, логин, кодированный_пароль, куча других непонятных полей - всё есть. А раз всё это там имеется, значит, процесс авторизации как-то ж к этому обращается? Но как, если в коде модуля авторизации (mod_login) нет никакого даже намёка на это?..
Вот, привожу коды составляющих файлов этого загадочного модуля (комментарии убрал):
mod_login.php
Спойлер
[свернуть]
helper.php
Спойлер
[свернуть]
default.php
Спойлер
[свернуть]
Для полноты картины вот ещё и код файла
mod_login.xml
хотя в нём, по-логике, точно не может быть обращения к БД:
Спойлер
[свернуть]
Подскажите, пожалуйста, в какой из этих командных строк осуществляется это сверхзасекреченное обращение к базе данных MySql?  :'(
« Последнее редактирование: 08.05.2011, 21:25:19 от Neznajka »
*

varX

  • Живу я здесь
  • 2467
  • 141 / 5
  • разработка компонентов
Код: php
$user = & JFactory::getUser();
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

Neznajka

  • Осваиваюсь на форуме
  • 27
  • 0 / 0
To lcd25:
Спасибо большое! Я только-только нашёл, что это и есть она, "секретная" команда Joomla -   $user =& JFactory::getUser();
Оказывается, в Тырнете почти всё есть, если напряжённо поискать. Не нашёл только, как можно подключиться не к текущей базе данных. В PHP, я читал, есть возможность явно указать имя желаемой БД в команде подключения, а вот в доках по Joomla ничего такого не нашёл - везде применяется JFactory::getDBO() без каких бы то ни было параметров. А можно ли в скобки впихнуть имя БД? Например, если у меня на хостинге их 3 штуки, и я хочу подконнектится не к текущей, то Joomla имеет такие команды? Подскажите, пожалуйста.
*

varX

  • Живу я здесь
  • 2467
  • 141 / 5
  • разработка компонентов
Используйте обычное соединение sql.
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

Neznajka

  • Осваиваюсь на форуме
  • 27
  • 0 / 0
Спасибо!
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
*

Neznajka

  • Осваиваюсь на форуме
  • 27
  • 0 / 0
Спасибо, SmokerMan! Хоть и не по-нашему там написано, но в общем-то всё понятно и доступно.
Теперь я пытаюсь сообразить, как лучше поступить - сформировать на хостинге новую БД из нужных мне 5-ти таблиц (их общий вес - 35 МБ , до конвертации из dbf в MySQL), или добавить эти 5 таблиц к уже существующей Joomla'шной базе? Имеет ли какие-либо преимущества разделение юзерских и чисто Joomla'шных данных по разным БД? Ну, разумеется, помимо возможности установить другие атрибуты доступа к БД.
И вот ещё - главный вопрос.
В таблице prefix_users в поле пароля содержится, естественно, закодированная строка. Как узнать, как именно её Joomla формирует? Это мне нужно вот зачем. По тех.заданию регистрация новых пользователей должна осуществляться в абонбюро, а не на сайте, поэтому он-лайн регистрацию я отключил. Т.е., для каждого нового пользователя в таком случае необходимо формировать кодированную строку пароля вручную. Думаю, я бы смог создать соответствующий модуль для админа, только для этого мне необходимо подсмотреть, как именно Joomla при инсталяции сформировала пароль админа (это пока единственная строка в таблице prefix_users). Понимаю, что, скорее всего где-то в Joomla'шном коде есть PHP-команда с обращением к алгоритму md5 или подобному. А в каком именно файле Joomla это можно подсмотреть?
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Имеет ли какие-либо преимущества разделение юзерских и чисто Joomla'шных данных по разным БД?
нет не имеет, т.к. сервер используется один и тот же. Если бы  были разные сервера тогда выигрыш может и был бы.
Ну или можно сделать если стоит ограничение на кол-во подключений к одной БД.
А в каком именно файле Joomla это можно подсмотреть?
libraries/joomla/user/user.php
*

Neznajka

  • Осваиваюсь на форуме
  • 27
  • 0 / 0
Ещё раз большое спасибо, SmokerMan!
М-да, код того файла и соответствующего ему хэлпера мне пока не по зубам. Но, к счастью, регистрация новых юзеров доступна прямо на админпанели Joomla - я просто не досмотрел. Т.е., теперь заморачиваться над созданием и кодированием паролей, вроде и не надо. Но одна проблемка всё же осталась - как показать юзеру именно его данные? Эти данные у меня будут формироваться SQL-запросом из 5-ти таблиц. Правильно ли я понимаю, что сопоставлять юзера и его данные в этих таблицах следует по id-шнику этого юзера? Тогда, выходит, что мне всего-то понадобится добавить к этим таблицам соответствующее поле, да? Или при таком подходе окажется возможным каким-нибудь "левым" sql-inject-манёвром просмотреть записи всех юзеров (или не свою запись)?
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Или при таком подходе окажется возможным каким-нибудь "левым" sql-inject-манёвром просмотреть записи всех юзеров (или не свою запись)?
ну если id авторизованного пользоввателя определять через фреймворк Joomla (как выше было), а потом уже тащить данные, то инъекцию, думаю, будет сделать проблематично. Т.к. оно будет либо null либо id пользователя.
*

Neznajka

  • Осваиваюсь на форуме
  • 27
  • 0 / 0
Re: В какой команде Joomla обращается к БД?
« Ответ #10 : 10.05.2011, 19:43:17 »
О, тогда это мне подходит. Спасибо.
*

Neznajka

  • Осваиваюсь на форуме
  • 27
  • 0 / 0
Re: В какой команде Joomla обращается к БД?
« Ответ #11 : 12.05.2011, 14:52:47 »
Вот, столкнулся с ещё одним новым для меня моментом.
5 импортируемых мной из dbf в MySQL таблиц с юзерскими платёжными данными связаны меж собой по полю Schet (лицевой счёт, уникален для каждого конкретного пользователя). А Joomla привязывает пользователя полем ID. Так вот, напрашиваются следующие варианты внутреннего связывания этих идентификаторов:
1) добавить к таблице #_users поле Schet;
2) создать дополнительную таблицу соответствия полей ID и Schet.
Но в обоих вариантах встаёт вопрос - как можно реализовать возможность ручного ввода значения Schet админом (наряду с логином и паролем) при регистрации нового юзера с админпанели? Иными словами - как можно проще всего добавить окошко ввода ещё одного параметра в модуль регистрации нового пользователя? Чтоб, разумеется, при этом также обеспечивалась запись этого нового значения в соответствующее поле БД. Сориентируйте, пожалуйста, хоть приблизительно.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Joomla 1.5 как убрать кнопку редактировать материант с сайта

Автор andriy465

Ответов: 5
Просмотров: 4028
Последний ответ 12.11.2023, 23:37:03
от all_zer
Нужно wiki под Joomla

Автор THE KILLERS

Ответов: 9
Просмотров: 9693
Последний ответ 05.11.2020, 20:56:47
от Kijv
Поиск статьи по url сайта в админке Joomla 1.5

Автор Tema

Ответов: 5
Просмотров: 2197
Последний ответ 14.08.2020, 07:16:44
от rsn
Не могу войти в админку Joomla 1.5

Автор MrSkif

Ответов: 14
Просмотров: 10559
Последний ответ 12.09.2018, 19:36:32
от PaLyCH
Не войду в админку Joomla 1.5.26, пишет соединение с сервером было сброшено

Автор rom_4

Ответов: 4
Просмотров: 5512
Последний ответ 16.05.2018, 17:28:18
от Алексей MeRsOvOd