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

Physicist

  • Глобальный модератор
  • 917
  • 185 / 0
  • Рябов Денис
Оптимизируем Joomla! 1.5.7
« : 31.10.2008, 16:07:08 »
Профилирование Joomla при помощи xdebug на PHP 5.2.4 показало два следующих «слабых места»:
  • метод JRegistryFormatINI::stringToObject (файл /libraries/joomla/registry/format/ini.php), выполняющий парсинг данных в формате ini-файла, и
  • метод JLoader::load (файл /libraries/loader.php; в дальнейшем имена файлов указывать не буду, надеюсь найти, что и где лежит не является проблемой), вызываемый из функции __autoload для автоматического подключения файла нужного класса.

Какие могут быть методы борьбы с этими «тормозами»? Начнем по-порядку.

1. Метод JRegistryFormatINI::stringToObject

1.1. Можно попробовать переписать этот метод с целью ускорить быстродействие. Основные идеи, которые могут ускорить его работу, следующие:
— В процессе работы метода в цикле регулярно проверяется условие if($process_sections), проверку которого можно вынести за пределы цикла.
— Функция проверяет только наличие комментариев, начинающихся с «;», в то время как в действительности комментарии в языковых ini-файлах начинаются с «#». Проверка такого условия уберет лишние операции с этими строками.
— Тест показал, что вместо strpos/substr быстрее разбить строку на две части при помощи explode.
— Результат для strpos-поиска «|» можно запомнить и впоследствии не делать лишний str_replace.
— В preg_match и preg_split желательно использовать одинаковые ограничители регулярных выражений — это уберет дополнительный парсинг и компиляцию второго выражения.
— Условие того, что значением параметра является массив проще записать в виде $array = count($parts)>1, а не в виде сравнения строк.
— Разбиение аргумента на строки выполняется даже в том случае, когда готовый ответ уже есть в $inistocache. Зачем?

Итого удается увеличить скорость работы этой функции на 19%.

Конкретный вид модификаций не привожу — их и так можно посмотреть в прилагаемом архиве, сравнивая с оригигинальными файлами.

1.2. Анализ передаваемых аргументов показал, что при отрисовке модулей их параметры передаются этому методу дважды: один раз в методе JDocumentRendererModule::render, а второй — в вызываемом из него методе JModuleHelper::renderModule. И хотя второй вызов выполняется значительно быстрее, т.к. результат первого вызова сохранен в $inistocache, было бы логично этого вызова избежать. Для этого достаточно передавать параметры модуля третьим аргументом в JModuleHelper::renderModule.

1.3. Львиную долю всех вызовов занимает парсинг языковых файлов. Т.к. эти файлы не меняются от вызова к вызову, имеет смысл кэшировать результаты парсинга. Для этого достаточно внести модификацию в JLanguage::_load. По-хорошему, было бы логичным сделать время жизни этого «языкового» кэша также настраиваемым из админки, но пока пусть оно будет таким же как и для всего сайта.

2. Метод JLoader::load.

2.1. В самом методе strtolower вызывается дважды. Второй вызов явно лишний.

2.2. JLoader::register возвращает ссылку, поэтому заменяем присваивание на =&.

2.3. Так как больше всего времени занимает include файлов, то имеет смысл вынести объявление самых часто-используемых файлов в один файл и подключать его сразу при запуске. К сожалению, не для всех классов такое возможно, но прирост в скорости будет все-равно заметным. Для построения такого файла достаточно вызвать прилагаемый скрипт /cache.php и сделать небольшую модификацию /index.php (те файлы, которые нельзя переносить в другое место, закомментированы в тексте скрипта).


Во вложении ниже приведены все пропатченные файлы и скрипт создания файла с глобальным описанием классов cache.php.


PS. Хочу отправить это разработчикам Joomla!, поэтому жду вашей критики / комментариев / замечаний.


PPS. Кто б еще подсказал, в какой раздел лучше перекинуть эту тему.

[вложение удалено Администратором]
« Последнее редактирование: 08.11.2008, 14:05:41 от Physicist »
*

Physicist

  • Глобальный модератор
  • 917
  • 185 / 0
  • Рябов Денис
