Ответить Новая тема Новый опрос 
Всего: 2 1 2 >
 FetchScript — экономия серверного ресурса
ramzes_ra


Cпециалист
Сообщений: 107
Откуда: Украина
Регистрация: 04-02-2011


16-02-2012 00:28
:drinks: Что такое нагрузка на сервер, пожалуй, объяснять не нужно. Я однажды столкнулся с такой проблемой, правда, не на Престе, а на Джумле, когда за сутки мой серверный трафик превысил среднемесячный. Пришлось сменить тарифный план хостинга, дающий право использовать 5% серверного ресурса вместо 3%. Этот факт меня насторожил, и я занялся изучением процесса. Если кратко, то львиную долю ресурса пожирают запросы на css и js файлы. С Джумлой я эту проблему решил довольно просто написанием системного плагина. Когда пришло время заняться Престой, то экономия серверного ресурса встала для меня на первый план. «О, ужас!» - Преста является поистине пожирателем ресурса (особенно Преста-1.4, где я насчитал около 30 запросов при загрузке главной страницы) ! Собственно говоря, я пользуюсь 1.3 версией, и с 1.4 занялся чисто по-приколу.
Есть такая хорошая штучка, называется fetchscript (сборщик скриптов), позволяющая уменьшить количество запросов до 2. Механизм работы довольно прост: браузер дает запрос, например на css, и все заявленные файлы стилей грузятся оптом. То же самое и для js. И тут убиваем сразу 2-х зайцев - снижаем нагрузку на сервер и экономим время пользователя.
К примеру, если стандартно Преста-1.4 делает вкупе 20 запросов (я насчитал только для стилей – аж 23!!!) то 1 тысяча посетителей (если одновременно) дадут нагрузку на сервер ZP = 20 тысяч. Применение плагина снижает ZP до 2 тысяч, и ZP в 20 тысяч будет эквивалентно одновременному посещению уже 10 тысяч посетителей(!). В общем, цифры говорят сами за себя.
Немного поколдовав, я написал класс Fetchscript, реализующий оптовый запрос. Идея проста: первоначально буферизируется вывод страницы, затем плагин вырезает все включения стилей и скриптов, компонует и вставляет всего два запроса на стили и скрипты в заголовок файла. Ну, еще минимизирует html-код. Все. Смотрим полученный код страницы и удивляемся!
Это только бета-версия, плагин требует еще доработки, как-то:
Парсинг кода стилей, задаваемых через <style type="text/css" >@import url(х.css); </style>;
Компрессия css и js кода и пр.
Также требуется реализация системных настроек. Например, чтобы можно было отключить плагин. Это бывает нужно при разработке, чтобы найти корявый путь к файлу (если сервер не может найти какой-нибудь файл). Ну и еще много чего, например, реализовать оптовый запрос картинок (тоже тема!).
Файл fetchscript.php находится в корне сайта, папка fetchscript – в директории tools.
- Для Престы-1.3 изменены файлы header.php и footer.php (в корневой директории).
- Для Престы-1.3 изменен только файл FrontController.php (из директории classes).
Все исходники в архиве (отдельно для версий 1.3 и 1.4).
Испытывайте, развивайте!
Дальнейшая работа по развитию плагина будет освещена на Пингвин-портале.
Новые версии будут выкладываться в Ra-Shop (по символической цене).
ramzes_ra
P.S. Сомневаюсь, что после этой публикации, мои сайты заполонит поток посетителей, однако, я к этому уже готов, ведь мой плагин уже работает!

