SlideShare a Scribd company logo
Zend Framework и производительность Александр Махомет [email_address] 27 марта 2010 г. Санкт-Петербург
О докладчике PHP  разработчик PHP 5  лет Zend Framework  3 года Создатель сообщества  http://zendframework.ru
Производительность это мера скорости работы системы.
Что тестируем? -  Hello World -  Demo  сайт
Приложение  “ Hello World” zf create project ZF ~ 67  файлов Приложение  ~  5  файлов Zend_Application, Zend_Loader, Zend_Controller, Zend_View, Zend_Layout, Zend_Filter
Приложение « Demo  сайт » Базовые функции среднестатистического сайта ZF ~ 1 80   файлов Приложение  ~ 34  файла Zend_Application, Zend_Loader, Zend_Controller, Zend_View, Zend_Layout, Zend_Filter Zend_Form, Zend_Db, Zend_Translate, Zend_Cache, Zend_Captcha, Zend_Session
Приложение « Demo  сайт » Статьи и пользователи Форма, 12 элементов Блоки, 12 штук Плагины для фронтконтроллера Помощники действий Правила маршрутизации
 
Где тестируем?
Параметры сервера Intel(R) Core(TM)2 Duo CPU E7200  @ 2.53GHz 2  GB RAM Linux Debian   lenny 8 Apache 2.0 PHP 5.2.6 mod_php  +  Suhosin Patch 0.9.6.2 Mysql 5.0.51a Загрузка  ~ 0% Zend Framework 1.10.2 (~ 2700  файлов )
Как тестируем?
Утилиты для тестирования Apache Benchmark Siege Apache Jmeter
Apache Benchmark http://httpd.apache.org/docs/2.0/programs/ab.html Простой консольный интерфейс -с – количество одновременных пользователей - n  –  количество запросов
Concurrency Level:  20 Time taken for tests:  1.791 seconds Complete requests:  300 Total transferred:  384900 bytes Requests per second:  167.55 [#/sec] (mean) Time per request:  119.370 [ms] (mean) Percentage of the requests served within a certain time (ms) 50%  108 66%  111 75%  114 80%  115 90%  122 95%  150 98%  200 99%  225 100%  364 (longest request)
Siege http://www.joedog.org/index/siege-home Простой консольный интерфейс Возможность тестировать по набору адресов -с – количество одновременных пользователей - r  –  количество запросов
Transactions:  100 hits Availability:  100.00 % Elapsed time:  9.10 secs Data transferred:  0.10 MB Response time:  0.12 secs Transaction rate:  10.99 trans/sec Throughput:  0.01 MB/sec Concurrency:  1.37 Successful transactions:  100 Failed transactions:  0 Longest transaction:  0.55 Shortest transaction:  0.10
Apache JMeter http://jakarta.apache.org/jmeter/ Графический интерфейс Широкие возможности Тестирование по  access  логу Различные планы тестирования Генерация пауз, Pre-Processor и Post-Processor  Assertion механизм Различные графические и текстовые отчеты
 
Наш выбор Apache Benchmark , как простой и эффективный инструмент
Xdebug Читабельные сообщения об ошибках Трасировка приложения Профилирование приложения Отладка приложения KCachegrind WinCachegrind Webgrind
Акселераторы  PHP Сценарий работы  PHP  скрипта: Чтение файла  Генерация байт - кода  Выполнение кода  Выдача результата  Задача акселератора – избавиться от шага 2, путем кеширования байт-кода  в памяти или на диске.
APC http://pecl.php.net/package/apc От команды  PHP,  возможно войдет в ядро  PHP6 Конфигурация  APC  3.0.19 : apc.enabled = 1; apc.shm_size = 30; apc.max_file_size =10M; apc.stat = 1;
eAccelerator http://eaccelerator.net/ Версия eAccelerator 0.9.6  eaccelerator.shm_size="16" accelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="0" eaccelerator.shm_prune_period="0" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9"
Что замеряем Количество запросов в секунду Apache Benchmark (10-30  тестов ) ab -c 50 -n 500  ab -c 50 -n 300 Время выполнения скрипта  ( сек ) - PHP  функция  microtime  (10 тестов) Память выделяемая для скрипта (мб) - PHP  функция  memory_get_peak_usage
Перейдем к замерам
Req/s = 57.69 Time  =  0.0286  Memory =  4.483 Zend_Application ~ 50% Action_Helper_ViewRenderer ~ 13% Hello world
Hello world +  Акселераторы Apc : Req/s = 135.39 Time  =  0.0067  Memory =  1.423 eAccelerator: Req/s = 138.73 Time  =  0.0065  Memory =  1.194
Demo  сайт
Demo  сайт Req/s =  12.99 Time  =  0.1265  Memory =  14.946 Zend_Application ~ 15%
Помощник вида  action ~ 30% Zend_Form ~ 16%
Замена  action Помощник действия  ActionStack : Req/s =  1 3 . 28 Time  = 0.12647 Memory =  14.791 Свои помощники вида: Req/s =  14.41 Time  = 0.1148 Memory =  14.45 ~  на  10 %   уменьшили нагрузку
Zend_Cache Поддержка различных бекэнд и фронтэнд адаптеров Кэширование на уровне функций, классов, файлов, страниц APC, Memcache, File, Sqlite  и другие бэкенды Кешированние метаданных  Zend_Db_Table Zend_Db_Table_Abstract::setDefaultMetadataCache
Кэшируем форму Req/s =  17.2 Time  = 0.0968 Memory =  13.141 ZF – 165  файлов
Отключаем  ViewRenderer Zend_Layout  и  Zend_Form  используют  ViewRenderer $front->setParam('noViewRenderer', true); … $view = new Zend_View(); $view->setBasePath(APPLICATION_PATH . '/views/'); $layout->setView($view); …   $ form ->setView($v);
Результаты Req/s =  17. 9 Time  = 0.0959 Memory =  12.551 Небольшой прирост
Отключаем  Zend_Application Заменяем самописным класом Req/s =  18.5 Time  = 0.0923 Memory =  11.999
Все тесты   Тест  1 Тест  2 Тест  3 Тест  4 Тест  5 Тест  6 Req/s 12.99 13.28 14.41 17.2 17.9 18.5 Time 0.1265 0.12647 0.1148 0.0968 0.0959 0.0923 Mem 14.946 14.791 14.45 13.141 12.551 11.999
Все тесты  +  APC Тест  1 Тест  2 Тест  3 Тест  4 Тест  5 Тест  6 Req/s 26.8575 27.295 32.5375 4 1 .95 4 2 . 01 4 2 . 95 Time 0.05986 0.05947  0.04891  0.03768  0.03 6 1  0.03 6 23  Mem 5.794  5.571  5.306  4.854  4.669  4.497
Все результаты Hello world Req\s: 57.69  -> 138.73 (2.4  раза ) Time:  0.286  -> 0.0065 (4.4  раза ) Mem: 4.483 -> 1.194 (3.7  раз ) Demo  сайт без акселератора Req\s: 12.29  -> 18.5 (1.4  раза ) Time:  0. 1265   -> 0.092 1.3  раза ) Mem: 14.946 -> 11.99 (1.24  раза ) Demo  сайт +  акселератор Req\s:  26 . 85   ->  42.95  (1. 5  раз ) Time:  0. 0598   -> 0.0 36  1. 6   раз ) Mem:  5 . 794  ->  4.497  (1. 3   раза )
Итого Req\s:  12.29  -> 42.95 Time:  0.12  -> 0.03 Memory: 14.94 -> 4.49 ~ 3.5  раза Используйте акселераторы Кешируйте ресурсоемкие объекты
Сборка  ZF  в один файл Большое количество ресурсоемких операций по подключению файлов http://isalmin.ru/zfp/ Сборка нужных классов занимает 1.4 мегабайта Time - 0.1095 sec  ( Ранее 0.02 ) Memory - 30.558 Mb (Ранее 4.48) После включения  APC Time - 0.01235 sec (Ранее 0.006) Memory - 9.963 Mb (1.423) AB  показал ухудшение до 85 запросов ( ~ 1.5  раза) Вырезание  require_once  из   ZF  также не дало ощутимых результатов
Другие советы от  ZF team Уменьшайте количество путей  в  include_path Добавляйте путь к  ZF  первым Используйте абсолютные пути вместо относительных Используйте PluginLoader include file cache Используйте быстрые адаптеры для языковых данных,  array  и  csv  адаптеры Кешируйте а не считывайте файлы локализации и интернациолизации Определяйте наследника  Zend_View  с часто используемыми функциями Используйте  render  вместо   partial
Замечания Быстрая, гибкая разработка важнее производительности. Тесты теоритические, на реальных проектах все может быть по другому, только экспериментируя и наблюдая за реальным проектом можно существенно улучшить  его производительность То что работает в одном проекте может не работать в другом.
Спасибо за внимание
Контакты Александр Махомет [email_address] http://zendframework.ru

