Введение
Несмотря на то, что PHP уже сам по себе в какой-то степени шаблонизатор, существует достаточно других шаблонизаторов, которые появились не просто так. В этой статье я сравню между собой популярные шаблонизаторы на PHP.
Зачем нужны шаблонизаторы?
Чем сложнее приложение, тем важнее разделять логику и представление. Только в случае успешного разделения логики от представления backend-разработчики смогут эффективно сотрудничать с frontend-разработчиками. Благодаря шаблонизаторам frontend-разработчики (или в простонародье — верстальщики) могут изменять внешний вид web-приложения, используя понятный синтаксис выбранного шаблонизатора. Обычно шаблоны представляют собой небольшие куски HTML-кода, в которые встроен вывод переменных, подготовленных backend-разработчиком.
<a href="{$uri}" class="{$classnames}" title="{$menutitle}">{$menutitle}</a>
Иногда фронт вообще написан на JavaScript, а общение с бэком происходит посредством API, но это совсем другая история.
Список шаблонизаторов для сравнения
К шаблонизаторам применялись следующие критерии: они должны быть написаны на PHP, активно поддерживаться и быть признанными сообществом PHP.
Blade
Этот шаблонизатор используется в Laravel — PHP-фреймворке, начавшем свою жизнь в 2011 г и ставшим одним из популярных PHP-фреймворков. По слухам, причиной скорости Blade является небольшой список регулярных выражений для замены.
Laravel Github: https://github.com/laravel/laravel
Подписчики Звёздочки Форки
4,297 37,302 12,240
<html>
<head>
<title>App Name - @yield('title')</title>
</head>
<body>
@section('sidebar')
This is the master sidebar.
@show
<div class="container">
@yield('content')
</div>
</body>
</html>
Mustache
Mustache доступен для практически неограниченного количества языков, в том числе и PHP. Также он содержит минимум логики: замена, цикл foreach, проверка на null.
Github: https://github.com/janl/mustache.js/
Подписчики Звёздочки Форки
427 11,550 2,137
Hello {{name}}
You have just won {{value}} dollars!
{{#in_ca}}
Well, {{taxed_value}} dollars, after taxes.
{{/in_ca}}
Smarty
Smarty появился в начала нулевых, до сих пор развивается и конкурирует с более молодыми проектами.
Github: https://github.com/smarty-php/smarty
Подписчики Звёздочки Форки
173 1,193 416
<html>
<head>
<title>{$title}</title>
</head>
<body>
{* Comment *}
{include file='content.tpl'}
</body>
</html>
Twig
Данный шаблонизатор обрёл свою популярность благодаря Фабьену Потенцеруб, внедрившему его в систему представлений фреймворка Symfony. Тем не менее, Twig может быть внедрён практически в любой проект, то есть независимо от фреймворка.
Github: https://github.com/twigphp/Twig
Подписчики Звёздочки Форки
267 4,216 965
{{ foo }}
{# comment #}
{% if foo %}{% endif %}
Volt
Volt используется в фреймворке Phalcon (фреймворк, написанный на C и распространяемый как PHP-расширение). Из недостатков можно отметить лишь то, что Volt можно использовать только в Phalcon, то есть нет возможности использовать в проекте на другом фреймворке.
Phalcon Github: https://github.com/phalcon/cphalcon
Подписчики Звёздочки Форки
743 8,615 1,630
{# app/views/products/show.volt #}
{% block last_products %}
{% for product in products %}
* Name: {{ product.name|e }}
{% if product.status === "Active" %}
Price: {{ product.price + product.taxes/100 }}
{% endif %}
{% endfor %}
{% endblock %}
Как выбрать шаблонизатор?
При выборе шаблонизатора нужно учитывать следующие факторы: синтаксис, логика, расширяемость, документация, активность разработки, поддержка сообщества и производительность.
Blade
Синтаксис и функциональность
Blade поддерживает наследование шаблонов, секции, безопасный ввод содержимого и простой синтаксис. Blade разрешает использование PHP внутри шаблонов.
Документация и поддержка
Blade отлично документирован, но документация носит характер обзоров, в то время как более детальная информация содержится на сторонних ресурсах.
Производительность
Во время теста скорость достигала 100 000 шаблонов в секунду. Но если учитывать обработку шаблонов вместе с загрузкой фреймворка, то скорость около 2 200 шаблонов в секунду.
Mustache
Синтаксис и функциональность
Шаблоны Mustache не могут содержать логику, поэтому backend-разработчикам приходится реализовывать излишнюю логику, связанную с представлением.
Документация и поддержка
Ввиду ограниченных возможностей Mustache не требуется большой и подробной документации.
Производительность
Mustache, по очевидным причинам, оказался очень быстрым (6,000 шаблонов в секунду).
Smarty
Синтаксис и функциональность
Синтаксис лаконичен и прост для восприятия. Функционал большой и расширяемый.
Документация и поддержка
Документация у Smarty хорошо организована. Сайт выглядит немного устаревшим, но это является проблемой.
Производительность
Smarty довольно быстро обрабатывает некэшируемые шаблоны (9 634 шаблонов в секунду) and ещё быстрее — кэшируемые (57 115 шаблонов в секунду).
Twig
Синтаксис и функциональность
Twig поставляется с полным набором функций, фильтров, тестов и расширяемых макросов.
Документация и поддержка
Документация отлично организована, информативна и содержит наглядную информацию. Сообщество вокруг Twig большое, ведётся активная разработка на GitHub. Twig используется в Drupal 8, второй по популярности CMS.
Производительность
Обработка некэшируемых шаблонов происходит со скоростью 4 318 шаблонов в секунду, а кэшированных — 5 982.
Volt
Синтаксис и функциональность
Volt очень похож на Twig. В нём доступен функционал для создания собственных фильтров, макросов и расширений движка.
Документация и поддержка
Документация чистая, информативная и наглядная. Разработка Volt, как и Phalcon, идёт на GitHub полным ходом.
Производительность
Ввиду того, что фреймворк написан на C, Volt обрабатывает 23 900 шаблонов в секунду и вдвое больше при включении кэширования.
Выводы
Наиболее оптимальным вариантом является Twig. Потому что шаблонизатор не зависит от фреймворка, запускается очень быстро, содержит достаточно функционала, имеет отличную документацию и активно развивается.
В качестве бонуса замечу, что синтаксис идентичен синтаксису Volt.