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

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

15.10.2011 Zend Framework Day 2011, 12 ноября, Киев (0)

27.09.2011 MSSQL, XML и PHP. Как заставить это работать из под *nix? (0)

22.06.2011 Zend Framework, MSSQL и UTF-8 - проблемы с кодировками (5)

Все

Категории

PHP (2)

Zend Framework (32)

Javascript (4)

Другое (13)

Книги (1)

Все

RSS

Статьи

Комментарии

Портфолио

Облако тегов

программирование  open search  портфолио  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  софт  массовые рассылки  хранение данных 

Все

Статистика



Савватеево, в срок строительство деревянных домов.
детский день рождения, сюрпризы.
ОСАГО для KIA, выберем лучшую страховую для вас выезд шоу мыльных пузырей киев.

Главная > Статьи > Zend Framework > Ускоряем Zend_View!
02.06.09 Ускоряем Zend_View!

Ускорение Zend_ViewПрограммируя все более крупные и сложные информационные системы, я осмыслил очень большую важность производительности подобных систем, ведь от этого в немалом объеме зависит успех проекта.

Так вот, стабильность, скорость и надежность. По этому поводу я и решил написать небольшую заметку на тему ускорения Zend_View. Информация взята из мануала Zend Framework – решил ее продублировать и более подробно объяснить, так как мало кто обращает внимание на эту информацию.

 

К делу


 

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

Zend_View построен таким образом, что подключение его помощников и других программных компонентов – задача очень ресурсоемкая. Каждый раз он обрабатывает директории с помощниками, разбирает пути к ним на основе имени запрошенного класса (вспомните структуру каталогов ZF и как формируется название класса). Еще он проверяет тот ли класс находится файле, который определил движок, если нет, то сообщение об ошибке добавляется в стек PHP.

Такая «пробежка» по каждому префиксу, каждой папке в префиксе, нахождение файла который соответствует вызванному классу и еще и проверка на существование в нем ожидаемого класса – приводит к тому, что выполняются многократные монотонные операции, которые, по сути, нужно проводить единожды после обновления списка помощников вида. Все это очень и очень долго…

Шустрый Zend FrameworkНо разработчики нашли выход. Они сделали кеш подключаемых помощников, добавили проверку на предмет загруженности необходимого класса. Если класс уже подключен – отлично, юзаем. Если же класс еще не загружен – значит надо его подключить, а файл который определили теми самыми ресурсоемкими методами – добавить в файл кеша и на следующий раз мы избежим процедуру просчетов файла.

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

Будете смеяться, но включение такого хорошего функционала занимает всего несколько строчек. Предлагаю Вам посмотреть код функции, которую Вам надо будет вызвать в своем бутстрапе:

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

У Вас должен получится примерно такой файл кеша:

 

Как всегда, итог


 

Спасибо за внимание. Как всегда надеюсь, что был полезен со своим материалом. Желаю Вам шустрых проектов!

Теги:  Zend_View, zend framework, speedUp

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

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

03.06.09 18:40:24

Cуперовая вещь. Не знал про нее. Завтра попробую в средненагруженой системе = посмотрю результат. Спасибо!

  illusive

04.06.09 06:53:32

Пожалуйста. Но у меня сразу же будет просьба - результаты замеров Вы не могли бы показать здесь? А то у меня небыло времени толком с этим поиграться...

  xen

28.07.09 06:02:27

Спасибо за статью очень пригодилась)))Улыбается

  illusive

28.07.09 13:37:00

Подмигивает

  sof

03.08.09 15:42:52

херня какаято а как же аутолоад в php?

  Sunburn

04.08.09 11:32:12

Ничего не хрень, автолоад работает долго, а тут нужно подключать кучи файлов. На средних сайтах производительность может на процентов 20-30 подскочить.

Спасибо за аккуратное решение данной проблемы =)

  illusive

05.08.09 12:53:45

Пожалуйста...

  balamut182

11.10.09 18:57:52

