LiveInternetMail.ru
Форум русской поддержки Joomla!® CMS
27.05.2012, 19:13:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1] 2  Все   Вниз
  Добавить закладку  |  Печать  
Автор Тема: Оптимизируем Joomla! 1.5.7  (Прочитано 20320 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Physicist
Support Team
*****

Репутация: +179/-0
Offline Offline

Пол: Мужской
Сообщений: 1154


Рябов Денис


« : 31.10.2008, 17: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. Кто б еще подсказал, в какой раздел лучше перекинуть эту тему.

* j157patch.zip (16.03 Кб - загружено 327 раз.)
« Последнее редактирование: 08.11.2008, 15:05:41 от Physicist » Записан
Physicist
Support Team
*****

Репутация: +179/-0
Offline Offline

Пол: Мужской
Сообщений: 1154


Рябов Денис


« Ответ #1 : 01.11.2008, 10:24:18 »

Забыл еще вот про что написать и включить в патч:

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

Репутация: +11/-98
Offline Offline

Пол: Мужской
Сообщений: 107


« Ответ #2 : 01.11.2008, 11:41:02 »

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

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

Репутация: +179/-0
Offline Offline

Пол: Мужской
Сообщений: 1154


Рябов Денис


« Ответ #3 : 01.11.2008, 12:00:31 »

То есть для оптимизации можно его просто отключить и удалить?
Достаточно просто отключить.
Записан
klaizar
Осваиваюсь на форуме
***

Репутация: +13/-0
Offline Offline

Пол: Мужской
Сообщений: 164


*JoomlaGURU


« Ответ #4 : 01.11.2008, 16:41:29 »

простая замена этих фалов мне в чем то поможет или лучше не трогать?)
Записан
Physicist
Support Team
*****

Репутация: +179/-0
Offline Offline

Пол: Мужской
Сообщений: 1154


Рябов Денис


« Ответ #5 : 01.11.2008, 21:10:56 »

простая замена этих фалов мне в чем то поможет или лучше не трогать?)

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

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

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

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

Репутация: +11/-98
Offline Offline

Пол: Мужской
Сообщений: 107


« Ответ #6 : 01.11.2008, 21:18:14 »

Цитировать
Но суть темы не в этом, а в том, чтобы обсудить возможности по усовершенствованию Joomla!1.5 и, в частности, обсудить предложенную модификацию (плюсы/минусы), а также в надежде, что кто-то еще предложит те или иные усовершенствования.
К сожалению на форуме очень мало знающих людей  и хорошо разбирающихся в джумле.. Я например больше половины не понял поэтому сказать не могу... как и многие другие...
Цитировать
Кстати, еще такой вопрос (может кто сталкивался): что лучше — создать аналогичную тему на forum.joomla.org (там есть раздел Perfomance), или добавить в bugtracker на joomlacode.org (и в какой раздел трекера лучше добавить в этом случае)?
Я думаю и туда и туда ))
Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #7 : 01.11.2008, 21:36:26 »

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

Репутация: +179/-0
Offline Offline

Пол: Мужской
Сообщений: 1154


Рябов Денис


« Ответ #8 : 01.11.2008, 23:18:37 »

думаю, что лучше продублировать... причем на треккере разбить на несколько подзадач... и на всякий случай еще кинуть копию к текущему team lead'у
Скорее всего так и поступлю. Вот только выжду несколько дней — может что еще в голову придет, или вдруг кто-то обнаружит недостатки в предложенном патче.
Записан
klaizar
Осваиваюсь на форуме
***

Репутация: +13/-0
Offline Offline

Пол: Мужской
Сообщений: 164


*JoomlaGURU


« Ответ #9 : 03.11.2008, 16: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
Support Team
*****

Репутация: +179/-0
Offline Offline

Пол: Мужской
Сообщений: 1154


Рябов Денис


« Ответ #10 : 03.11.2008, 16:22:49 »

Ошибка означает, что файл /libraries/joomla/import.php отсутствует или недостаточно прав для его открытия. Почему — не знаю. Обращаю внимание, что ни import.php, ни framework.php в состав патча не входят.
« Последнее редактирование: 03.11.2008, 17:08:05 от Physicist » Записан
klaizar
Осваиваюсь на форуме
***

Репутация: +13/-0
Offline Offline

Пол: Мужской
Сообщений: 164


*JoomlaGURU


« Ответ #11 : 03.11.2008, 16:25:25 »

этот фаил у меня присутствует ( import.php ) права 644 , мож из за прав выдает ошибку ?
Записан
lems2003
Захожу иногда
**

Репутация: +3/-0
Offline Offline

Сообщений: 17



« Ответ #12 : 04.11.2008, 15:20:27 »

а под php 4 этот патч будешь функционировать? и польза будет те 19% , автор писал про 5 версию!!!
Записан
Physicist
Support Team
*****

Репутация: +179/-0
Offline Offline

Пол: Мужской
Сообщений: 1154


Рябов Денис


« Ответ #13 : 04.11.2008, 16:35:26 »

а под php 4 этот патч будешь функционировать? и польза будет те 19% , автор писал про 5 версию!!!
В принципе, должен. Вот только ответьте: Неужели так трудно самому взять и проверить, а потом в этой теме отписать результат?

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

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 158



« Ответ #14 : 04.11.2008, 17:58:36 »

Цитировать
Итого удается увеличить скорость работы этой функции на 19%.
У меня пока один вопрос - проводились ли измерения того, насколько увеличивается реальная скорость работы joomla под нагрузкой ? Ибо увеличение скорости одной функции даже на 100% не гарантирует увеличене общей производительности и следовательно имеет ли эта оптимизация смысл..
Записан
Physicist
Support Team
*****