More Related Content

PDF
"Fault tolerant workflow orchestration on PHP", Anton Tsitou
PPTX
PowerShell
PPTX
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
PDF
Олесь Писаренко "Открываем Яндекс.Танк"
PPTX
Java black box profiling
PDF
сервис нагрузочного тестирования Ddosme.ru, иван самсонов
PDF
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
PDF
Vladimir V Perepelitsa Ae Highload
"Fault tolerant workflow orchestration on PHP", Anton Tsitou
PowerShell
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Олесь Писаренко "Открываем Яндекс.Танк"
Java black box profiling
сервис нагрузочного тестирования Ddosme.ru, иван самсонов
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Vladimir V Perepelitsa Ae Highload

What's hot (20)

PDF
Нагрузочное тестирование с помощью Яндекс.Танка
PDF
My talk on monitoring systems at RootConf 2016
PDF
Веб-сервер Phantom
PDF
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
PDF
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
PDF
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
PDF
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
PDF
Thumbtack Expertise Days # 5 - Ansible
PDF
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
PDF
Григорий Липин: Автоматизация нагрузочного тестирования
PDF
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
PDF
Зачем программистам Ansible
PDF
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
PPS
Magento performance
PDF
Консольные приложения на Go
PPTX
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
PPTX
Cпецкурс 2014, занятие 7. Web-приложения
PPTX
Continuous monitoring
PDF
RootConf 2015
PDF
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Нагрузочное тестирование с помощью Яндекс.Танка
My talk on monitoring systems at RootConf 2016
Веб-сервер Phantom
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
Thumbtack Expertise Days # 5 - Ansible
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
Григорий Липин: Автоматизация нагрузочного тестирования
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Зачем программистам Ansible
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Magento performance
Консольные приложения на Go
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Cпецкурс 2014, занятие 7. Web-приложения
Continuous monitoring
RootConf 2015
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Ad

