4. Недостатки фреймворков
•
•
•
•
•
Большое количество файлов
Каждый запрос к серверу
~ 40-60 .php файлов
Код фреймворка интерпретируется для
каждого запроса заново
Большой аппетит на системные
ресурсы
Относительно низкая устойчивость к
нагрузкам
6. Как заставить фреймворк работать
быстрее?
•
•
•
•
•
•
•
Сделать сборку в один файл
HTTP-прокси кеш, например Varnish
Переписать dispatcher под себя
Написать свой MVC
Кешировать все вдоль и поперек
…
Как-то работать с этим всем дальше
7. Нагрузочный тест Hello World
Requests per second
2535
1059
851
489
Symfony
Yii
Kohana
541
Laravel
860
354
Zend
Codeigniter
Phalcon
10. Особенности Phalcon
•
•
•
•
•
•
•
•
•
Написан на Си
Работает как extension для PHP
Уже скомпилирован и не требует
интерпретации
Находится в оперативной памяти
Требует минимум файловых операций
Потребляет мало ресурсов
Очень производительный
Не требует от разработчика знаний Си
Бубен нам уже не нужен
11. Компоненты
•
•
•
•
•
•
•
•
•
•
ODM для Mongo
ORM
Шаблонизатор Volt
DI / IOC
Events Management
Encryption
HTTP Request /
Response / Cookies
Escaping / Filtering
Forms
Flash Messages
•
•
•
•
•
•
•
•
•
•
Routing
Cache
Pagination
Annotations
Security
Translations
Assets Management
Auto-Loader
Logging
CLI
12. Готовое приложение на Github
https://github.com/
oleksandr-torosh/phalcon-modular-app
20. Routing
Маршруты для определенных типов HTTP-запросов
// This route only will be matched if the HTTP method is GET
$router->addGet("/products/edit/{id}", "Products::edit");
// This route only will be matched if the HTTP method is POST
$router->addPost("/products/save", "Products::save");
// This route will be matched if the HTTP method is POST or PUT
$router->add("/products/update")->via(array("POST", "PUT"));
RESTful applications friendly
25. Возможности Volt
•
•
•
•
•
•
•
•
Работа с переменными приложения
Фильтрация данных вывода
Логические выражения и операторы
Математические выражения
Работа с массивами
Макросы
Добавление своих функций
Кеширование
26. Пример шаблона Volt
<!DOCTYPE html>
<html>
<head>
<title>{{ title }} - An example blog</title>
</head>
<body>
{% if show_navigation %}
<ul id="navigation">
{% for item in menu %}
<li><a href="{{ item.href }}">{{ item.caption }}</a></li>
{% endfor %}
</ul>
{% endif %}
<h1>{{ post.title }}</h1>
<div class="content">
{{ post.content }}
</div>
</body>
</html>
27. ORM
•
•
•
•
•
•
•
•
•
Работа с сущностями
Реляционные связи
Удобные методы find,
findFirst с параметрами
выборки
Phalcon Query Language
Query Builder
Валидации
Гидрации
Кеширование
События/Events
•
•
•
•
•
•
Транзакции
Models Meta-Data
Аннотации
Логирование
Профилирование
Шардинг
28. Пример простого контроллера
public function indexAction()
{
$posts = Post::find(array('sort' =>
array('created_at' => 'desc'))
);
$this->view->posts = $posts;
}
public function postAction($slug)
{
$post = Post::findFirst(
array("slug = '{$slug}'",
'cache' => array(
'lifetime' => 30,
'key'
=> "Post::findBySlug(" . md5($slug) . ")"
))
);
$this->view->post = $post;
$this->tag->prependTitle($post->getTitle());
}
37. Перспективы развития Phalcon
Проблема:
• Исходный код на Си
• Низкая скорость развития фреймворка
Решение:
• Создание новой версии Phalcon 2.0, которая
будет написана на Zephir – мощный
и простой язык понятный любому
PHP-разработчику
38. Zephir
class MyTest
{
public function someMethod()
{
/* Variables must be declared */
var fruits;
int i = 0, length;
/* Create PHP array */
let myArray = ["hello", 0, 100.25, false, null];
/* count the array into a 'int' variable */
let length = count(myArray);
/* Print value types */
while i < length {
echo typeof myArray[i], "n";
let i++;
}
return fruits;
}
}
42. Выводы
•
•
•
•
Phalcon даёт нам новый, свежий взгляд
на PHP фреймворки
Phalcon – это очень быстрый и богатый
функционалом фреймворк
На нем можно смело разрабатывать
Production приложения
Очень большие перспективы развития