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

yunoshev

  • Завсегдатай
  • 1271
  • 179 / 1
Всем доброго времени суток!
Недавно возникла необходимость проверить результат установки значения куков, используя класс Joomla 2.5 JInputCookie. Функция установки параметра и значения там есть, но в отличие от стандартной функции PHP setCookie(), она не возвращает результат операции.
Это дело поправимо.
Открываем файл libraries\joomla\application\input\cookie.php и меняем текст функции set(...) на следующий:
Код: php
		$this->data[$name] = $value;
return setcookie($name, $value, $expire, $path, $domain, $secure, $httpOnly);

В итоге должно получиться так:
Спойлер
[свернуть]
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Опять тема как ненужно делать?
Делаем свой класс, расширяемся от JInputCookie! Юзаем в своем компоненте/модуле/плагине/шаблоне!
Код: php
class ExtendedCookie extends JInputCookie{
public function set($name, $value, $expire = 0, $path = '', $domain = '', $secure = false, $httpOnly = false)
{
$this->data[$name] = $value;
return setcookie($name, $value, $expire, $path, $domain, $secure, $httpOnly);
}
}
« Последнее редактирование: 28.10.2013, 18:50:29 от Istaan »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Мдее... Чтобы set и возвращало что-то. На то оно и set, чтобы просто устанавливать значение. Разве через JInput его невозможно получить? Вроде как $this->data[$name] = $value; есть, поэтому должно сработать.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Мдее... Чтобы set и возвращало что-то. На то оно и set, чтобы просто устанавливать значение. Разве через JInput его невозможно получить? Вроде как $this->data[$name] = $value; есть, поэтому должно сработать.
Ну человек видимо не читал офф документацию:
Цитировать
Если перед вызовом функции клиенту уже передавался какой-либо вывод (тэги, пустые строки, пробелы, текст и т.п.), setcookie() вызовет отказ и вернет FALSE. Если setcookie() успешно отработает, то вернет TRUE. Это, однако, не означает, что клиентское приложение (броузер) правильно приняло и обработало cookie.
*

yunoshev

  • Завсегдатай
  • 1271
  • 179 / 1
@Istaan, b2z
Много текста :)
Документацию, поверьте, читал по setCookie(). Но ведь есть Джумловское "правильное программирование".
А мне всего навсего нужна была вот такая конструкция:
Код: php
	$result = $cinput->set('some_code', $some_value, 0, "/");
В общем, каждый остался при своем мнении.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
@Istaan, b2z
Много текста :)
Документацию, поверьте, читал по setCookie(). Но ведь есть Джумловское "правильное программирование".
А мне всего навсего нужна была вот такая конструкция:

Где много текста? расширьте класс, это основы программирования! зачем лезть в ядро? а если клиент обновится?! потом будете сидеть думать два часа что же произошло и почему! я показал вам вариант как сделать не трогая ядро! но ведь постоянно появляются те кто пишут такие "советы"...
вроде не новичек на форуме, а учите так как делать не надо!

и да это:
Код: php
$result = $cinput->set('some_code', $some_value, 0, "/");
вам ничего не даст! ибо документацию вы читали читали и недочитали! то что вам вернет метод set TRUE это не означает что кука установлена!
*

yunoshev

  • Завсегдатай
  • 1271
  • 179 / 1
@Istaan
Во-первых, я то знаю, с какими значениями можно работать и в какой момент они прописываются в куках браузера, благо об этом написано.
А во-вторых, если разработчики Joomla решили "обернуть" функцию setCookie() в свою, то они ТОЖЕ обязаны сделать ее результирующую, а не пустую. Т.е. в моем понимании, функция JInputCookie::set() ТОЖЕ должна возвращать результат. Вот и вся основная причина моего поста, и именно поэтому я НЕ ВИЖУ смысла делать что-то "свое", не трогая ядро.
И не вижу смысла писать дополнительный код, чтобы узнать через JInputCookie::get(), была ли установлена кука. Код надо расширять и упрощать там, где это действительно нужно.

Дальнейшую полемику в данном топике предлагаю не продолжать...  не понравится модератору - удалит...
« Последнее редактирование: 29.10.2013, 00:48:42 от yunoshev »
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
А во-вторых, если разработчики Joomla решили "обернуть" функцию setCookie() в свою, то они ТОЖЕ обязаны сделать ее результирующую, а не пустую.
Какой смысл возвращать какой то результат если нельзя быть уверенным в его результате!
и они обернули не только метод setcookie там ещё есть одна строка! ладно бы был только один метод можно было бы претензии слать!

ну да есть смысл лезть в ядро и хакать, и если компонент будет идти в распространение не забыть написать юзерам что для корректной работы компонента им нужно полезть в libraries\joomla\application\input\cookie.php  и дописать пару строк /facepalm
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Состояние записи - как заставить работать во фронте?

Автор Thomas2000

Ответов: 7
Просмотров: 1249
Последний ответ 26.01.2015, 22:24:06
от b2z
Вывод предыдущей и следующей записи из БД (where?)

Автор ninth

Ответов: 20
Просмотров: 2044
Последний ответ 02.09.2014, 23:54:33
от ninth
Проблема с выводом результата запроса

Автор Vicos

Ответов: 2
Просмотров: 1928
Последний ответ 09.05.2013, 08:51:39
от Vicos
Стандартный поиск по сайту "com_search". Обращение к базе данных, модификация вывода результата

Автор ninth

Ответов: 3
Просмотров: 2526
Последний ответ 14.02.2013, 15:43:58
от b2z
Как удалить выбраннные записи из БД?

Автор At3iSt

Ответов: 19
Просмотров: 4429
Последний ответ 13.10.2011, 18:51:45
от b2z