Viewers also liked (20)

PPT
Tools and Crossbar-based nano/CMOS Architectures
PPT
M&A Examining Why So Many Fail to Produce the Shareholder Returns Expected
PPT
Nossa Rotina 2
PPTX
PPT
TEMA 4B IR+A+Infinitive
PDF
Anexos acta ci 121106
PPT
Triangle Gives Back 101 Webinar - 2011
PPTX
Blackbox
PDF
Dia abril
PDF
Plan igualdad champion
PPT
Ebtee Presentation
PDF
Database Systems - Application Development
PDF
Ou Milano
PPT
TEMA 3B PRESENT TENSE of SER and ESTAR
PPT
Album Covers Powerpoint
PDF
ממלחמה זעירה למלחמה סדירה
PPTX
Nmikpowerpoint
PDF
Full MSSQL Injection PWNage
PPT
Engagement Party
Tools and Crossbar-based nano/CMOS Architectures
M&A Examining Why So Many Fail to Produce the Shareholder Returns Expected
Nossa Rotina 2
TEMA 4B IR+A+Infinitive
Anexos acta ci 121106
Triangle Gives Back 101 Webinar - 2011
Blackbox
Dia abril
Plan igualdad champion
Ebtee Presentation
Database Systems - Application Development
Ou Milano
TEMA 3B PRESENT TENSE of SER and ESTAR
Album Covers Powerpoint
ממלחמה זעירה למלחמה סדירה
Nmikpowerpoint
Full MSSQL Injection PWNage
Engagement Party
Ad

