Phalcon 2
Stabilization and performance
Serghei Iakovlev
Genesis Technology Partners
github.com/sergeyklay
serghei@phalconphp.com
План доклада
●
Знакомьтесь — Phalcon
●
Важные изменения за последний год
●
Что ожидается от версии 2.1
●
LTS версия и система релизов
●
Как принять участие в разработке
●
Поддержка PHP 7
●
Развитие Zephir
●
В чём мы нуждаемся
Знакомьтесь — Phalcon
Тест производительности
Hello World
0
0.5
1
1.5
2
Zend
Symfony
Yii
Laravel
Kohana
CI
Fuel
Расход памяти (мб на один запрос)
Phalcon
0
20
40
60
80Zend
Symfony
Kohana
Число используемых файлов (на запрос)
CI
Phalcon
Yii
Fuel
Laravel
Zend
Kohana
Phalcon
Время на запрос (для всех параллельных запросов)
0.00
0.75
1.50
2.25
3.00
CI
Yii
Fuel
Symfony
Laravel
Zend
Kohana
Число обработанных запросов в секунду
750
1,500
2,250
3,000
Phalcon
CI
Yii
Fuel
Symfony
Laravel
Другие тесты?
goo.gl/DOwCLt
Изменения за последний год
2.0.0 — 17 апреля
2.0.1 — 10 мая
2.0.2 — 26 мая
2.0.3 — 10 июня
2.0.4 — 7 июля
2.0.5 — 17 июля
2.0.6 — 21 июля
2.0.7 — 17 августа
2.0.8 — 25 сентября
● Язык высокого уровня
● Динамическая и статическая строгая типизация
● Контроль памяти
● Схож с PHP
// PHP 7
public function getAddress() : Address {
return $this->address;
}
// Zephir
public function getAddress() -> <Address> {
return this->address;
}
// PHP 7
public function hello(string $name) : string {
return 'Hello ' . $name;
}
// Zephir
public function hello(string name) -> string {
return "Hello " . name;
}
Что ожидается от версии 2.1
// deprecated // in favor of
PhalconMvcModelValidation => PhalconValidation
new Customer(
[
'name' => 'Peter',
'status' => 'Active',
]
);
// JsonSerializable
$customer = Customer::findFirst(1);
echo json_encode($customer);
Объединение Validation
Улучшения в моделях
$di->set('service', function () use ($di) {
$anotherService = $di->getShared('anotherService');
$anotherService-> ...
});
$di->set('service', function () {
$this->anotherService-> ...
});
public function beforeServiceResolve($e, $di, $params)
{
// ...
return new MyClass;
}
Улучшена работа с зависимостями
$view->setViewsDir(
[
'/var/www/htdocs/blog/modules/backend/views/',
'/var/www/htdocs/blog/common/views/',
]
);
$view->setLayoutsDir(
'/var/www/htdocs/common/views/layouts/'
);
$view->setPartialsDir(
'/var/www/htdocs/common/views/partials/'
);
Несколько директорий для вьюх
public function loginAction()
{
return false; // $this->view->disable();
}
public function helloAction()
{
return '<h1>Hello world!</h1>';
}
public function welcomeAction($name)
{
return $this->view->render('welcome/index', [
'name' => $name
]);
}
Что можем вернуть из контроллера
$router->add('/short-url', [])->match(function () {
$response = $this->getResponse();
return $response->redirect('http://fwdays.com/');
});
$router->add('/', [])->match(function () {
return '<h1>It works</h1>';
});
Переопределяем поведение диспетчера
LTS версия и система релизов
● 1.2.x до 2014-03-17 (не поддерживается)
● 1.3.х до 2015-05-08 (не поддерживается)
● 2.0.х до 2016-04-17
● 2.1.х 2 года с момента выхода
Срок поддержки версий
Система версионирования
Версии нумеруются в формате A.B.C
Мажорная версия A.B
Минорная версия A.B.C
Обратная совместимость между A.B.C и A.B.C+1
Периодичность релизов
Мажорные релизы — 6-9 месяцев
Минорные релизы — 3-5 недель
Как принять участие в
разработке
Vagrant для быстрого старта
● Ubuntu 14.04.3 LTS
● Apache 2.4
● PHP 5.5
● MySQL 5.6
● Git 1.9
● Memcached 1.4
● Beanstalkd 1.9
● Composer
● Zephir 0.8
● SQLite 2.8
● PostgreSQL 9.4
● Phalcon
● Phalcon Dev Tools
● Redis 2.8
● MongoDB 2.0
github.com/phalcon/vagrant
4 шага для запуска Vagrant
git clone git@github.com:phalcon/vagrant.git
cd vagrant
vagrant up
vagrant ssh
Основные шаги
● Реализовать новую фичу / исправить баг
● Написать тесты
● Собрать у себя локально
● PR в dev ветку
namespace Utils;
class Text
{
public static function camelize(string! str) -> string
{
return str->camelize();
}
}
class Text extends UtilsText
{
public static function camelize($str)
{
return parent::camelize($str);
}
}
Тестирование и отчёт о покрытии кода
Поддержка PHP 7
Краткая история
2000 — PHP 4
2004 — PHP 5
2015 — PHP 7
Zend Engine 1
Zend Engine 2
Zend Engine 3
Развитие Zephir
class McallInternal
{
internal function fibonacci(long n) -> long
{
if n == 1 || n == 2 {
return 1;
}
return this->fibonacci(n - 1) +
this->fibonacci(n - 2);
}
public function callFibonacci(long n) -> long
{
return this->fibonacci(n);
}
}
Область видимости internal
class Math
{
function fibonacci($n)
{
if ($n == 1 || $n == 2) {
return 1;
}
return $this->fibonacci($n - 1) +
$this->fibonacci($n - 2);
}
}
Пример fibonacci на PHP
$t = microtime(true);
(new TestMcallinternal)->callFibonacci(31);
echo 'Zephir: ', microtime(true) - $t, PHP_EOL;
$t = microtime(true);
(new Math)->fibonacci(31);
echo 'PHP 5.6: ', microtime(true) - $t, PHP_EOL;
Zephir: 0.12126803398132
PHP 5.6: 0.613104820251464
Zephir: 0.12285614013672
PHP 5.6: 0.55841708183289
4.5/5x 450%/500% improvement
Zephir Core Team
Steffen Butzer
@steffengy
Andres Gutierrez
@andresgutierrez
В чём мы нуждаемся
• Документация
• Интернационализация
• Тесты
• Евангелизм
• Примеры приложений
• Блог
• Поделитесь своим опытом
• Социальные сети
• Пожертвования / спонсорство
Спасибо за внимание
docs.phalconphp.com
forum.phalconphp.com
github.com/phalcon
pledgie.com/campaigns/27405
Сергей Яковлев
Genesis Technology Partners
github.com/sergeyklay
serghei@phalconphp.com
Вопросы?

Сергей Яковлев "Phalcon 2 - стабилизация и производительность"