Годом ранее… PHP Frameworks Day 12 октября 2013 Phalcon - cамый быстрый PHP Framework. Разработка highload проекта http://frameworksdays.com/event/php-frameworks- day-2013/review/Phalcon-PHP-Framework
План доклада 1. Рост популярности Phalcon 2. Изменения в Phalcon версии 1.x 3. Обзор популярных разработок 4. Gazeta.ua после перехода на Phalcon 5. Yona CMS, особенности, модули 6. Практические приёмы работы с Phalcon 7. Трудности работы с Phalcon 8. Phalcon 2, Zephir
Компании, студии, программисты, фрилансеры, которые начали использовать Phalcon • http://lezgro.com/ • http://wezoom.net/ • http://www.kiwisoft.co.uk/ • http://www.robertbojor.com/ • https://jream.com/ Рост популярности Phalcon
Фан-сайты по Phalcon Группа VK – https://vk.com/phalconphp Постоянные новости и анонсы из мира Phalcon. Обзор свежих разработок. Обсуждения. Рост популярности Phalcon
Фан-сайты по Phalcon Phalconist – каталог ресурсов для фреймворка Phalcon. http://phalconist.com/ Количество размещенных проектов: 167 Рост популярности Phalcon
Изменения за год (Oct 2013 – Nov 2014) 1.2.4 1.3.4 • Новый компонент Phalcon\Image • Phalcon\Config: добавлены адаптеры Json, Yaml • Phalcon\Translate: добавлен адаптер Gettext • Phalcon\Session: добавлены адаптеры Memcache, Libemcached • Phalcon\Cache: - Поддержка Libmemcached и APCu 4.0.2+ - Добавлены методы increment(), decrement(), flush() Изменения в Phalcon версии 1.x
Изменения за год (Oct 2013 – Nov 2014) 1.2.4 1.3.4 • Phalcon\Db: добавлена поддержка типов данных DECIMAL, DOUBLE, BOOLEAN, POINT • Phalcon\Forms: добавлен элемент Radio • Phalcon\Logger: добавлен адаптер FirePHP • Phalcon\Tag: - Добавлены пропущенные варианты type для элемента input в соответствии с HTML5 - Добавлен метод setTitleSeparator() - лично по моей просьбе Изменения в Phalcon версии 1.x
Изменения за год (Oct 2013 – Nov 2014) 1.2.4 1.3.4 • Отработано около 475 багрепортов на github • Исправлено большое количество ошибок, в том числе критических • Исправлено большинство известных утечек памяти • Сделано множество улучшений API • Сделаны различные оптимизации фреймворка на уровне Си • В общем – все стало еще лучше Изменения в Phalcon версии 1.x
Phalcon Eye CMS написана на Phalcon http://phalconeye.com/ Автор: Иван Воронцов Особенности: Управление пакетами Визуальный конструктор страниц Менеджер навигационного меню Управление языками и переводами Популярные разработки на Phalcon
Phosphorum – движок форума на Phalcon. Используется официальным комьюнити Phalcon фреймворка. https://github.com/phalcon/forum http://forum.phalconphp.com/ Популярные разработки на Phalcon
Vegas-CMF – открытая система управления контентом на Phalcon. Разбита на отдельные составляющие и модули http://vegas-cmf.github.io/ https://github.com/vegas-cmf Популярные разработки на Phalcon
Схема работы на ZF1: Для увеличения производительности, приходилось использовать HTTP-прокси: Varnish → Nginx → Полностраничный кеш(APC) → ZF1 А также допиливать ZF1 MVC … Схема работы на Phalcon: Nginx → Phalcon Gazeta.ua после перехода на Phalcon
Тестирование PHP-слоя Проводилось на локальной машине: Core 2 Duo 2.04 GHz 4Gb RAM Linux Mint 14 Nadia MATE 64-bit Apache 2.2.22 PHP 5.4.6 • Был исключен фактор запросов к БД • Без Varnish • Без полностраничного APC-кеша Gazeta.ua после перехода на Phalcon
Gazeta.ua после перехода на Phalcon Данные по Xdebug (php-слой, без БД) gazeta.ua zf1 gazeta.ua phalcon yona-cms phalcon мс 834 81 27 0 100 200 300 400 500 600 700 800 900 Скорость загрузки, мс
Были ли преимущества от перехода? Однозначно ДА! Преимущества: • Отказ от HTTP-прокси (Varnish); • Отказ от полностраничного APC-кеша; • Данные отказы позволили ускорить написание нового функционала, без привязки к ним; • Рефакторинг всего существующего функционала; • Увеличение скорости отдачи страниц сервером ~ в 4 раза; • Увеличение устойчивости портала при высоких нагрузках ~ в 5 раз; Gazeta.ua после перехода на Phalcon
Yona CMS http://yonacms.com/ Автор: Александр Торош CMS/CMF система на Phalcon. Имеет удобную модульную структуру. Предназначена для разработки простых сайтов, так и крупных порталов и веб-приложений. Благодаря не сложной конфигурации и простой архитектуре, может быть легко модифицирована под любую задачу. - особенности, модули
Yona CMS позволяет значительно экономить время в стартовом развертывании необходимого базового функционала для любого проекта. На модульной структуре этой CMS уже успешно запущено более 10 проектов, среди которых Gazeta.ua - особенности, модули
Особенности: • Модульная структура с удобной иерархией, которая основана на namespace; • Каждый модуль может выступать как отдельный независимый компонент. Иметь свои маршруты, хелперы, less, css, js файлы; • Управление языками (в неограниченном количестве) и переводами прямо из админки; • AJAX-переходы по сайту со сменой URL в браузере из коробки. Без ущерба SEO; - особенности, модули
Особенности: • Модуль хранения и нарезки изображений Image; • Гибкий SEO-модуль; • Простота, интуитивная понятность админ. управления в модулях. Без сложностей и «переоптимизаций»; • Интерфейс админки построен на Semantic UI; • Стили интерфейса построены на LESS • Автоматическая минификация и сборка в единые assets-файлы - особенности, модули
Модуль Image, особенности: • Позволяет хранить изображения и нарезать их по заданным параметрам; • Схема директорий для хранения файлов рассчитана таким образом, что в одной папке не может быть более чем 1000 файлов; • Нарезанные изображения кешируются в виде JPEG-файлов; • Система защиты от параллельной генерации кеша определенного изображения (lock/unlock); • Используется компонент Phalcon\Image - особенности, модули
Модуль Image, пример использования: - особенности, модули $imageStorage = new \Image\Storage(array( ‘id’ => 256, // ID объекта в БД, например publication ‘type’ => ‘publication’, // тип ‘width’ => ‘300’ // ширина изображения )); // рендеринг HTML-тега изображения echo $imageStorage->imageHtml(); // Относительный путь к кешированному изображению шириной 300px $cached_src = $imageStorage->cachedRelPath(); // Абсолютный путь к оригиналу изображения $original_src = $imageStorage->originalAbsPath();
Планы на ближайшее будущее: • Простая инсталяция и развертывание проекта; • Полноценный конфигурационный модуль для CMS; • Кодогенерация прямо из админки: модулей, CRUD; • Миграции БД; • Управление подключаемыми модулями; • Создание набора модулей для интернет-магазина; • Написание полноценной документации на русском и английском языках; • Покритие тестами; - особенности, модули
Helper yona-cms / app / modules / Application / Mvc / Helper.php class Helper extends \Phalcon\Mvc\User\Component { public function translate($string, $placeholders = null) { if (!$this->translate) { $this->translate = $this->getDi()->get('translate'); } return $this->translate->query($string, $placeholders); } // Сюда можно добавить любые другие необходимые вам методы } Практические приёмы работы с Phalcon
Helper. Как этим пользоваться? Шаблон volt {{ helper.translate('Привет мир!') }} Controller $this->helper->translate('Привет мир!'); Доступ через DI-контейнер $helper = $this->getDi()->get('helper'); $helper->translate('Привет мир!'); Практические приёмы работы с Phalcon
Routes для каждого модуля отдельно yona-cms / app / Bootstrap.php $router = new \Application\Mvc\Router\DefaultRouter(); $router->setDi($di); foreach ($application->getModules() as $module) { $routesClassName = str_replace('Module', 'Routes', $module['className']); if (class_exists($routesClassName)) { $routesClass = new $routesClassName(); $router = $routesClass->init($router); } } $di->set('router', $router); Практические приёмы работы с Phalcon
Routes для каждого модуля отдельно Параметр $route, что передается в метод init() - это объект \Phalcon\Mvc\Router Вы можете использовать любые инициализации из документации http://docs.phalconphp.com/en/latest/api/Phalcon_Mvc_Ro uter.html … а также методы addPost(), addPut(), addDelete() … Т.е. строить удобные модульные RESTful приложения Практические приёмы работы с Phalcon
• На разных аппаратных архитектурах могут возникать segfault ошибки и утечки памяти при работе с определенными функциями. • В ORM работа с Relations влечет за собой дополнительные запросы, что не совсем удобно. • Слой View по сравнению с другими популярными фреймворками достаточно бедный в своих возможностях. Радует то, что разработчики обещают все исправить и сделать фреймворк лучше Трудности работы с Phalcon
Особенности второй версии Phalcon: • Написан на Zephir. Это компилируемый язык высокого уровня, предназначен для облегчения создания и сопровождения расширений для PHP с акцентом на безопасность памяти. • Еще более производительный, чем первая версия • Обратная совместимость с Phalcon 1.3.x • Все тесты мигрированы на Codeception • Вносить вклад в развитие фреймворка становиться легче Phalcon 2
Уже доступна Beta 3. Изменения: • Phalcon 2.0 теперь на 100% проходит тесты Phalcon 1.* • Благодаря «Zephir» новое ядро более полно проверяет соответствие классов и типов, вызывая более подробные сообщения о несоответствиях. • Язык «Zephir» так же более точно и полно выдаёт информацию об исключениях и их параметрах. • Phalcon 2 вообще более лучше работает с разными типами ошибок и исключениями. • Новое ядро использует оптимизации из PHP 5.6, что, непременно, благоприятно сказывается на производительности. Если вы используете версию PHP ниже, все будет работать, но без этих оптимизаций. Phalcon 2
• Phalcon стремительно набирает популярность в мире веб-разработки и уверенно занимает собственную нишу; • Phalcon постоянно избавляется от своих «детских болезней» и становиться лучше; • С разработкой Phalcon 2 и Zephir вносить вклад в развитие фреймворка становиться намного легче; • Zephir позволяет нам заглянуть «под капод» фреймворка, более детально изучить принцип работы; • Делать хорошие, быстрые production приложения на Phalcon возможно и даже нужно! Выводы