Re: Оптимизируем Joomla! 1.5.7
« Ответ #1 : 01.11.2008, 09:24:18 »
Забыл еще вот про что написать и включить в патч:

1.4. Если включен плагин «System - Debug», то даже при отключенном режиме отладки загружается языковой файл этого плагина. Так что рекомендую или отключить этот плагин, или добавить в конструктор проверку
if(!JDEBUG) return;
*

mmka

  • Захожу иногда
  • 69
  • 12 / 98
Re: Оптимизируем Joomla! 1.5.7
« Ответ #2 : 01.11.2008, 10:41:02 »
Цитировать
1.4. Если включен плагин «System - Debug», то даже при отключенном режиме отладки загружается языковой файл этого плагина. Так что рекомендую или отключить этот плагин, или добавить в конструктор проверку
if(!JDEBUG) return;
То есть по сути в Joomla 1.5 он вообще не нужен? То есть для оптимизации можно его просто отключить и удалить?

2) а есть ли еще такие плагины которые можно отключить без последствий? и вообще многие ли из них нужны рядовому юзеру?
*

Physicist

  • Глобальный модератор
  • 917
  • 185 / 0
  • Рябов Денис
Re: Оптимизируем Joomla! 1.5.7
« Ответ #3 : 01.11.2008, 11:00:31 »
То есть для оптимизации можно его просто отключить и удалить?
Достаточно просто отключить.
*

klaizar

  • Захожу иногда
  • 91
  • 13 / 0
  • *JoomlaGURU
Re: Оптимизируем Joomla! 1.5.7
« Ответ #4 : 01.11.2008, 15:41:29 »
простая замена этих фалов мне в чем то поможет или лучше не трогать?)
*

Physicist

  • Глобальный модератор
  • 917
  • 185 / 0
  • Рябов Денис
Re: Оптимизируем Joomla! 1.5.7
« Ответ #5 : 01.11.2008, 20:10:56 »
простая замена этих фалов мне в чем то поможет или лучше не трогать?)

Думаю, поможет.

Но суть темы не в этом, а в том, чтобы обсудить возможности по усовершенствованию Joomla!1.5 и, в частности, обсудить предложенную модификацию (плюсы/минусы), а также в надежде, что кто-то еще предложит те или иные усовершенствования.

Кстати, еще такой вопрос (может кто сталкивался): что лучше — создать аналогичную тему на forum.joomla.org (там есть раздел Perfomance), или добавить в bugtracker на joomlacode.org (и в какой раздел трекера лучше добавить в этом случае)?

PS. Кстати, заметил, что в bugtracker'е в разделе «Joomla! 1.6.x Bug Tracker» уже фигурирует 21 запись. ^-^
*

mmka

  • Захожу иногда
  • 69
  • 12 / 98
Re: Оптимизируем Joomla! 1.5.7
« Ответ #6 : 01.11.2008, 20:18:14 »
Цитировать
Но суть темы не в этом, а в том, чтобы обсудить возможности по усовершенствованию Joomla!1.5 и, в частности, обсудить предложенную модификацию (плюсы/минусы), а также в надежде, что кто-то еще предложит те или иные усовершенствования.
К сожалению на форуме очень мало знающих людей  и хорошо разбирающихся в джумле.. Я например больше половины не понял поэтому сказать не могу... как и многие другие...
Цитировать
Кстати, еще такой вопрос (может кто сталкивался): что лучше — создать аналогичную тему на forum.joomla.org (там есть раздел Perfomance), или добавить в bugtracker на joomlacode.org (и в какой раздел трекера лучше добавить в этом случае)?
Я думаю и туда и туда ))
*

smart

  • Администратор
  • 6485
  • 1315 / 15
  • Хочешь сделать хорошо — сделай!
Re: Оптимизируем Joomla! 1.5.7
« Ответ #7 : 01.11.2008, 20:36:26 »
Кстати, еще такой вопрос (может кто сталкивался): что лучше — создать аналогичную тему на forum.joomla.org (там есть раздел Perfomance), или добавить в bugtracker на joomlacode.org (и в какой раздел трекера лучше добавить в этом случае)?
думаю, что лучше продублировать... причем на треккере разбить на несколько подзадач... и на всякий случай еще кинуть копию к текущему team lead'у
*

