Новости 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

Перевод и публикация интервью с Joomla евангелистом на греческом портале Joomla

Перевод и публикация интервью на греческом портале Joomla 🇬🇷

Утро, просматриваешь входящие письма и изучаешь новости и внезапно обнаруживаешь, что инициатива, которую ты начал, подхватывается другими людьми. 🎉

Недавно я взял интервью у Билла (Василиса) Коциаса - руководителя студии, читающего лекции в университете и популяризатора Joomla в Греции. Это интервью из журнала NorrNext, в оригинале на английском, теперь доступно на греческом языке и опубликовано на портале joomla.gr. 🎉

До чего же приятно… 😇😊 Работа замечена и с ней посчитали необходимым ознакомить аудиторию страны, в которой Билл читает лекции. И это солнечная Греция - страна, страна, с которой Россию многое связывает. 🇬🇷🇷🇺🕊

Смотрю на греческий алфавит и тут же рисуются картины белоснежных зданий в окружении винограда и амфор, красивых женщин в сандалиях и мужественных воинов, охраняющих покой полисов, в которых ученые мужи работают над трудами, позже вошедшими в века. Красиво! 😇Но вернемся к интервью.

Из него вы узнаете, что в Греции доля Joomla среди CMS занимает порядка 30-40%. По моему мнению это - самый высокий показатель во всем мире. Также чтение лекций о Joomla в университетах позволит привести новых пользователей и к тому же молодое поколение. Ну и огромное кол-во сертификтатов Билла на стене (смотрим фото в статье) свидетельствует о том, что Joomla может применяться как профессиональный инструмент.

🌐 Оригинальное интервью (на английском)
🇬🇷 Интервью на греческом портале (joomla.gr)

Что насчет перевода на русский? Увы, времени всего 24 часа в сутках. Я продолжаю готовить новые интервью. Возможно, после завершения выпуска журнала, рассмотрю перевод некоторых интервью на русский. Но я об этом не говорил. 😊 В блоге @eugenius_blog публикую анонсы интересных событий из мира Joomla, интервью, уроки и полезные советы, а также делюсь мыслями:, связанными с разработкой и веб-дизайном.

0 Пользователей и 1 Гость просматривают эту тему.
  • 5 Ответов
  • 6937 Просмотров
*

Александр Фёдоров

  • Захожу иногда
  • 143
  • 26 / 4
  • Жизнь - удивительная штука
Уж не знаю баг это или фича...
Ситуация следующая:
- авторизовался на фронте сайта;
- зашел в некую статью, внизу форма добавления комментария (для зарегистрированных - в кратком виде);
- долго не трогал страницу, истекла сессия;
- написал комментарий (в краткую форму) и при попытке отправить его выдается сообщение "Пожалуйста, введите ваше имя".

При обновлении страницы теряется написанный комментарий.

Кстати, насколько я знаю, по правилам русского языка было бы правильно написать "Пожалуйста, введите Ваше имя".
Жизненно важный ингредиент успеха — это не знать, что задуманное вами невозможно выполнить. М.Жванецкий
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Отслеживание окончания сессии.
« Ответ #1 : 17.10.2008, 22:59:22 »
Да, ты прав Саш, есть такой эффект. Правда если честно, я пока не могу быстро придумать, как её обойти. В том плане, как отловить на сервере сам факт истечения сессии у пользователя. По-хорошему, действительно в этом случае необходимо обновить форму, чтобы у пользователя была возможность ввести эти данные.

В принципе, была мысль, что можно добавить дополнительное поле в форму, заполнять только авторизованным, и внутри проверять, если заполнено, а пользователь гость, значит можно предположить, что его разлогинило и надо бы новую форму показать. Но с другой стороны, как отличить этот вариант, от варианта хака сайта?

Можно конечно пойти на хитрость, периодически дергать по таймеру сервер, и тем самым продлевать время сессии, но не думаю, что это правильно с точки зрения нагрузки на сервер.

Может быть у кого-то есть идеи?
*

Александр Фёдоров

  • Захожу иногда
  • 143
  • 26 / 4
  • Жизнь - удивительная штука
Re: Отслеживание окончания сессии.
« Ответ #2 : 18.10.2008, 21:30:57 »

Цитировать
В принципе, была мысль, что можно добавить дополнительное поле в форму, заполнять только авторизованным, и внутри проверять, если заполнено, а пользователь гость, значит можно предположить, что его разлогинило и надо бы новую форму показать. Но с другой стороны, как отличить этот вариант, от варианта хака сайта?
Ты же выводишь разные формы в зависимости от того авторизован пользователь или нет, т.е. на этом этапе можно просто ввести некий флаг "авторизованности" в том числе через hidden поле формы.

Цитировать
Можно конечно пойти на хитрость, периодически дергать по таймеру сервер, и тем самым продлевать время сессии, но не думаю, что это правильно с точки зрения нагрузки на сервер.
Это неправильно с точки зрения безопасности и вмешательства в работу администратора сайта... он же не зря выставил определенное время сессии.

Самый большой "криминал" - это не сам факт истечения сессии, а то, что теряется комментарий при повторной авторизации.

