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

Preview:

Citation preview

Phalcon 2Stabilization and performance

Serghei IakovlevGenesis 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 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 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 \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

serghei@phalconphp.com

Вопросы?