Physicist

  • Глобальный модератор
  • 917
  • 185 / 0
  • Рябов Денис
Re: Оптимизируем Joomla! 1.5.7
« Ответ #8 : 01.11.2008, 22:18:37 »
думаю, что лучше продублировать... причем на треккере разбить на несколько подзадач... и на всякий случай еще кинуть копию к текущему team lead'у
Скорее всего так и поступлю. Вот только выжду несколько дней — может что еще в голову придет, или вдруг кто-то обнаружит недостатки в предложенном патче.
*

klaizar

  • Захожу иногда
  • 91
  • 13 / 0
  • *JoomlaGURU
Re: Оптимизируем Joomla! 1.5.7
« Ответ #9 : 03.11.2008, 15:08:38 »
У меня при замене этих фалов выдает ошибку
Warning: main(/home/klaizar/public_html/lltours/libraries/joomla/import.php) [function.main]: failed to open stream: Permission denied in /home/klaizar/public_html/lltours/includes/framework.php on line 42

Fatal error: main() [function.require]: Failed opening required '/home/klaizar/public_html/lltours/libraries/joomla/import.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/klaizar/public_html/lltours/includes/framework.php on line 42


к чему бы это ?!
*

Physicist

  • Глобальный модератор
  • 917
  • 185 / 0
  • Рябов Денис
Re: Оптимизируем Joomla! 1.5.7
« Ответ #10 : 03.11.2008, 15:22:49 »
Ошибка означает, что файл /libraries/joomla/import.php отсутствует или недостаточно прав для его открытия. Почему — не знаю. Обращаю внимание, что ни import.php, ни framework.php в состав патча не входят.
« Последнее редактирование: 03.11.2008, 16:08:05 от Physicist »
*

klaizar

  • Захожу иногда
  • 91
  • 13 / 0
  • *JoomlaGURU
Re: Оптимизируем Joomla! 1.5.7
« Ответ #11 : 03.11.2008, 15:25:25 »
этот фаил у меня присутствует ( import.php ) права 644 , мож из за прав выдает ошибку ?
*

lems2003

  • Новичок
  • 14
  • 3 / 0
Re: Оптимизируем Joomla! 1.5.7
« Ответ #12 : 04.11.2008, 14:20:27 »
а под php 4 этот патч будешь функционировать? и польза будет те 19% , автор писал про 5 версию!!!
ТриколорТВ все о ТВ - www.tv.uralsat.ru
*

Physicist

  • Глобальный модератор
  • 917
  • 185 / 0
  • Рябов Денис
Re: Оптимизируем Joomla! 1.5.7
« Ответ #13 : 04.11.2008, 15:35:26 »
а под php 4 этот патч будешь функционировать? и польза будет те 19% , автор писал про 5 версию!!!
В принципе, должен. Вот только ответьте: Неужели так трудно самому взять и проверить, а потом в этой теме отписать результат?

А Joomla!1.5 изначально писалась с расчетом именно под PHP5, поэтому максимальная производительность (теоретически) должна быть именно при использовании PHP5.
*

ershovdz

  • Захожу иногда
  • 102
  • 21 / 0
Re: Оптимизируем Joomla! 1.5.7
« Ответ #14 : 04.11.2008, 16:58:36 »
Цитировать
Итого удается увеличить скорость работы этой функции на 19%.
У меня пока один вопрос - проводились ли измерения того, насколько увеличивается реальная скорость работы joomla под нагрузкой ? Ибо увеличение скорости одной функции даже на 100% не гарантирует увеличене общей производительности и следовательно имеет ли эта оптимизация смысл..
*

Physicist

  • Глобальный модератор
  • 917
  • 185 / 0
  • Рябов Денис