Получается, что при добавлении комментария необходимо проверить условия:
- был ли авторизован пользователь (т.е. была показана краткая форма);
- действует ли сессия в момент добавления комментария.

В данном случае рассматриваем вариант:
- да;
- нет;

Мне видится следующая последовательность действий:
1. сохранить комментарий для добавления после авторизации (для этого, по идее, необходимо будет запомнить пользователя, материал и все данные комментария) - видимо необходима некая таблица временных комментариев "разлогиненных" пользователей - данные из нее по каждому пользователю будут удаляться при добавлении комментария данным пользователем;
2. вывести уведомление об окончании сессии и необходимости повторной авторизации, можно еще показать и форму для незарегистрированных пользователей;
3. после авторизации показать все данные по комментарию к материалу данного пользователя.

Примерно так.
Жизненно важный ингредиент успеха — это не знать, что задуманное вами невозможно выполнить. М.Жванецкий
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Отслеживание окончания сессии.
« Ответ #3 : 18.10.2008, 22:01:06 »
Мне видится следующая последовательность действий:
1. сохранить комментарий для добавления после авторизации (для этого, по идее, необходимо будет запомнить пользователя, материал и все данные комментария) - видимо необходима некая таблица временных комментариев "разлогиненных" пользователей - данные из нее по каждому пользователю будут удаляться при добавлении комментария данным пользователем;
Если для каждого из гостей (пусть даже которые недавно были авторизованными) что либо писать в базу, то это будет серьезной брешью в безопасности. Пишется эксплоит, который содержит форму, как бы от авторизованного пользователя, и с неё в цикле добавляются комментарии. Что происходит? Правильно, на сервере начинает забиваться таблица временных комментариев.

2. вывести уведомление об окончании сессии и необходимости повторной авторизации, можно еще показать и форму для незарегистрированных пользователей;
А откуда компонент достоверно узнает, что сессия  именно истекла? Мне кажется это не его задача, следить за сессиями, на это есть ядро. Я уже подумывал над вариантом системного плагина (в нем есть возможность перехвата события логаута), но мне кажется это несколько извращенный путь
*

Александр Фёдоров

  • Захожу иногда
  • 143
  • 26 / 4
  • Жизнь - удивительная штука
Re: Отслеживание окончания сессии.
« Ответ #4 : 18.10.2008, 22:31:50 »
Если для каждого из гостей (пусть даже которые недавно были авторизованными) что либо писать в базу, то это будет серьезной брешью в безопасности. Пишется эксплоит, который содержит форму, как бы от авторизованного пользователя, и с неё в цикле добавляются комментарии. Что происходит? Правильно, на сервере начинает забиваться таблица временных комментариев.
Эксплойт может попытаться добавить комментарий от якобы пользователя только перебором id пользователей, кроме этого в таблице будет храниться только 1 временный комментарий на одного пользователя - тот, который попытались отправить. Получается, что максимальный объем временной таблицы - это количество пользователей сайта. Кроме того, можно еще несколько усложнить перебор - использовать еще и имя пользователя, например. Хотя сама возможность такого перебора - это безусловный минус...
Значит нужно поставить некий признак истинности того, что данный пользователь только что разлогинился. Что-нибудь вроде "скрытой капчи". Правильно ли я понимаю, что если переменная передается через post ее невозможно подменить?  Если это так, то "скрытая капча" возможна, если нет, то невозможна.

Цитировать
А откуда компонент достоверно узнает, что сессия  именно истекла? Мне кажется это не его задача, следить за сессиями, на это есть ядро. Я уже подумывал над вариантом системного плагина (в нем есть возможность перехвата события логаута), но мне кажется это несколько извращенный путь

Компонент не должен следить за моментом окончания сессии. Он должен отрабатывать ситуации, в которых работает, т.е. должен быть корректный алгоритм работы и в данном случае. Пока он данную ситуацию не отрабатывает.
Жизненно важный ингредиент успеха — это не знать, что задуманное вами невозможно выполнить. М.Жванецкий
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Отслеживание окончания сессии.
« Ответ #5 : 18.10.2008, 23:26:47 »
Эксплойт может попытаться добавить комментарий от якобы пользователя только перебором id пользователей, кроме этого в таблице будет храниться только 1 временный комментарий на одного пользователя - тот, который попытались отправить.
для того, чтобы проверить, что пришедший id это идентификатор какого-то конкретного пользователя, нужно сделать запрос в базу, а это тоже потенциально узкое место для атаки...

Правильно ли я понимаю, что если переменная передается через post ее невозможно подменить?
зачем подменять? я сделаю у себя на компе форму, которая будет именно методом POST гнать кривые данные на компонент установленный на чужом сайте... и все... для компонента эти данные слабо будут отличаться, от пришедших с родной формы... потому как и http_referer и другие поля можно подменить...

Цитировать
Компонент не должен следить за моментом окончания сессии. Он должен отрабатывать ситуации, в которых работает, т.е. должен быть корректный алгоритм работы и в данном случае. Пока он данную ситуацию не отрабатывает.
согласен, но я пока не вижу корректно решения этой задачи... разработчики ядра не предоставляют готового решения, и с этой проблемой может столкнуться ЛЮБОЕ другое расширение...
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться