Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Phalcon. Что нового? Александр Торош

fwdays
November 18, 2014

Phalcon. Что нового? Александр Торош

fwdays

November 18, 2014
Tweet

More Decks by fwdays

Other Decks in Programming

Transcript

  1. Годом ранее… PHP Frameworks Day 12 октября 2013 Phalcon -

    cамый быстрый PHP Framework. Разработка highload проекта http://frameworksdays.com/event/php-frameworks- day-2013/review/Phalcon-PHP-Framework
  2. План доклада 1. Рост популярности Phalcon 2. Изменения в Phalcon

    версии 1.x 3. Обзор популярных разработок 4. Gazeta.ua после перехода на Phalcon 5. Yona CMS, особенности, модули 6. Практические приёмы работы с Phalcon 7. Трудности работы с Phalcon 8. Phalcon 2, Zephir
  3. Компании, студии, программисты, фрилансеры, которые начали использовать Phalcon • http://lezgro.com/

    • http://wezoom.net/ • http://www.kiwisoft.co.uk/ • http://www.robertbojor.com/ • https://jream.com/ Рост популярности Phalcon
  4. Фан-сайты по Phalcon Группа VK – https://vk.com/phalconphp Постоянные новости и

    анонсы из мира Phalcon. Обзор свежих разработок. Обсуждения. Рост популярности Phalcon
  5. Фан-сайты по Phalcon Phalconist – каталог ресурсов для фреймворка Phalcon.

    http://phalconist.com/ Количество размещенных проектов: 167 Рост популярности Phalcon
  6. Изменения за год (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
  7. Изменения за год (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
  8. Изменения за год (Oct 2013 – Nov 2014) 1.2.4 1.3.4

    • Отработано около 475 багрепортов на github • Исправлено большое количество ошибок, в том числе критических • Исправлено большинство известных утечек памяти • Сделано множество улучшений API • Сделаны различные оптимизации фреймворка на уровне Си • В общем – все стало еще лучше Изменения в Phalcon версии 1.x
  9. Phalcon Eye CMS написана на Phalcon http://phalconeye.com/ Автор: Иван Воронцов

    Особенности:  Управление пакетами  Визуальный конструктор страниц  Менеджер навигационного меню  Управление языками и переводами Популярные разработки на Phalcon
  10. Phosphorum – движок форума на Phalcon. Используется официальным комьюнити Phalcon

    фреймворка. https://github.com/phalcon/forum http://forum.phalconphp.com/ Популярные разработки на Phalcon
  11. Vegas-CMF – открытая система управления контентом на Phalcon. Разбита на

    отдельные составляющие и модули http://vegas-cmf.github.io/ https://github.com/vegas-cmf Популярные разработки на Phalcon
  12. Схема работы на ZF1: Для увеличения производительности, приходилось использовать HTTP-прокси:

    Varnish → Nginx → Полностраничный кеш(APC) → ZF1 А также допиливать ZF1 MVC … Схема работы на Phalcon: Nginx → Phalcon Gazeta.ua после перехода на Phalcon
  13. Тестирование 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
  14. 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 Скорость загрузки, мс
  15. Gazeta.ua после перехода на Phalcon Firebug, ожидание ответа сервера (php-слой,

    без БД) gazeta.ua zf1 gazeta.ua phalcon yona-cms phalcon мс 210 50 20 0 50 100 150 200 250 Скорость загрузки, мс
  16. Gazeta.ua после перехода на Phalcon ab -c 1000 -n 10

    (php-слой, без БД) gazeta.ua zf1 gazeta.ua phalcon yona-cms phalcon req/s 10,27 52,45 108,01 0,00 20,00 40,00 60,00 80,00 100,00 120,00 Кол-во запросов в секунду
  17. Были ли преимущества от перехода? Однозначно ДА! Преимущества: • Отказ

    от HTTP-прокси (Varnish); • Отказ от полностраничного APC-кеша; • Данные отказы позволили ускорить написание нового функционала, без привязки к ним; • Рефакторинг всего существующего функционала; • Увеличение скорости отдачи страниц сервером ~ в 4 раза; • Увеличение устойчивости портала при высоких нагрузках ~ в 5 раз; Gazeta.ua после перехода на Phalcon
  18. Yona CMS http://yonacms.com/ Автор: Александр Торош CMS/CMF система на Phalcon.

    Имеет удобную модульную структуру. Предназначена для разработки простых сайтов, так и крупных порталов и веб-приложений. Благодаря не сложной конфигурации и простой архитектуре, может быть легко модифицирована под любую задачу. - особенности, модули
  19. Yona CMS позволяет значительно экономить время в стартовом развертывании необходимого

    базового функционала для любого проекта. На модульной структуре этой CMS уже успешно запущено более 10 проектов, среди которых Gazeta.ua - особенности, модули
  20. Особенности: • Модульная структура с удобной иерархией, которая основана на

    namespace; • Каждый модуль может выступать как отдельный независимый компонент. Иметь свои маршруты, хелперы, less, css, js файлы; • Управление языками (в неограниченном количестве) и переводами прямо из админки; • AJAX-переходы по сайту со сменой URL в браузере из коробки. Без ущерба SEO; - особенности, модули
  21. Особенности: • Модуль хранения и нарезки изображений Image; • Гибкий

    SEO-модуль; • Простота, интуитивная понятность админ. управления в модулях. Без сложностей и «переоптимизаций»; • Интерфейс админки построен на Semantic UI; • Стили интерфейса построены на LESS • Автоматическая минификация и сборка в единые assets-файлы - особенности, модули
  22. Перечень готовых модулей: • CMS – конфигурация; • Admin –

    авторизация и админпанель; • FileManager – файловый менеджер; • Image – хранилище изображений; • Page – статические страницы; • Publication – динамические публикации (новости, статьи, блог - можно создавать новые типы); • SEO – модификация title, meta-тегов для любой страницы веб-приложения; • Slider – настраиваемые «слайдеры»; • Widget – статические HTML виджеты; - особенности, модули
  23. Модуль Image, особенности: • Позволяет хранить изображения и нарезать их

    по заданным параметрам; • Схема директорий для хранения файлов рассчитана таким образом, что в одной папке не может быть более чем 1000 файлов; • Нарезанные изображения кешируются в виде JPEG-файлов; • Система защиты от параллельной генерации кеша определенного изображения (lock/unlock); • Используется компонент Phalcon\Image - особенности, модули
  24. Модуль Image, пример использования: - особенности, модули $imageStorage = new

    \Image\Storage(array( ‘id’ => 256, // ID объекта в БД, например publication ‘type’ => ‘publication’, // тип ‘width’ => ‘300’ // ширина изображения )); // рендеринг HTML-тега изображения <img src=“***” alt=“***”> echo $imageStorage->imageHtml(); // Относительный путь к кешированному изображению шириной 300px $cached_src = $imageStorage->cachedRelPath(); // Абсолютный путь к оригиналу изображения $original_src = $imageStorage->originalAbsPath();
  25. Планы на ближайшее будущее: • Простая инсталяция и развертывание проекта;

    • Полноценный конфигурационный модуль для CMS; • Кодогенерация прямо из админки: модулей, CRUD; • Миграции БД; • Управление подключаемыми модулями; • Создание набора модулей для интернет-магазина; • Написание полноценной документации на русском и английском языках; • Покритие тестами; - особенности, модули
  26. 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
  27. Helper. Как этим пользоваться? Шаблон volt {{ helper.translate('Привет мир!') }}

    Controller $this->helper->translate('Привет мир!'); Доступ через DI-контейнер $helper = $this->getDi()->get('helper'); $helper->translate('Привет мир!'); Практические приёмы работы с Phalcon
  28. 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
  29. Routes для каждого модуля отдельно yona-cms / app / modules

    / Page / Routes.php class Routes { public function init(\Phalcon\Mvc\Router $router) { $router->add('/{slug:[a-z0-9_-]+}.html', array( 'module' => 'page', 'controller' => 'index', 'action' => 'index' ))->setName('page'); return $router; } } Практические приёмы работы с Phalcon
  30. Routes для каждого модуля отдельно Параметр $route, что передается в

    метод init() - это объект \Phalcon\Mvc\Router Вы можете использовать любые инициализации из документации http://docs.phalconphp.com/en/latest/api/Phalcon_Mvc_Ro uter.html … а также методы addPost(), addPut(), addDelete() … Т.е. строить удобные модульные RESTful приложения Практические приёмы работы с Phalcon
  31. • На разных аппаратных архитектурах могут возникать segfault ошибки и

    утечки памяти при работе с определенными функциями. • В ORM работа с Relations влечет за собой дополнительные запросы, что не совсем удобно. • Слой View по сравнению с другими популярными фреймворками достаточно бедный в своих возможностях. Радует то, что разработчики обещают все исправить и сделать фреймворк лучше Трудности работы с Phalcon
  32. Особенности второй версии Phalcon: • Написан на Zephir. Это компилируемый

    язык высокого уровня, предназначен для облегчения создания и сопровождения расширений для PHP с акцентом на безопасность памяти. • Еще более производительный, чем первая версия • Обратная совместимость с Phalcon 1.3.x • Все тесты мигрированы на Codeception • Вносить вклад в развитие фреймворка становиться легче Phalcon 2
  33. Уже доступна Beta 3. Изменения: • Phalcon 2.0 теперь на

    100% проходит тесты Phalcon 1.* • Благодаря «Zephir» новое ядро более полно проверяет соответствие классов и типов, вызывая более подробные сообщения о несоответствиях. • Язык «Zephir» так же более точно и полно выдаёт информацию об исключениях и их параметрах. • Phalcon 2 вообще более лучше работает с разными типами ошибок и исключениями. • Новое ядро использует оптимизации из PHP 5.6, что, непременно, благоприятно сказывается на производительности. Если вы используете версию PHP ниже, все будет работать, но без этих оптимизаций. Phalcon 2
  34. • Phalcon стремительно набирает популярность в мире веб-разработки и уверенно

    занимает собственную нишу; • Phalcon постоянно избавляется от своих «детских болезней» и становиться лучше; • С разработкой Phalcon 2 и Zephir вносить вклад в развитие фреймворка становиться намного легче; • Zephir позволяет нам заглянуть «под капод» фреймворка, более детально изучить принцип работы; • Делать хорошие, быстрые production приложения на Phalcon возможно и даже нужно! Выводы