...Пока на сервер (с Престой0 не заливал — возникли проблемы с хостингом, блин!


Сообщение отредактировано ramzes_ra 15-02-2012 19:35 ...


Вложения:

Вложения fetchscript.zip( Размер файла: 33.73KB Скачиваний: 167 )
 
Вне форума
ПМ 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ors
Профессионал
Сообщений: 1885
Регистрация: 09-11-2009


16-02-2012 01:04
В версии 1.4 заходим на вкладку настройки/производительность и включаем объединение и сжатие скриптов и стилей и минификацию кода страницы
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ramzes_ra


Cпециалист
Сообщений: 107
Откуда: Украина
Регистрация: 04-02-2011


16-02-2012 03:27
Цитата:( ors @ 15-02-2012 20:04 Смотреть сообщение )
В версии 1.4 заходим на вкладку настройки/производительность и включаем объединение и сжатие скриптов и стилей и минификацию кода страницы

Я ни коим образом не сомневался в твоей компетентности, но для Престы 1.3 такой фишки нет. Я еще посмотрю что там в Престе 1.4
кстати, только что залил плуг на сервер. есть 2 бага:
в файле header.php — require_once(_PS_TOOL_DIR_.'fetchscript/Fetchscript.class.php');
Нужно записать в нижнем регистре (UNIX чувствителен к регистру)
В файле fetchscript.class.php заблокируйте строку
public static function _minify($html)
{
/* $html=Fetchscript::minifyHTML($html);*/
Пока не определился с багом.
В целом работает, правда мой шаблон несколько покоробило, и неудивительно, ведь его делал на скоряк. Скоро сделаю новый, хороший.
А вообще, спасибо за участие, ORS!
 
Вне форума
ПМ 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ramzes_ra


Cпециалист
Сообщений: 107
Откуда: Украина
Регистрация: 04-02-2011


16-02-2012 04:30
Цитата:( ors @ 15-02-2012 20:04 Смотреть сообщение )
В версии 1.4 заходим на вкладку настройки/производительность и включаем объединение и сжатие скриптов и стилей и минификацию кода страницы

Вобщем, проверил Престу-1.4
Может у меня еще только первый релиз...
Пожало файлы, и выдало полностью разваленную страницу. львиную долю css не нашло.
Пробую своим методом — офигенно!
И потом, создается такое впечатление, что Преста каждый раз занимается компрессией?!!!
Со своим плугом я экспериментировал и эту фишку, у меня минимальная копия создается только один раз, а потом только проверяется ее наличие.
Так что я не изобретаю велосипед, и мой плагин мне уже нравится!!!
 
Вне форума
ПМ 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
e_v_medvedev
Профессионал
Сообщений: 806
Откуда: Москва
Регистрация: 25-03-2011


16-02-2012 06:09
Цитата:( ramzes_ra @ 15-02-2012 20:28 Смотреть сообщение )
«О, ужас!» - Преста является поистине пожирателем ресурса (особенно Преста-1.4, где я насчитал около 30 запросов при загрузке главной страницы) !


Мадженту попробуйте, тогда узнаете что такое пожиратель ресурсов.
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ors
Профессионал
Сообщений: 1885
Регистрация: 09-11-2009


16-02-2012 11:42
Цитата:( ramzes_ra @ 16-02-2012 05:30 Смотреть сообщение )
Пожало файлы, и выдало полностью разваленную страницу. львиную долю css не нашло.


Если шаблоны и модули сделаны правильно, то ничего не развалится. В отличии от вашего модуля страница не парсится каждый раз перед выводом. А файлы подключаются в движке и модулях функциями Tools::addJS и Tools::addCSS

С одной стороны, в отличии от вашего скрипта, файлы подключенные простой записью в шаблоне не будут объединятся. Но с другой - экономятся ресурсы сервера на парсинге страницы. Плюс у вас файл отдается динамически через fetchscript.php, а в престе просто подставляется ссылка на статический кэшированный файл - опять экономия ресурсов.

Цитата:( ramzes_ra @ 16-02-2012 05:30 Смотреть сообщение )
И потом, создается такое впечатление, что Преста каждый раз занимается компрессией?!!!

Смотрите /classes/Tools.php функция cccCss. Файлы не сжимаются каждый раз, а проверяется дата изменения и если не изменились исходные файлы, то отдается сжатый файл из кэша.

Есть интересный проект http://code.google.com/p/web-optimizator/ в котором реализовано много интересных возможностей, например получение спрайтов из картинок. Попробуйте его интегрировать с престой.
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ramzes_ra


Cпециалист
Сообщений: 107
Откуда: Украина
Регистрация: 04-02-2011


20-02-2012 01:42
Есть интересный проект http://code.google.com/p/web-optimizator/ в котором реализовано много интересных возможностей, например получение спрайтов из картинок. Попробуйте его интегрировать с престой.
[/quote]
Спасибо за подсказку. Преста не виновата, просто иногда может возникать конфликт приоритета файла стилей, например, если файцл global.css грузится вторым, а в предыдущем перекрывается какое-нибудь критически важное свойство.
Сейчас я доработал плагин таким образом, что также создается кэш, как в престе-1.4
Сегодня настраивал "наживую" на сервере. Нужно еще немного доработать, где-то неправильно пути формируются. Через пару дней отлажу полностью. А пока, за отключенностью кэширования, плагин просто собирает файлы — и то хлеб!
Впрочем, к чему тут полемика, я ведь делаю это под Престу-1.3, в которой нет этого режима...
 
Вне форума
ПМ 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ramzes_ra


Cпециалист
Сообщений: 107
Откуда: Украина
Регистрация: 04-02-2011


20-02-2012 01:59
Цитата:( ors @ 16-02-2012 06:42 Смотреть сообщение )

С одной стороны, в отличии от вашего скрипта, файлы подключенные простой записью в шаблоне не будут объединятся. Но с другой - экономятся ресурсы сервера на парсинге страницы. Плюс у вас файл отдается динамически через fetchscript.php, а в престе просто подставляется ссылка на статический кэшированный файл - опять экономия ресурсов.

По мне, дешевле каждый раз парсить страницу, чем создавать несколько дополнительных запросов. Можно и в Престе-1.3 переделать систему подключения стилей и скриптов, только не охота ковырять множество файлов. Из двух зол выбираем меньшее...

Да, скачал кое-что по предложенной ссылке. Буду химичить.
 
Вне форума
ПМ 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ramzes_ra


Cпециалист
Сообщений: 107
Откуда: Украина
Регистрация: 04-02-2011


22-02-2012 16:41
Спасибо ors за некоторые подсказки. Много переделал. Теперь плагин может работать в 3 режимах: динамическая выдача оригинальных скриптов, динамическая выдача минимизированных скриптов, а также статическое подключение кэшированых составных файлов.
Основные настройки описаны в readme архива.
Файл стилей global.css приходится напрямую прописывать в шаблоне header.tpl
Нужно подправить код плагина.
В будущем плагин будет оформлен в виде компонента, настраиваемого из админки.
Сейчас тестируется в рабочем режиме на ra-shop.us
Для установки, подкорректируйте настройки в файле config_fetch.php, перепакуйте архив и разархивируйте в корне сайта.
Впрочем, пока лучше протестируйте на локальной машине, чтобы избежать возможных проблем...


Вложения:

Вложения tools.zip( Размер файла: 26.61KB Скачиваний: 144 )
 
Вне форума
ПМ 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ramzes_ra


Cпециалист
Сообщений: 107
Откуда: Украина
Регистрация: 04-02-2011


27-02-2012 05:28
Сегодня выкладываю доработанный плуг. Нашел козу — при выборе вида оплаты (payment.php) в страницу вставляются несуществующие ссылки на файлы. Хотя, просмотр логов показал, что плагин отрабатывает и дает правильные ссылки. Причину пока не нашел, но нашел обходной путь — в конфигурацию фетча добавил исключение. Немного подкорректировал файл header.php. Теперь, при запросе этого файла, скрипты выдаются динамически.
Впрочем, сейчас мне не до плагина — занимаюсь адаптацией Доджо под Престу. Кстати, и плуг и доджо уже на моем сайте работают. Плюс ко всему, Фэтч не разрешает включать дублированные файлы. То есть, если в модуле, к примеру, подразумевается подключение какого-либо стиля или скрипта, но который уже присутствует в другом моде, либо в самом шаблоне, это будет включено только один раз!!!
По подсказке ORS, применил пакер JS. Обалдеть! Даже компресированные скрипты доджо уменьшает в объеме почти вдвое.
Жаль что WEBO пока для Престы ничего не придумала. Наверное трудновато...
P.S. Вопросы по плагину направляйте мне на admin@esculap.in


Вложения:

Вложения fetchscript.zip( Размер файла: 25.42KB Скачиваний: 154 )
 
Вне форума
ПМ 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Ответить Новая тема Новый опрос 
Всего: 2 1 2 >