phalcon. Что нового?

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

Upload: oleksandr-torosh

Post on 16-Jul-2015

704 views

Category:

Software


8 download

TRANSCRIPT

Page 1: Phalcon. Что нового?

Phalcon. Что нового?

Александр Торош

Веб-студия «WeZoom»

[email protected]

Page 3: Phalcon. Что нового?

План доклада

1. Рост популярности Phalcon

2. Изменения в Phalcon версии 1.x

3. Обзор популярных разработок

4. Gazeta.ua после перехода на Phalcon

5. Yona CMS, особенности, модули

6. Практические приёмы работы с Phalcon

7. Трудности работы с Phalcon

8. Phalcon 2, Zephir

Page 4: Phalcon. Что нового?

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

Рост популярности Phalcon

Page 5: Phalcon. Что нового?

Поддержка хостингами и облачными сервисами

Рост популярности Phalcon

Page 6: Phalcon. Что нового?

Built with Phalcon – http://builtwith.phalconphp.com

Рост популярности Phalcon

Page 7: Phalcon. Что нового?

Компании, студии, программисты, фрилансеры, которые начали использовать Phalcon

• http://lezgro.com/

• http://wezoom.net/

• http://www.kiwisoft.co.uk/

• http://www.robertbojor.com/

• https://jream.com/

Рост популярности Phalcon

Page 8: Phalcon. Что нового?

Фан-сайты по Phalcon

Группа VK –

https://vk.com/phalconphp

Постоянные новости и

анонсы из мира Phalcon.

Обзор свежих разработок.

Обсуждения.

Рост популярности Phalcon

Page 9: Phalcon. Что нового?

Фан-сайты по Phalcon

Phalconist – каталог ресурсов для

фреймворка Phalcon.

http://phalconist.com/

Количество размещенных проектов: 167

Рост популярности Phalcon

Page 10: 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

Page 11: Phalcon. Что нового?

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

Page 12: Phalcon. Что нового?

Изменения за год (Oct 2013 – Nov 2014) 1.2.4 1.3.4

• Отработано около 475 багрепортов на github

• Исправлено большое количество ошибок, в том числе

критических

• Исправлено большинство известных утечек памяти

• Сделано множество улучшений API

• Сделаны различные оптимизации фреймворка на

уровне Си

• В общем – все стало еще лучше

Изменения в Phalcon версии 1.x

Page 13: Phalcon. Что нового?

Phalcon Eye

CMS написана на Phalcon http://phalconeye.com/

Автор: Иван Воронцов

Особенности:

Управление пакетами

Визуальный конструктор страниц

Менеджер навигационного меню

Управление языками и переводами

Популярные разработки на Phalcon

Page 14: Phalcon. Что нового?

Phalcon Eye – Pages

Популярные разработки на Phalcon

Page 15: Phalcon. Что нового?

Phalcon Eye – Pages

Популярные разработки на Phalcon

Page 16: Phalcon. Что нового?

Phosphorum – движок форума на

Phalcon. Используется официальным

комьюнити Phalcon фреймворка.

https://github.com/phalcon/forum

http://forum.phalconphp.com/

Популярные разработки на Phalcon

Page 17: Phalcon. Что нового?

Vegas-CMF – открытая система

управления контентом на Phalcon.

Разбита на отдельные составляющие

и модули

http://vegas-cmf.github.io/

https://github.com/vegas-cmf

Популярные разработки на Phalcon

Page 18: Phalcon. Что нового?

Схема работы на ZF1:

Для увеличения производительности, приходилось использовать HTTP-прокси:

Varnish → Nginx → Полностраничный кеш(APC) → ZF1

А также допиливать ZF1 MVC …

Схема работы на Phalcon:

Nginx → Phalcon

Gazeta.ua после перехода на Phalcon

Page 19: 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

Page 20: 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

Ско

ро

сть

загр

узки

, мс

Page 21: Phalcon. Что нового?

Gazeta.ua после перехода на Phalcon

