Download - Phalcon. Что нового?
Годом ранее…
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
Считаем Stars на Github у популярных фреймворков
Рост популярности Phalcon
Поддержка хостингами и облачными сервисами
Рост популярности Phalcon
Built with Phalcon – http://builtwith.phalconphp.com
Рост популярности Phalcon
Компании, студии, программисты, фрилансеры, которые начали использовать 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
Phalcon Eye – Pages
Популярные разработки на Phalcon
Phalcon Eye – Pages
Популярные разработки на 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
Ско
ро
сть
загр
узки
, мс
Gazeta.ua после перехода на Phalcon
Firebug, ожидание ответа сервера (php-слой, без БД)
gazeta.ua zf1 gazeta.ua phalcon yona-cms phalcon
мс 210 50 20
0
50
100
150
200
250
Ско
ро
сть
загр
узки
, мс
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
Ко
л-в
о з
апр
осо
в в
секу
нд
у
Были ли преимущества от перехода? Однозначно ДА!
Преимущества:
• Отказ от 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-файлы
- особенности, модули
Перечень готовых модулей:
• CMS – конфигурация;
• Admin – авторизация и админпанель;
• FileManager – файловый менеджер;
• Image – хранилище изображений;
• Page – статические страницы;
• Publication – динамические публикации (новости,
статьи, блог - можно создавать новые типы);
• SEO – модификация title, meta-тегов для любой
страницы веб-приложения;
• Slider – настраиваемые «слайдеры»;
• Widget – статические HTML виджеты;
- особенности, модули
Модульная структура
Общий вид проекта
- особенности, модули
Модульная структура
Директория приложения app
- особенности, модули
Модульная структура
Конфигурационные файлы
- особенности, модули
Модульная структура
Модули приложения
- особенности, модули
Модульная структура
Структура модуля и его шаблоны View
- особенности, модули
Модуль Image, особенности:
• Позволяет хранить изображения и нарезать их по
заданным параметрам;
• Схема директорий для хранения файлов рассчитана
таким образом, что в одной папке не может быть
более чем 1000 файлов;
• Нарезанные изображения кешируются в виде
JPEG-файлов;
• Система защиты от параллельной генерации кеша
определенного изображения (lock/unlock);
• Используется компонент Phalcon\Image
- особенности, модули
Модуль 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();
Планы на ближайшее будущее:
• Простая инсталяция и развертывание проекта;
• Полноценный конфигурационный модуль для CMS;
• Кодогенерация прямо из админки: модулей, CRUD;
• Миграции БД;
• Управление подключаемыми модулями;
• Создание набора модулей для интернет-магазина;
• Написание полноценной документации на русском и
английском языках;
• Покритие тестами;
- особенности, модули
Helper
yona-cms / app / Bootstrap.php
$di->set('helper', new \Application\Mvc\Helper());
Практические приёмы работы с Phalcon
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 для каждого модуля отдельно 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
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 возможно и даже нужно!
Выводы
Спасибо за внимание!
Александр Торош Веб-студия «WeZoom»
wezoom.net
Тел: (044) 221-65-78 (096) 989-08-28 (063) 787-22-36