Similar to ZFConf 2010: Performance of Zend Framework Applications (20)

PPTX
PHP 5.4: Что нового?
PPT
PHP: SAPI
PPT
Hl2008 Wtf Hl 169
PPT
Console application with ZF 2.0
PPTX
SOA: строим свой service mesh / Иван Круглов (Booking.com)
PPTX
SOA: Строим свой service mesh
PPTX
Пост-эксплуатация веб-приложений в тестах на проникновение
PDF
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
PPT
бегун
PDF
Java Platform Performance BoF
PDF
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
PDF
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
PDF
OpenSource SQL Databases Enter Millions Queries per Second Era
PDF
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
PDF
Другая виртуализация
PDF
HighLoad++ 2019: iptables + consul = :3
PDF
Продвинутое использование Celery — Александр Кошелев
PPTX
мониторинг производительности приложения на PINBA
PPT
бегун
PHP 5.4: Что нового?
PHP: SAPI
Hl2008 Wtf Hl 169
Console application with ZF 2.0
SOA: строим свой service mesh / Иван Круглов (Booking.com)
SOA: Строим свой service mesh
Пост-эксплуатация веб-приложений в тестах на проникновение
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
бегун
Java Platform Performance BoF
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
OpenSource SQL Databases Enter Millions Queries per Second Era
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Другая виртуализация
HighLoad++ 2019: iptables + consul = :3
Продвинутое использование Celery — Александр Кошелев
мониторинг производительности приложения на PINBA
бегун

More from ZFConf Conference (20)

PPTX
ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
PPT
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
PDF
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
PDF
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...
PPTX
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
PDF
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
PDF
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ODP
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
PPT
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
PPTX
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
PPTX
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
PPT
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
PDF
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
PPT
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
PPT
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ODP
ZFConf 2010: Zend Framework and Doctrine
PPT
ZFConf 2010: History of e-Shtab.ru
PPTX
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
PPT
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
PPTX
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: History of e-Shtab.ru
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)