Firebug, ожидание ответа сервера (php-слой, без БД)

gazeta.ua zf1 gazeta.ua phalcon yona-cms phalcon

мс 210 50 20

0

50

100

150

200

250

Ско

ро

сть

загр

узки

, мс

Page 22: Phalcon. Что нового?

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

Ко

л-в

о з

апр

осо

в в

секу

нд

у

Page 23: Phalcon. Что нового?

Были ли преимущества от перехода? Однозначно ДА!

Преимущества:

• Отказ от HTTP-прокси (Varnish);

• Отказ от полностраничного APC-кеша;

• Данные отказы позволили ускорить написание нового функционала, без привязки к ним;

• Рефакторинг всего существующего функционала;

• Увеличение скорости отдачи страниц сервером ~ в 4 раза;

• Увеличение устойчивости портала при высоких нагрузках ~ в 5 раз;

Gazeta.ua после перехода на Phalcon

Page 24: Phalcon. Что нового?

Yona CMS

http://yonacms.com/

Автор: Александр Торош

CMS/CMF система на Phalcon. Имеет удобную

модульную структуру. Предназначена для

разработки простых сайтов, так и крупных порталов

и веб-приложений.

Благодаря не сложной конфигурации и простой

архитектуре, может быть легко модифицирована

под любую задачу.

- особенности, модули

Page 25: Phalcon. Что нового?

Yona CMS позволяет значительно экономить

время в стартовом развертывании необходимого

базового функционала для любого проекта.

На модульной структуре этой CMS уже успешно

запущено более 10 проектов, среди которых

Gazeta.ua

- особенности, модули

Page 26: Phalcon. Что нового?

Особенности:

• Модульная структура с удобной иерархией, которая

основана на namespace;

• Каждый модуль может выступать как отдельный

независимый компонент. Иметь свои маршруты,

хелперы, less, css, js файлы;

• Управление языками (в неограниченном количестве)

и переводами прямо из админки;

• AJAX-переходы по сайту со сменой URL в браузере

из коробки. Без ущерба SEO;

- особенности, модули

Page 27: Phalcon. Что нового?

Особенности:

• Модуль хранения и нарезки изображений Image;

• Гибкий SEO-модуль;

• Простота, интуитивная понятность админ.

управления в модулях. Без сложностей и

«переоптимизаций»;

• Интерфейс админки построен на Semantic UI;

• Стили интерфейса построены на LESS

• Автоматическая минификация и сборка в единые

assets-файлы

- особенности, модули

Page 28: Phalcon. Что нового?

Перечень готовых модулей:

• CMS – конфигурация;

• Admin – авторизация и админпанель;

• FileManager – файловый менеджер;

• Image – хранилище изображений;

• Page – статические страницы;

• Publication – динамические публикации (новости,

статьи, блог - можно создавать новые типы);

• SEO – модификация title, meta-тегов для любой

страницы веб-приложения;

• Slider – настраиваемые «слайдеры»;

• Widget – статические HTML виджеты;

- особенности, модули

Page 29: Phalcon. Что нового?

Модульная структура

Общий вид проекта

- особенности, модули

Page 30: Phalcon. Что нового?

Модульная структура

Директория приложения app

- особенности, модули

Page 31: Phalcon. Что нового?

Модульная структура

Конфигурационные файлы

- особенности, модули

Page 32: Phalcon. Что нового?

Модульная структура

Модули приложения

- особенности, модули

Page 33: Phalcon. Что нового?

Модульная структура

Структура модуля и его шаблоны View

- особенности, модули

Page 34: Phalcon. Что нового?

Модуль Image, особенности:

• Позволяет хранить изображения и нарезать их по

заданным параметрам;

• Схема директорий для хранения файлов рассчитана

таким образом, что в одной папке не может быть

более чем 1000 файлов;

• Нарезанные изображения кешируются в виде

JPEG-файлов;

• Система защиты от параллельной генерации кеша

определенного изображения (lock/unlock);

• Используется компонент Phalcon\Image

- особенности, модули

