Pull to refresh

In Zend We Trust

Reading time5 min
Views926
imageХочется поделиться некоторыми впечатлениями о некоторых продуктах Zend ltd. Очень радует что теперь они не только The PHP Company, но и производители сопутствующих товаров. Раньше я как и, возможно, большая часть сидел на Zend Studio 5.5, так как она с успехом справлялась со всем тем что от нее требовалось, но задачи в ней решались по большей части ориентированные на одного разработчика, несмотря на «дружный коллектив». В принципе, ничего кроме codefolding и подсветки синтаксиса не требовалось, весьма полезны были еще всяческие шаблоны, например foreach и информация о функциях / аргументах и т. п. полученная из DocBlock, а так же удобное их создание. SVN использовался как backup и из IDE не как не взаимодействовал, но недавно перешел на Zend Studion 7.0, чему с каждым днем все больше рад, да есть куча минусов, да иногда висит из-за анализа проектов, непривычные горячие клавиши и т. п. но это все настраивается.

imageСразу хочется отметить если вам не нужно комплексное решение всех проблем — пользуйтесь тем редактором который вам по душе, если вам хочется применить какие-либо новые методы разработки — смело ставьте Zend Studio 7.0 и время от времени в ней экспериментируйте, в результате через некоторое время это даст свои плоды.

Один из минусов — не очень удобно работать при небольшом разрешении на не широкоэкранном мониторе, но эта проблема решается максимизацией активной панели (Ctrl + M). Следующая проблема с которой вы возможно столкнетесь это виззарды, сначала может быть непонятно какой визард для чего требуется, но разобравшись с ними вы сможете ускорить процесс разработки, еще для этих же целей очень хорошо послужат те же шаблоны.

Теперь то, о чем все таки хотелось сказать — это реальная интеграция IDE и сервера из коробки (php + web сервер + базаданных). Не нужно править конфиги чтобы что-то поправить в настройках, конечно сторонние расширения нужно будет подключать вручную, но большинство базовых операций удобно делать через веб интерфейс. Так чже вместе с Zend Server ставится Zend Controller которым иногда можно поиграться.

Для того чтобы интегрировать Zend Server и Zend Studio вам потребуется сначала запустить Server, потом студию и в ней во всплывающем окне согласиться с интеграцией и ввести пароль (это в случае если у вас Zend Server стоит локально). После этого сразу можно приступать к более конструктивной отладке, трассировке и профилированию. Для примера пара изображений приложения на Zend Framework (кстати соответствующая перспектива отображает панель MVC в которой отображаются аккуратно модели / представления / контроллеры)

image


На этой иллюстрации видно что подготовка (bootstraping) приложения занимает 46% времени работы, а это в основном разбор конфигурационных файлов и создание соответствующи объектов, которые раз за разом одни и те же… ощущается реальная нехватка хеширования всего этого дела, правда в примере использованы почти все ресурсы доступные по умолчанию, их там штук 11. «Полезные действия» — читай диспетчеризация занимает всего 27% времени, что выглядит просто отвратительно, т. е. 3/4 времени исполнения тратится на одни и те же однообразные в большинстве случаев действия.

На следующем изображении представлен тот же отчет, только с другой вкладки в виде круговой диаграммы:

image


Отсюда мы с разу видим, что новый загрузчик хоть и очень удобен, но является первой жертвой на отстрел. Еще в перспективе отладки есть панель с консолью, которая тоже поможет вам найти конфликтные места, в моем случае — загрузчик пытается загрузить ресурсы и помощники вида из пользовательских путей, а не /library/Zend, плюс отчеты по обращениям к файлам — кол-во затраченного времени, обработанных строк, пропущенных строк и всего строк кода в файле, посмотрите сами — обещаю будет интересно. Профилирован был URL. Попробовать какие-то другие возможности пока нет времени, нов будущем обязательно что-нибудь будет еще, возможно поподробнее рассмотрим работу с Zend Debuger.

P. S.
На первой иллюстрации с Zend Controller — отображенно количество запросов в секунду при обращение по тому же URL что и при профилировании.

Если кто-либо устанавливал на одном хосте PHP с одновременной поддержкой xDebug и Zend Debugger и испытывал какие-либо затруднения, и решил их — расскажите про это в комментариях, если найдете время.

Нужно будет попробовать обернуть Zend_Application стандартным кешем для объек

До подключения Zend_Cache


Profile URL: example.com
Query: debug_host=192.168.1.195%2C127.0.0.1&debug_fastfile=1
Path: C:/Program Files/Zend/Apache2/htdocs/example.com/htdocs/index.php
Total Request Time: 839.07
Number of Files: 136
Profile Date: Tue Jul 21 00:45:51 MSD 2009

/**
* index.php ДО подключения стандартного кеша к Zend_Application
* Autoloader, константы и старт сессий находится выше
* и не приводится тут
*
*/

$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR .'application.ini'
);

$application->bootstrap()->run();


* This source code was highlighted with Source Code Highlighter.


После подключения Zend_Cache


Profile URL: example.com
Query: debug_host=192.168.1.195%2C127.0.0.1&debug_fastfile=1
Path: C:/Program Files/Zend/Apache2/htdocs/emample.com/htdocs/index.php
Total Request Time: 636.28
Number of Files: 89
Profile Date: Tue Jul 21 00:33:55 MSD 2009

/**
* index.php ПОСЛЕ подключения стандартного кеша к Zend_Application
* Autoloader, константы и старт сессий находится выше
* и не приводится тут
*
*/

$frontendOptions = array(
    'cached_entity' => new Zend_Application(
        APPLICATION_ENV,
        APPLICATION_PATH . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR .'application.ini'
    )
);

$backendOptions = array(
    'cache_dir' => APPLICATION_CACHE,
    'hashed_directory_level' => 2
);

$cache = Zend_Cache::factory('Class', 'File', $frontendOptions, $backendOptions);

$cache->bootstrap();
$cache->run();

/**
* ВАЖНО: При использовании разименованных методов т. е.:
* $cache->bootstrap()->run();
*
* Приходил полный П. в виде:
* Debug Error:
* C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Application\Bootstrap\Bootstrap.php
* line 69 - Call to a member function getDefaultModule() on a non-object
*/


* This source code was highlighted with Source Code Highlighter.

Выводы:


Использование Zend Studio совместно с Zend Server позволило оптимизировать приложение за час (с начала написания статьи — создание скриншотов, набор текста, форматирование, пара звонков по мобильному ) в среднем на четверть: время выполнения сократилось на 24%, количество подключаемых файлов — на 34%. Безусловно, могут существовать какие-то тонкие моменты или потенциальные проблемы, но эта проблема покрывается использованием модульного тестирования.

P.P.S.:


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

А теперь правильный вывод — ночью нужно спать.
Tags:
Hubs:
Total votes 13: ↑9 and ↓4+5
Comments4

Articles