а если заюзать eAccelerator?

  illusive

12.10.09 00:17:19

Причем здесь eAccelerator?

  Kensai

12.11.09 21:17:23

Давно хотел ввести кеширование плагинов. Но тригером послужила статья, спасибо. Смеётся

  illusive

12.11.09 23:18:04

Пожалуйста Подмигивает

  Андрей

22.01.10 00:38:05

Спасибо, круто все так просто.
  Вячеслав

26.02.10 19:38:20

Вот например эти библиотеки грузятся при запуске почти любой страницы моего проекта Controller\Router\Route.php Controller\Router\Route\Abstract.php Controller\Router\Route\Interface.php Controller\Router\Route\Module.php Controller\Router\Route\Regex.php Db.php Db\Adapter\Abstract.php Db\Adapter\Pdo\Abstract.php Db\Adapter\Pdo\Mysql.php Db\Expr.php Db\Profiler.php Db\Profiler\Query.php Db\Select.php Db\Statement.php Db\Statement\Interface.php Db\Statement\Pdo.php Db\Table.php Db\Table\Abstract.php Db\Table\Definition.php Db\Table\Row.php Db\Table\Row\Abstract.php Db\Table\Rowset.php Db\Table\Rowset\Abstract.php Db\Table\Select.php Exception.php Filter.php Filter\Inflector.php Filter\Interface.php Filter\PregReplace.php Filter\StringToLower.php Filter\Word\CamelCaseToDash.php Filter\Word\CamelCaseToSeparator.php Filter\Word\SeparatorToSeparator.php Filter\Word\Separator\Abstract.php Filter\Word\UnderscoreToSeparator.php Loader.php Loader\Autoloader.php Loader\Autoloader\Interface.php Loader\Autoloader\Resource.php Loader\PluginLoader.php Loader\PluginLoader\Interface.php Registry.php Session.php Session\Abstract.php Session\Exception.php Session\Namespace.php Session\SaveHandler\Interface.php Uri.php Version.php View.php View\Abstract.php View\Helper\Abstract.php View\Helper\BaseUrl.php View\Helper\Interface.php View\Helper\Partial.php View\Interface.php Можна ли как-то их тоже в кэш добавить?
  illusive

26.02.10 19:47:39

Прочитайте внимательно статью))). Не для того это делается, чтобы просто загрузить файлик. Это делается для того, чтобы избежать лишних просчетов, которые делает Зенд при "поиске" необходимого файлика помощника вида))

  _moff

27.03.10 19:53:02

Вы написали "...надо будет вызвать в своем бутстрапе..."
Подскажите где именно лучше вызывать этот код. 

  illusive

27.03.10 23:10:57

Это не имеет значение. Главное вставить этот код ДО работы с помощниками вида, для обеспечения максимальной выгоды. У меня, например, этот код вставлен сразу после "регистрации" автолоада.

  _moff

28.03.10 20:53:51

Спасибо я уже разобрался, я создал свой метод _initViewCache, но честно говоря пока ощутимых результатов не увидел, проверю попозже  когда проект разрастётся

  Andrew

08.10.10 09:57:09

Прошу прощения за поднятие старой темы, но хотел бы внести изменения.

Этот способ не отностится конкретно к Zend_View, этот способ включает кеширование плагинов вообще, в том числе и Application Resources. И более верным решением, на мой взгляд, поместить вызов этого метода как можно раньше до процесса bootstrap. 

Это можно сделать в index.php до вызова application->bootstrap(), но это жёсткий хардкод. Правильнее, на мой взгляд, перекрыть метод getZend_Application_Bootstrap_BootstrapAbstract::setOptions(array $options) и поместить туда код вида
 
Это позволит задать файл для кеша в application.ini 
pluginCache = path/to/file 

  illusive

08.10.10 11:51:34

Спасибо, это то же самое, что и Я предложил, только с той разницей, что Ваше решение  заточено под Zend_Application.

Спасибо, думаю многим пригодится Подмигивает 

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

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