Статьи
Портфолио
Друзья
Контакты

Последние статьи

25.08.2010 Блогерам: моральный кодекс в сети 1 коммент.

19.08.2010 «Surviving The Deep End» - Zend Framework. Часть I 1 коммент.

16.08.2010 Приглашается PHP-developer в корпорацию Fozzy Group 3 коммент.

Все

Категории

PHP 2 стат.

Zend Framework 26 стат.

Javascript 3 стат.

Другое 15 стат.

Книги 1 стат.

Украина 1 стат.

Все

RSS

Статьи

Комментарии

Портфолио

Облако тегов

программирование  портфолио  php  zend framework  Zend_Db  Smarty  Zend_Form  паттерны  javascript  niceforms  jQuery  Zend_Mail  веб  Google  Zend_Rest  Zend_View_Helper  zend casts  Zend_View  Zend_Layout  speedUp  интернет  Загрузчик фотографий  Flash  ВКонтакте  zend  localization  zend_translate  gettext  антон шевчук  подарки  Я читаю  Книги  sphinx  релизы  заработок 

Все

Реклама



Статистика



Rambler's Top100

Главная > Статьи > Zend Framework > Ускоряем ZF-проекты: автолоад и сборка в один файл
03.06.10 Ускоряем ZF-проекты: автолоад и сборка в один файл

 

Speed Up Zend Fraemework applications

Здравствуйте, уважаемые читатели! Простите меня за столь долгое отсутствие.. У меня было очень много перемен в жизни, которые отбирали и время, и силы. Как Вы уже наверное знаете я жил всю жизнь в областном центре Волынской области - в г. Луцке. На данный момент я нашел работу в Киеве, мне было необходимо переехать и вот я в Киеве уже почти 2 месяца. Меня пригласили работать в корпорацию Fozzy Group прикладным программистом.

 

 

Также все свободное время посвящал учебе в университете и работе над своими проектами Linkgator и Renter [в разработке]. В общем было трудно, но я успешно решил все поставленные в моей жизни задачи, сейчас вхожу в привычный ритм, но уже в Киеве.

 

 

Ладно,  пора заканчивать этот оффтоп. Пожалуй, приступлю к делу. Итак, темой сегодняшней статьи будет ускорение производительности Zend Framework приложений, путем автозагрузки и сборки фреймворка в один файл!




Описание идеи


 

Как Вы уже могли заметить Zend Framework состоит из множества файлов, которые очень удобно разложены по папкам. Структура отвечает полностью названию класса, что очень удобно - не приходится долго искать и разбираться. Это была одна сторона медали. Второй вопрос, это огромное количество файлов, которое подключается при каждом запросе, создавая довольно большую нагрузку на Ваш сервер.



Естественно такое приложение не может быть быстрым, когда при каждом запросе дергается по 300-400 файлов. Приложение работало бы существенно быстрее если бы файлов было по-меньше.. либо чтобы все необходимые классы были вообще в одном файле, верно?


Решение я видел только в двух вариантах:

  • Сборка библиотеки в один файл
  • Сборка библиотеки как расширения PHP

 

Второй вариант я себе технически плохо представляю, т.к. с серверным ПО знаком поверхностно. На сколько мне известно, можно как-то положить байт-код библиотеки в виде расширения, но как? Я себе этого не представляю. Это может сделать либо C-программер либо хороший администратор серверного ПО. Но, к сожалению, пока что не я.

 

 

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

 

 

В автолоадер попадают только те классы, которые используются. Мы проверяем не загружен ли этот класс в память, если да, то автолоадер ничего не делает. Если нет - подключаем класс, записываем класс в собранный файл. При последующем запуске приложения недостающий класс уже будет вписан в сборный файл и больше подключатся не будет.

 

 

Такой метод даст огромный прирост производительности. Чем больше файлов используется в проекте и чем больше файлов будет записано в сборный файл - тем выше будет производительность системы, сравнительно с тем, что было до внедрения данного механизма.

 

 

 

Реализация


Как всегда самая вкусная часть. Для начала приведу Вам код созданного автозагрузчика. Некоторые части кода были взяты тут, но были заточены мной под данную задачу. Мне в описанном примере не понравилась реализация. Как-то слишком все было запутанно. Я же все упростил до 2 классов, 1 сборного файла и 2 строк в бутстрапе. Сначала вообще пытался написать все полностью сам, пока не понял, что я не слишком силен в регулярных выражениях и не увидев приведенную выше статью.

 

Собственно код очень простой и хорошо документирован, поэтому детали его работы не вижу смысла излагать. Вот еще один: класс Exception:

Вот эти два класса и работают над нашей задачей Улыбается Теперь давайте сконфигурируем наш бутстрап файл. Добавьте эти строки кода сразу после инициализации include_path

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

 

 

Конечно, для того, чтобы все успешно заработало необходимо вырезать все require_once.

 

 

Теперь Ваш сборный файл будет расти. Автолоад будет включен, но когда будут собраны все используемые классы, он просто не будет вызываться.

 

 

Результат


После успешной интеграции и сборки в один файл Вы должны заметить существенный прирост производительности. При этом у очень рекомендуется использовать байт-код кешеры для достижения максимального эффекта. Говорить о каких-то конкретных цифрах очень тяжело: все зависит от специфики Вашей системы.


Быстрых Вам проектов!

Теги:  speedUp, zend framework

Другие категории:

■ PHP ■ Zend Framework ■ Javascript ■ Другое ■ Книги ■ Украина
Комментарии к статье
  Alexander Mahomet

16.06.10 17:04:33

Спасибо за материал.

Огромного прироста я не заметил, хотелось бы все таки увидеть какие-то цифры, хоть в каком то частном случае.

Мои результаты можно увидеть здесь http://zendframework.ru/articles/zend-framework-performance-zf-compiling

P.S. Успехов в покорении Киева :) Приходи на следующую встречу ZF комьюнити.

  illusive

17.06.10 11:19:57

Пожалуйста.

 

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

 

В вашем случае прирост будет меньше, т.к. Вы используете меньше возможностей Zend, я же в тех проектах, в которые интегрировал решение использовал в раза 2 больше файлов + еще и свои либы, написанные по принципах Zend.

Оставить свой комментарий

 
Статьи | Портфолио | Друзья | Контакты
Идея и мозги: Васильев Андрей © 2008-2010 Web-Blog Кисточка и фантазия: Зелинский Богдан