Page 35: Phalcon. Что нового?

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

Page 36: Phalcon. Что нового?

Планы на ближайшее будущее:

• Простая инсталяция и развертывание проекта;

• Полноценный конфигурационный модуль для CMS;

• Кодогенерация прямо из админки: модулей, CRUD;

• Миграции БД;

• Управление подключаемыми модулями;

• Создание набора модулей для интернет-магазина;

• Написание полноценной документации на русском и

английском языках;

• Покритие тестами;

- особенности, модули

Page 37: Phalcon. Что нового?

Helper

yona-cms / app / Bootstrap.php

$di->set('helper', new \Application\Mvc\Helper());

Практические приёмы работы с Phalcon

Page 38: 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

Page 39: Phalcon. Что нового?

Helper. Как этим пользоваться?

Шаблон volt

{{ helper.translate('Привет мир!') }}

Controller

$this->helper->translate('Привет мир!');

Доступ через DI-контейнер

$helper = $this->getDi()->get('helper');

$helper->translate('Привет мир!');

Практические приёмы работы с Phalcon

Page 40: 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

Page 41: 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

Page 42: Phalcon. Что нового?

Routes для каждого модуля отдельно

Параметр $route, что передается в метод init() - это

объект \Phalcon\Mvc\Router

Вы можете использовать любые инициализации из

документации

http://docs.phalconphp.com/en/latest/api/Phalcon_Mvc_Ro

uter.html

… а также методы addPost(), addPut(), addDelete() …

Т.е. строить удобные модульные RESTful приложения

Практические приёмы работы с Phalcon

Page 43: Phalcon. Что нового?

• На разных аппаратных архитектурах могут возникать

segfault ошибки и утечки памяти при работе с

определенными функциями.

• В ORM работа с Relations влечет за собой

дополнительные запросы, что не совсем удобно.

• Слой View по сравнению с другими популярными

фреймворками достаточно бедный в своих

возможностях.

Радует то, что разработчики обещают все исправить

и сделать фреймворк лучше

Трудности работы с Phalcon

Page 44: Phalcon. Что нового?

Особенности второй версии Phalcon:

• Написан на Zephir. Это компилируемый язык высокого уровня, предназначен для облегчения создания и сопровождения расширений для PHP с акцентом на безопасность памяти.

• Еще более производительный, чем первая версия

• Обратная совместимость с Phalcon 1.3.x

• Все тесты мигрированы на Codeception

• Вносить вклад в развитие фреймворка становиться легче

Phalcon 2

Page 45: Phalcon. Что нового?

Уже доступна Beta 3. Изменения:

• Phalcon 2.0 теперь на 100% проходит тесты Phalcon 1.*

• Благодаря «Zephir» новое ядро более полно проверяет соответствие классов и типов, вызывая более подробные сообщения о несоответствиях.

• Язык «Zephir» так же более точно и полно выдаёт информацию об исключениях и их параметрах.

• Phalcon 2 вообще более лучше работает с разными типами ошибок и исключениями.

• Новое ядро использует оптимизации из PHP 5.6, что, непременно, благоприятно сказывается на производительности. Если вы используете версию PHP ниже, все будет работать, но без этих оптимизаций.

Phalcon 2

Page 46: Phalcon. Что нового?

• Phalcon стремительно набирает популярность в мире веб-разработки и уверенно занимает собственную нишу;

• Phalcon постоянно избавляется от своих «детских болезней» и становиться лучше;

• С разработкой Phalcon 2 и Zephir вносить вклад в развитие фреймворка становиться намного легче;

• Zephir позволяет нам заглянуть «под капод» фреймворка, более детально изучить принцип работы;

• Делать хорошие, быстрые production приложения на Phalcon возможно и даже нужно!

Выводы

Page 47: Phalcon. Что нового?

Спасибо за внимание!

Александр Торош Веб-студия «WeZoom»

wezoom.net

[email protected]

Тел: (044) 221-65-78 (096) 989-08-28 (063) 787-22-36