Re: Оптимизируем Joomla! 1.5.7
« Ответ #15 : 04.11.2008, 20:53:04 »
У меня пока один вопрос - проводились ли измерения того, насколько увеличивается реальная скорость работы joomla под нагрузкой ? Ибо увеличение скорости одной функции даже на 100% не гарантирует увеличене общей производительности и следовательно имеет ли эта оптимизация смысл..
Я при тестировании сначала отключил кэширование и включил отображение всех модулей (кроме враппера) на главной. При этом на метод stringToObject уходило порядка 20% от всего времени выполнения! Так что оптимизировав этот метод сразу получилось ускорение работы на 4%. Я считаю, что это всё-таки имеет смысл.

Но наиболее существенными оказались кэширование парсинга языковых файлов и запись деклараций основных классов в один файл. Насколько возрасла производительность в итоге — сказать не могу, т.к. сейчас нет времени тестировать. Буду очень рад, если кто-то проведет независимое тестирование.
« Последнее редактирование: 04.11.2008, 21:14:13 от Physicist »
*

7Rei

  • Захожу иногда
  • 134
  • 20 / 0
Re: Оптимизируем Joomla! 1.5.7
« Ответ #16 : 06.11.2008, 14:36:48 »
После установки патча (а именно файла libraries\joomla\registry\format\ini.php) начинает глючить модуль для вставки собственного кода. Все пробелы в коде заменяются на - \n. Страдает вид сайта + не работают многие скрипты.
Проверял на модуле mod_moedesigns_anycode_15 и на mod_php.
joomla 1.5.7 PHP5.2.6
*

Physicist

  • Глобальный модератор
  • 917
  • 185 / 0
  • Рябов Денис
Re: Оптимизируем Joomla! 1.5.7
« Ответ #17 : 06.11.2008, 22:19:59 »
7Rei, я не представляю, как парсинг ini-файлов может сказаться на пробелах в Вашем коде. Может проблема в чем-то еще?
*

7Rei

  • Захожу иногда
  • 134
  • 20 / 0
Re: Оптимизируем Joomla! 1.5.7
« Ответ #18 : 06.11.2008, 22:50:28 »
7Rei, я не представляю, как парсинг ini-файлов может сказаться на пробелах в Вашем коде. Может проблема в чем-то еще?
Проверил еще раз, ошибка возникает после заливки именно этого файла!
*

Physicist

  • Глобальный модератор
  • 917
  • 185 / 0
  • Рябов Денис
Re: Оптимизируем Joomla! 1.5.7
« Ответ #19 : 07.11.2008, 00:29:37 »
Кстати, да. При причесывании файла исчез str_replace, заменяющий \n на переводы строк.
Я заменил пост в первом сообщении, а тут прилагаю чуть более расширенный патч (опять же, для тестирования).

[вложение удалено Администратором]
*

Physicist

  • Глобальный модератор
  • 917
  • 185 / 0
  • Рябов Денис
Re: Оптимизируем Joomla! 1.5.7
« Ответ #20 : 07.11.2008, 01:18:12 »
Набросал тему на forum.joomla.org:
http://forum.joomla.org/viewtopic.php?f=433&t=341326

smart, ты как представитель сообщества русской поддержки joomla, можешь кому-нибудь из ихних разработчиков кинуть ссылку на топик (я подозреваю, у тебя должно быть больше контактов).
« Последнее редактирование: 07.11.2008, 01:21:40 от Physicist »
*

smart

  • Администратор
  • 6485
  • 1315 / 15
  • Хочешь сделать хорошо — сделай!
Re: Оптимизируем Joomla! 1.5.7
« Ответ #21 : 07.11.2008, 01:22:12 »
smart, ты как представитель сообщества русской поддержки joomla, можешь кому-нибудь из ихних разработчиков кинуть ссылку на топик (я подозреваю, у тебя должно быть больше контактов).
оки, не вопрос...
*

7Rei

  • Захожу иногда
  • 134
  • 20 / 0