ZFConf 2010: Performance of Zend Framework Applications

  • 1. Zend Framework и производительность Александр Махомет [email_address] 27 марта 2010 г. Санкт-Петербург
  • 2. О докладчике PHP разработчик PHP 5 лет Zend Framework 3 года Создатель сообщества http://zendframework.ru
  • 3. Производительность это мера скорости работы системы.
  • 4. Что тестируем? - Hello World - Demo сайт
  • 5. Приложение “ Hello World” zf create project ZF ~ 67 файлов Приложение ~ 5 файлов Zend_Application, Zend_Loader, Zend_Controller, Zend_View, Zend_Layout, Zend_Filter
  • 6. Приложение « Demo сайт » Базовые функции среднестатистического сайта ZF ~ 1 80 файлов Приложение ~ 34 файла Zend_Application, Zend_Loader, Zend_Controller, Zend_View, Zend_Layout, Zend_Filter Zend_Form, Zend_Db, Zend_Translate, Zend_Cache, Zend_Captcha, Zend_Session
  • 7. Приложение « Demo сайт » Статьи и пользователи Форма, 12 элементов Блоки, 12 штук Плагины для фронтконтроллера Помощники действий Правила маршрутизации
  • 8.  
  • 10. Параметры сервера Intel(R) Core(TM)2 Duo CPU E7200 @ 2.53GHz 2 GB RAM Linux Debian lenny 8 Apache 2.0 PHP 5.2.6 mod_php + Suhosin Patch 0.9.6.2 Mysql 5.0.51a Загрузка ~ 0% Zend Framework 1.10.2 (~ 2700 файлов )
  • 12. Утилиты для тестирования Apache Benchmark Siege Apache Jmeter
  • 13. Apache Benchmark http://httpd.apache.org/docs/2.0/programs/ab.html Простой консольный интерфейс -с – количество одновременных пользователей - n – количество запросов
  • 14. Concurrency Level: 20 Time taken for tests: 1.791 seconds Complete requests: 300 Total transferred: 384900 bytes Requests per second: 167.55 [#/sec] (mean) Time per request: 119.370 [ms] (mean) Percentage of the requests served within a certain time (ms) 50% 108 66% 111 75% 114 80% 115 90% 122 95% 150 98% 200 99% 225 100% 364 (longest request)
  • 15. Siege http://www.joedog.org/index/siege-home Простой консольный интерфейс Возможность тестировать по набору адресов -с – количество одновременных пользователей - r – количество запросов
  • 16. Transactions: 100 hits Availability: 100.00 % Elapsed time: 9.10 secs Data transferred: 0.10 MB Response time: 0.12 secs Transaction rate: 10.99 trans/sec Throughput: 0.01 MB/sec Concurrency: 1.37 Successful transactions: 100 Failed transactions: 0 Longest transaction: 0.55 Shortest transaction: 0.10
  • 17. Apache JMeter http://jakarta.apache.org/jmeter/ Графический интерфейс Широкие возможности Тестирование по access логу Различные планы тестирования Генерация пауз, Pre-Processor и Post-Processor Assertion механизм Различные графические и текстовые отчеты
  • 18.  
  • 19. Наш выбор Apache Benchmark , как простой и эффективный инструмент
  • 20. Xdebug Читабельные сообщения об ошибках Трасировка приложения Профилирование приложения Отладка приложения KCachegrind WinCachegrind Webgrind
  • 21. Акселераторы PHP Сценарий работы PHP скрипта: Чтение файла Генерация байт - кода Выполнение кода Выдача результата Задача акселератора – избавиться от шага 2, путем кеширования байт-кода в памяти или на диске.
  • 22. APC http://pecl.php.net/package/apc От команды PHP, возможно войдет в ядро PHP6 Конфигурация APC 3.0.19 : apc.enabled = 1; apc.shm_size = 30; apc.max_file_size =10M; apc.stat = 1;
  • 23. eAccelerator http://eaccelerator.net/ Версия eAccelerator 0.9.6 eaccelerator.shm_size="16" accelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="0" eaccelerator.shm_prune_period="0" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9"
  • 24. Что замеряем Количество запросов в секунду Apache Benchmark (10-30 тестов ) ab -c 50 -n 500 ab -c 50 -n 300 Время выполнения скрипта ( сек ) - PHP функция microtime (10 тестов) Память выделяемая для скрипта (мб) - PHP функция memory_get_peak_usage
  • 26. Req/s = 57.69 Time = 0.0286 Memory = 4.483 Zend_Application ~ 50% Action_Helper_ViewRenderer ~ 13% Hello world
  • 27. Hello world + Акселераторы Apc : Req/s = 135.39 Time = 0.0067 Memory = 1.423 eAccelerator: Req/s = 138.73 Time = 0.0065 Memory = 1.194
  • 29. Demo сайт Req/s = 12.99 Time = 0.1265 Memory = 14.946 Zend_Application ~ 15%
  • 30. Помощник вида action ~ 30% Zend_Form ~ 16%
  • 31. Замена action Помощник действия ActionStack : Req/s = 1 3 . 28 Time = 0.12647 Memory = 14.791 Свои помощники вида: Req/s = 14.41 Time = 0.1148 Memory = 14.45 ~ на 10 % уменьшили нагрузку
  • 32. Zend_Cache Поддержка различных бекэнд и фронтэнд адаптеров Кэширование на уровне функций, классов, файлов, страниц APC, Memcache, File, Sqlite и другие бэкенды Кешированние метаданных Zend_Db_Table Zend_Db_Table_Abstract::setDefaultMetadataCache
  • 33. Кэшируем форму Req/s = 17.2 Time = 0.0968 Memory = 13.141 ZF – 165 файлов
  • 34. Отключаем ViewRenderer Zend_Layout и Zend_Form используют ViewRenderer $front->setParam('noViewRenderer', true); … $view = new Zend_View(); $view->setBasePath(APPLICATION_PATH . '/views/'); $layout->setView($view); … $ form ->setView($v);
  • 35. Результаты Req/s = 17. 9 Time = 0.0959 Memory = 12.551 Небольшой прирост
  • 36. Отключаем Zend_Application Заменяем самописным класом Req/s = 18.5 Time = 0.0923 Memory = 11.999
  • 37. Все тесты Тест 1 Тест 2 Тест 3 Тест 4 Тест 5 Тест 6 Req/s 12.99 13.28 14.41 17.2 17.9 18.5 Time 0.1265 0.12647 0.1148 0.0968 0.0959 0.0923 Mem 14.946 14.791 14.45 13.141 12.551 11.999
  • 38. Все тесты + APC Тест 1 Тест 2 Тест 3 Тест 4 Тест 5 Тест 6 Req/s 26.8575 27.295 32.5375 4 1 .95 4 2 . 01 4 2 . 95 Time 0.05986 0.05947 0.04891 0.03768 0.03 6 1 0.03 6 23 Mem 5.794 5.571 5.306 4.854 4.669 4.497
  • 39. Все результаты Hello world Req\s: 57.69 -> 138.73 (2.4 раза ) Time: 0.286 -> 0.0065 (4.4 раза ) Mem: 4.483 -> 1.194 (3.7 раз ) Demo сайт без акселератора Req\s: 12.29 -> 18.5 (1.4 раза ) Time: 0. 1265 -> 0.092 1.3 раза ) Mem: 14.946 -> 11.99 (1.24 раза ) Demo сайт + акселератор Req\s: 26 . 85 -> 42.95 (1. 5 раз ) Time: 0. 0598 -> 0.0 36 1. 6 раз ) Mem: 5 . 794 -> 4.497 (1. 3 раза )
  • 40. Итого Req\s: 12.29 -> 42.95 Time: 0.12 -> 0.03 Memory: 14.94 -> 4.49 ~ 3.5 раза Используйте акселераторы Кешируйте ресурсоемкие объекты
  • 41. Сборка ZF в один файл Большое количество ресурсоемких операций по подключению файлов http://isalmin.ru/zfp/ Сборка нужных классов занимает 1.4 мегабайта Time - 0.1095 sec ( Ранее 0.02 ) Memory - 30.558 Mb (Ранее 4.48) После включения APC Time - 0.01235 sec (Ранее 0.006) Memory - 9.963 Mb (1.423) AB показал ухудшение до 85 запросов ( ~ 1.5 раза) Вырезание require_once из ZF также не дало ощутимых результатов
  • 42. Другие советы от ZF team Уменьшайте количество путей в include_path Добавляйте путь к ZF первым Используйте абсолютные пути вместо относительных Используйте PluginLoader include file cache Используйте быстрые адаптеры для языковых данных, array и csv адаптеры Кешируйте а не считывайте файлы локализации и интернациолизации Определяйте наследника Zend_View с часто используемыми функциями Используйте render вместо partial
  • 43. Замечания Быстрая, гибкая разработка важнее производительности. Тесты теоритические, на реальных проектах все может быть по другому, только экспериментируя и наблюдая за реальным проектом можно существенно улучшить его производительность То что работает в одном проекте может не работать в другом.
  • 45. Контакты Александр Махомет [email_address] http://zendframework.ru