Upload
fwdays
View
1.594
Download
1
Embed Size (px)
Citation preview
Phalcon 2Stabilization and performance
Serghei IakovlevGenesis Technology Partners
github.com/sergeyklay
План доклада
● Знакомьтесь — Phalcon● Важные изменения за последний год
● Что ожидается от версии 2.1
● LTS версия и система релизов
● Как принять участие в разработке
● Поддержка PHP 7
● Развитие Zephir
● В чём мы нуждаемся
Знакомьтесь — Phalcon
Тест производительностиHello World
0
0.5
1
1.5
2
Zend
Symfony
Yii
Laravel
Kohana CI Fu
el
Расход памяти (мб на один запрос)
Phalcon
0
20
40
60
80
Zend
Symfony
Kohana
Число используемых файлов (на запрос)
CI
Phalcon
Yii
Fuel
Laravel
Zend
Kohana
Phalcon
Время на запрос (для всех параллельных запросов)
0.00
0.75
1.50
2.25
3.00
CIYii
Fuel
Symfony
Laravel
Zend
Kohana
Число обработанных запросов в секунду
750
1,500
2,250
3,000
Phalcon
CIYii
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 7public function getAddress() : Address { return $this->address;}// Zephirpublic function getAddress() -> <Address> { return this->address;}
// PHP 7public function hello(string $name) : string { return 'Hello ' . $name;}// Zephirpublic function hello(string name) -> string { return "Hello " . name;}
Что ожидается от версии 2.1
// deprecated // in favor ofPhalcon\Mvc\Model\Validation => Phalcon\Validation
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 [email protected]: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 \Utils\Text{ 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 Test\Mcallinternal)->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.12126803398132PHP 5.6: 0.613104820251464
Zephir: 0.12285614013672PHP 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
Вопросы?