Re: Оптимизируем Joomla! 1.5.7
« Ответ #22 : 08.11.2008, 13:20:09 »
Кстати, да. При причесывании файла исчез str_replace, заменяющий \n на переводы строк.
Я заменил пост в первом сообщении
Теперь он вообще не работоспособный! После замены файлов, в админке и на фронтенде выводится длинный, длинный текст :(
*

Physicist

  • Глобальный модератор
  • 917
  • 185 / 0
  • Рябов Денис
Re: Оптимизируем Joomla! 1.5.7
« Ответ #23 : 08.11.2008, 14:04:57 »
Теперь он вообще не работоспособный! После замены файлов, в админке и на фронтенде выводится длинный, длинный текст :(
^-^ Спасибо. Это я забыл var_dump'ы убрать. Сейчас прикреплю новый архив (кстати, на forum.joomla.org тоже нужно будет поменять).
*

kavkaz07

  • Новичок
  • 17
  • 0 / 0
Re: Оптимизируем Joomla! 1.5.7
« Ответ #24 : 17.11.2008, 01:08:08 »
может пора уже 1.5.8 версию оптимизировать? когда уже будут результаты? былоб неплохо еслиь над ней наши поработали бы.........
*

igrik

  • Новичок
  • 11
  • 0 / 0
  • Pis.lv
Re: Оптимизируем Joomla! 1.5.7
« Ответ #25 : 22.11.2008, 13:57:56 »
Продублирую сюда ОГРОМНУЮ ПРОБЛЕМУ С ЭТОЙ МОДИФИКАЦИЕЙ.

There are big problem with your modification.

It works fine, until User is not logged out. Then Cached pages display that user is logged in, but of course there are troubles cause in true user is not already logged in ..

Need to purge some cache after log out. or something like this.

PS: If am logging in with user 2, all profile pages is for user 1..

That is big issue.!
*

igrik

  • Новичок
  • 11
  • 0 / 0
  • Pis.lv
Re: Оптимизируем Joomla! 1.5.7
« Ответ #26 : 22.11.2008, 14:10:40 »
Мде, "спасибо" за мега код..

Первоначальное положение проекта восстановить не получается, этот кривой кэш всё также продолжает работать, даже когда я переписал старые файлы наверх....
*

Physicist

  • Глобальный модератор
  • 917
  • 185 / 0
  • Рябов Денис
Re: Оптимизируем Joomla! 1.5.7
« Ответ #27 : 23.11.2008, 20:09:44 »
igrik, этот патч никак не мог привести к такой проблеме, т.к. он никоим образом не меняет механизм работы с кэшем. Он включает в себя механизм работы с кэшем timedfile, но по-умолчанию его не активирует (его нужно самостоятельно задать в настройках сайта).
*

igrik

  • Новичок
  • 11
  • 0 / 0
  • Pis.lv
Re: Оптимизируем Joomla! 1.5.7
« Ответ #28 : 23.11.2008, 21:39:34 »
Тем не менее факт остаётся фактом.


Хронология:

Сайт работает нормально. Беру Ваш патч, копирую наверх - возникает описанная мною проблема..


Ко всему прочему Global Configuration в админке, отображется пустой страницей(blank page), после копирования патча
*

7Rei

  • Захожу иногда
  • 134
  • 20 / 0
Re: Оптимизируем Joomla! 1.5.7
« Ответ #29 : 29.12.2008, 11:22:59 »
Набросал тему на forum.joomla.org:
http://forum.joomla.org/viewtopic.php?f=433&t=341326
Physicist, очень интересно, как они отнеслись к данной модификации? :)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Обновление сайта на Joomla 1.5.26

Автор ALexVKH

Ответов: 4
Просмотров: 1268
Последний ответ 26.03.2018, 14:54:02
от SeBun
Как написать код на Java и вставить его в Joomla-сайт?

Автор geodx

Ответов: 9
Просмотров: 1133
Последний ответ 27.02.2018, 16:15:59
от effrit
уязвимость CVE-2017-14596, протокол LDAP и Joomla 1.5

Автор Elimelech

Ответов: 14
Просмотров: 3518
Последний ответ 29.09.2017, 09:46:20
от SeBun
Убрать флаг публикации на главной у всех публикаций Joomla 1.5

Автор martini

Ответов: 1
Просмотров: 14452
Последний ответ 14.11.2011, 20:18:55
от smart
[How-To] Создание блога на Joomla

Автор ZHart

Ответов: 0
Просмотров: 23567
Последний ответ 15.01.2011, 21:33:52
от ZHart