Репутация: +179/-0
Offline Offline

Пол: Мужской
Сообщений: 1154


Рябов Денис


« Ответ #15 : 04.11.2008, 21:53:04 »

У меня пока один вопрос - проводились ли измерения того, насколько увеличивается реальная скорость работы joomla под нагрузкой ? Ибо увеличение скорости одной функции даже на 100% не гарантирует увеличене общей производительности и следовательно имеет ли эта оптимизация смысл..
Я при тестировании сначала отключил кэширование и включил отображение всех модулей (кроме враппера) на главной. При этом на метод stringToObject уходило порядка 20% от всего времени выполнения! Так что оптимизировав этот метод сразу получилось ускорение работы на 4%. Я считаю, что это всё-таки имеет смысл.

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

Репутация: +20/-0
Offline Offline

Пол: Мужской
Сообщений: 358


« Ответ #16 : 06.11.2008, 15:36:48 »

После установки патча (а именно файла libraries\joomla\registry\format\ini.php) начинает глючить модуль для вставки собственного кода. Все пробелы в коде заменяются на - \n. Страдает вид сайта + не работают многие скрипты.
Проверял на модуле mod_moedesigns_anycode_15 и на mod_php.
joomla 1.5.7 PHP5.2.6
Записан
Physicist
Support Team
*****

Репутация: +179/-0
Offline Offline

Пол: Мужской
Сообщений: 1154


Рябов Денис


« Ответ #17 : 06.11.2008, 23:19:59 »

7Rei, я не представляю, как парсинг ini-файлов может сказаться на пробелах в Вашем коде. Может проблема в чем-то еще?
Записан
7Rei
Давно я тут
****

Репутация: +20/-0
Offline Offline

Пол: Мужской
Сообщений: 358


« Ответ #18 : 06.11.2008, 23:50:28 »

7Rei, я не представляю, как парсинг ini-файлов может сказаться на пробелах в Вашем коде. Может проблема в чем-то еще?
Проверил еще раз, ошибка возникает после заливки именно этого файла!
Записан
Physicist
Support Team
*****

Репутация: +179/-0
Offline Offline

Пол: Мужской
Сообщений: 1154


Рябов Денис


« Ответ #19 : 07.11.2008, 01:29:37 »

Кстати, да. При причесывании файла исчез str_replace, заменяющий \n на переводы строк.
Я заменил пост в первом сообщении, а тут прилагаю чуть более расширенный патч (опять же, для тестирования).

* cumulativepatch.zip (114.02 Кб - загружено 177 раз.)
Записан
Physicist
Support Team
*****

Репутация: +179/-0
Offline Offline

Пол: Мужской
Сообщений: 1154


Рябов Денис


« Ответ #20 : 07.11.2008, 02:18:12 »

Набросал тему на forum.joomla.org:
http://forum.joomla.org/viewtopic.php?f=433&t=341326

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

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #21 : 07.11.2008, 02:22:12 »

smart, ты как представитель сообщества русской поддержки joomla, можешь кому-нибудь из ихних разработчиков кинуть ссылку на топик (я подозреваю, у тебя должно быть больше контактов).
оки, не вопрос...
Записан
7Rei
Давно я тут
****

Репутация: +20/-0
Offline Offline

Пол: Мужской
Сообщений: 358


« Ответ #22 : 08.11.2008, 14:20:09 »

Кстати, да. При причесывании файла исчез str_replace, заменяющий \n на переводы строк.
Я заменил пост в первом сообщении
Теперь он вообще не работоспособный! После замены файлов, в админке и на фронтенде выводится длинный, длинный текст Sad
Записан
Physicist
Support Team
*****

Репутация: +179/-0
Offline Offline

Пол: Мужской
Сообщений: 1154


Рябов Денис


« Ответ #23 : 08.11.2008, 15:04:57 »

Теперь он вообще не работоспособный! После замены файлов, в админке и на фронтенде выводится длинный, длинный текст Sad
Smiley Спасибо. Это я забыл var_dump'ы убрать. Сейчас прикреплю новый архив (кстати, на forum.joomla.org тоже нужно будет поменять).
Записан
kavkaz07
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 57


« Ответ #24 : 17.11.2008, 02:08:08 »

может пора уже 1.5.8 версию оптимизировать? когда уже будут результаты? былоб неплохо еслиь над ней наши поработали бы.........
Записан
igrik
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 14

Pis.lv


« Ответ #25 : 22.11.2008, 14: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
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 14

Pis.lv


« Ответ #26 : 22.11.2008, 15:10:40 »

Мде, "спасибо" за мега код..

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

Репутация: +179/-0
Offline Offline

Пол: Мужской
Сообщений: 1154


Рябов Денис


« Ответ #27 : 23.11.2008, 21:09:44 »

igrik, этот патч никак не мог привести к такой проблеме, т.к. он никоим образом не меняет механизм работы с кэшем. Он включает в себя механизм работы с кэшем timedfile, но по-умолчанию его не активирует (его нужно самостоятельно задать в настройках сайта).
Записан
igrik
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 14

Pis.lv


« Ответ #28 : 23.11.2008, 22:39:34 »

Тем не менее факт остаётся фактом.


Хронология:

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


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

Репутация: +20/-0
Offline Offline

Пол: Мужской
Сообщений: 358


« Ответ #29 : 29.12.2008, 12:22:59 »

Набросал тему на forum.joomla.org:
http://forum.joomla.org/viewtopic.php?f=433&t=341326
Physicist, очень интересно, как они отнеслись к данной модификации? Azn
Записан
Страниц: [1] 2  Все   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.16 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet