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. Phalcon. Что нового?
    Александр Торош
    Веб-студия «WeZoom»
    [email protected]

    View Slide

  2. Годом ранее…
    PHP Frameworks Day
    12 октября 2013
    Phalcon - cамый быстрый PHP Framework.
    Разработка highload проекта
    http://frameworksdays.com/event/php-frameworks-
    day-2013/review/Phalcon-PHP-Framework

    View Slide

  3. План доклада
    1. Рост популярности Phalcon
    2. Изменения в Phalcon версии 1.x
    3. Обзор популярных разработок
    4. Gazeta.ua после перехода на Phalcon
    5. Yona CMS, особенности, модули
    6. Практические приёмы работы с Phalcon
    7. Трудности работы с Phalcon
    8. Phalcon 2, Zephir

    View Slide

  4. Считаем Stars на Github у популярных фреймворков
    Рост популярности Phalcon

    View Slide

  5. Поддержка хостингами и облачными сервисами
    Рост популярности Phalcon

    View Slide

  6. Built with Phalcon – http://builtwith.phalconphp.com
    Рост популярности Phalcon

    View Slide

  7. Компании, студии, программисты, фрилансеры,
    которые начали использовать Phalcon
    • http://lezgro.com/
    • http://wezoom.net/
    • http://www.kiwisoft.co.uk/
    • http://www.robertbojor.com/
    • https://jream.com/
    Рост популярности Phalcon

    View Slide

  8. Фан-сайты по Phalcon
    Группа VK –
    https://vk.com/phalconphp
    Постоянные новости и
    анонсы из мира Phalcon.
    Обзор свежих разработок.
    Обсуждения.
    Рост популярности Phalcon

    View Slide

  9. Фан-сайты по Phalcon
    Phalconist – каталог ресурсов для
    фреймворка Phalcon.
    http://phalconist.com/
    Количество размещенных проектов: 167
    Рост популярности Phalcon

    View Slide

  10. Изменения за год (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

    View Slide

  11. Изменения за год (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

    View Slide

  12. Изменения за год (Oct 2013 – Nov 2014) 1.2.4 1.3.4
    • Отработано около 475 багрепортов на github
    • Исправлено большое количество ошибок, в том числе
    критических
    • Исправлено большинство известных утечек памяти
    • Сделано множество улучшений API
    • Сделаны различные оптимизации фреймворка на
    уровне Си
    • В общем – все стало еще лучше
    Изменения в Phalcon версии 1.x

    View Slide

  13. Phalcon Eye
    CMS написана на Phalcon http://phalconeye.com/
    Автор: Иван Воронцов
    Особенности:
     Управление пакетами
     Визуальный конструктор страниц
     Менеджер навигационного меню
     Управление языками и переводами
    Популярные разработки на Phalcon

    View Slide

  14. Phalcon Eye – Pages
    Популярные разработки на Phalcon

    View Slide

  15. Phalcon Eye – Pages
    Популярные разработки на Phalcon

    View Slide

  16. Phosphorum – движок форума на
    Phalcon. Используется официальным
    комьюнити Phalcon фреймворка.
    https://github.com/phalcon/forum
    http://forum.phalconphp.com/
    Популярные разработки на Phalcon

    View Slide

  17. Vegas-CMF – открытая система
    управления контентом на Phalcon.
    Разбита на отдельные составляющие
    и модули
    http://vegas-cmf.github.io/
    https://github.com/vegas-cmf
    Популярные разработки на Phalcon

    View Slide

  18. Схема работы на ZF1:
    Для увеличения производительности,
    приходилось использовать HTTP-прокси:
    Varnish → Nginx → Полностраничный
    кеш(APC) → ZF1
    А также допиливать ZF1 MVC …
    Схема работы на Phalcon:
    Nginx → Phalcon
    Gazeta.ua после перехода на Phalcon

    View Slide

  19. Тестирование 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

    View Slide

  20. 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
    Скорость загрузки, мс

    View Slide

  21. Gazeta.ua после перехода на Phalcon
    Firebug, ожидание ответа сервера
    (php-слой, без БД)
    gazeta.ua zf1 gazeta.ua phalcon yona-cms phalcon
    мс 210 50 20
    0
    50
    100
    150
    200
    250
    Скорость загрузки, мс

    View Slide

  22. 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
    Кол-во запросов в секунду

    View Slide

  23. Были ли преимущества от перехода?
    Однозначно ДА!
    Преимущества:
    • Отказ от HTTP-прокси (Varnish);
    • Отказ от полностраничного APC-кеша;
    • Данные отказы позволили ускорить написание нового
    функционала, без привязки к ним;
    • Рефакторинг всего существующего функционала;
    • Увеличение скорости отдачи страниц сервером
    ~ в 4 раза;
    • Увеличение устойчивости портала при высоких
    нагрузках ~ в 5 раз;
    Gazeta.ua после перехода на Phalcon

    View Slide

  24. Yona CMS
    http://yonacms.com/
    Автор: Александр Торош
    CMS/CMF система на Phalcon. Имеет удобную
    модульную структуру. Предназначена для
    разработки простых сайтов, так и крупных порталов
    и веб-приложений.
    Благодаря не сложной конфигурации и простой
    архитектуре, может быть легко модифицирована
    под любую задачу.
    - особенности, модули

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  29. Модульная структура
    Общий вид проекта
    - особенности, модули

    View Slide

  30. Модульная структура
    Директория приложения app
    - особенности, модули

    View Slide

  31. Модульная структура
    Конфигурационные файлы
    - особенности, модули

    View Slide

  32. Модульная структура
    Модули приложения
    - особенности, модули

    View Slide

  33. Модульная структура
    Структура модуля и его шаблоны View
    - особенности, модули

    View Slide

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

    View Slide

  35. Модуль 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();

    View Slide

  36. Планы на ближайшее будущее:
    • Простая инсталяция и развертывание проекта;
    • Полноценный конфигурационный модуль для CMS;
    • Кодогенерация прямо из админки: модулей, CRUD;
    • Миграции БД;
    • Управление подключаемыми модулями;
    • Создание набора модулей для интернет-магазина;
    • Написание полноценной документации на русском и
    английском языках;
    • Покритие тестами;
    - особенности, модули

    View Slide

  37. Helper
    yona-cms / app / Bootstrap.php
    $di->set('helper', new \Application\Mvc\Helper());
    Практические приёмы работы с Phalcon

    View Slide

  38. 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

    View Slide

  39. Helper. Как этим пользоваться?
    Шаблон volt
    {{ helper.translate('Привет мир!') }}
    Controller
    $this->helper->translate('Привет мир!');
    Доступ через DI-контейнер
    $helper = $this->getDi()->get('helper');
    $helper->translate('Привет мир!');
    Практические приёмы работы с Phalcon

    View Slide

  40. 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

    View Slide

  41. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  47. Спасибо за внимание!
    Александр Торош
    Веб-студия «WeZoom»
    wezoom.net
    [email protected]
    Тел: (044) 221-65-78
    (096) 989-08-28
    (063) 787-22-36

    View Slide