37
Phalcon 2 Stabilization and performance Serghei Iakovlev Genesis Technology Partners github.com/sergeyklay [email protected]

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

  • Upload
    fwdays

  • View
    1.594

  • Download
    1

Embed Size (px)

Citation preview

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

Phalcon 2Stabilization and performance

Serghei IakovlevGenesis Technology Partners

github.com/sergeyklay

[email protected]

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

План доклада

● Знакомьтесь — Phalcon● Важные изменения за последний год

● Что ожидается от версии 2.1

● LTS версия и система релизов

● Как принять участие в разработке

● Поддержка PHP 7

● Развитие Zephir

● В чём мы нуждаемся

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

Знакомьтесь — Phalcon

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

Тест производительностиHello World

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

0

0.5

1

1.5

2

Zend

Symfony

Yii

Laravel

Kohana CI Fu

el

Расход памяти (мб на один запрос)

Phalcon

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

0

20

40

60

80

Zend

Symfony

Kohana

Число используемых файлов (на запрос)

CI

Phalcon

Yii

Fuel

Laravel

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

Zend

Kohana

Phalcon

Время на запрос (для всех параллельных запросов)

0.00

0.75

1.50

2.25

3.00

CIYii

Fuel

Symfony

Laravel

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

Zend

Kohana

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

750

1,500

2,250

3,000

Phalcon

CIYii

Fuel

Symfony

Laravel

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

Другие тесты?

goo.gl/DOwCLt

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

Изменения за последний год

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

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 сентября

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

● Язык высокого уровня

● Динамическая и статическая строгая типизация

● Контроль памяти

● Схож с PHP

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

// 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;}

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

Что ожидается от версии 2.1

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

// 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

Улучшения в моделях

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

$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;}

Улучшена работа с зависимостями

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

$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/');

Несколько директорий для вьюх

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

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 ]);}

Что можем вернуть из контроллера

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

$router->add('/short-url', [])->match(function () { $response = $this->getResponse();

return $response->redirect('http://fwdays.com/');});

$router->add('/', [])->match(function () { return '<h1>It works</h1>';});

Переопределяем поведение диспетчера

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

LTS версия и система релизов

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

● 1.2.x до 2014-03-17 (не поддерживается)

● 1.3.х до 2015-05-08 (не поддерживается)

● 2.0.х до 2016-04-17

● 2.1.х 2 года с момента выхода

Срок поддержки версий

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

Система версионирования

Версии нумеруются в формате A.B.CМажорная версия A.BМинорная версия A.B.CОбратная совместимость между A.B.C и A.B.C+1

Периодичность релизов

Мажорные релизы — 6-9 месяцевМинорные релизы — 3-5 недель

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

Как принять участие в разработке

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

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

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

4 шага для запуска Vagrant

git clone [email protected]:phalcon/vagrant.git

cd vagrant

vagrant up

vagrant ssh

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

Основные шаги

● Реализовать новую фичу / исправить баг

● Написать тесты

● Собрать у себя локально

● PR в dev ветку

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

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); }}

Тестирование и отчёт о покрытии кода

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

Поддержка PHP 7

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

Краткая история

2000 — PHP 4

2004 — PHP 5

2015 — PHP 7

Zend Engine 1

Zend Engine 2

Zend Engine 3

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

Развитие Zephir

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

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

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

class Math{ function fibonacci($n) { if ($n == 1 || $n == 2) { return 1; }

return $this->fibonacci($n - 1) + $this->fibonacci($n - 2); }}

Пример fibonacci на PHP

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

$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

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

Zephir Core Team

Steffen Butzer

@steffengy

Andres Gutierrez

@andresgutierrez

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

В чём мы нуждаемся

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

• Документация• Интернационализация• Тесты• Евангелизм• Примеры приложений• Блог• Поделитесь своим опытом• Социальные сети• Пожертвования / спонсорство

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

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

docs.phalconphp.com

forum.phalconphp.com

github.com/phalcon

pledgie.com/campaigns/27405

Сергей ЯковлевGenesis Technology Partners

github.com/sergeyklay

[email protected]

Вопросы?