Чистый PHP / HTML представления VS представления движков - PullRequest
8 голосов
/ 20 февраля 2012

Я хотел бы знать, какой подход быстрее, используя чистый PHP в файлах HTML или используя движки шаблонов, такие как Smarty, Twig, ... Что мне особенно хотелось бы знать, так это следующее: что анализируется быстрее, этокэш Smarty например быстрее чем использование чистого PHP?Какой из шаблонизаторов самый быстрый?Я собираюсь переписать простое приложение, где скорость на первом месте.

Ответы [ 5 ]

21 голосов
/ 20 февраля 2012

«Зависит» - это ответ на все ваши вопросы.

Что такое "быстрее"? Время исполнения? Время разработки? Техническое обслуживание? Накладные расходы памяти? Их смесь? Движок шаблонов обычно торгует некоторой производительностью (скоростью, памятью) для лучшей разработки и обслуживания.

Если вы говорите о чисто динамических шаблонах (имеется в виду: шаблон оценивается при каждом запросе), PHP превзойдет любой шаблонизатор. Это на самом деле нобрейнер. Если вы принимаете во внимание кэширование, может помочь шаблонизатор, такой как Smarty. Кэширование - это не то, что вы не могли бы реализовать в простом PHP. С Smarty это просто сделано для вас (и на гораздо более сложном уровне, чем вы могли бы).

Если вы используете фреймворк, скажем, Symfony, возможно, было бы разумно использовать Twig, так как Twig и Symfony тесно интегрированы. Конечно, вы можете использовать Smarty или обычный PHP. Вопрос здесь: это возможно?

Кэширование имеет смысл при создании сайтов из источников данных, таких как база данных или удаленные API. То, что вы действительно экономите (в смысле сокращения), - это вызовы базы данных, интенсивные вычисления и т. Д. Проверьте, есть ли у вас какие-либо трудоемкие функции для создания вашего сайта. Если это так, используйте кэширование (если можете).

Зная компромиссы между разработкой / обслуживанием / удобством / производительностью, я бы (всегда) рекомендовал использовать шаблонизатор. Будучи разработчиком Smarty, я, конечно, предлагаю использовать Smarty. То есть, если вы не используете Symfony, то вам, возможно, будет лучше с Twig. Или какой-то другой фреймворк с другим движком шаблонов.

Пожалуйста, игнорируйте сообщения типа Smarty vs. Twig , так как они сравнивают только очень ограниченный обзор двигателей. Не доверяйте тестам, которые вы сами не притворялись ™.

В целом, Smarty 3.1 немного быстрее Twig. Twig делает много вещей во время выполнения (время, когда выполняется шаблон), которые Smarty делает во время компиляции (время, когда шаблон готовится к выполнению). Прутик здесь не особо обижает скорость. Twig должен делать определенные вещи во время выполнения проекта. Они потратили немного производительности на «удобство» (например, доступ к массивам и объектам с одинаковыми обозначениями).

8 голосов
/ 21 октября 2015

Давайте разберем тропы, связанные с этой темой:

1. Не допускайте логики в презентацию - не вставляйте «код» в ваш HTML

Любой, кто говорит это, а затем говорит вам использовать шаблоны, является противоречивым:

  • PHP - это интерпретируемый язык - он становится кодом C при исполнении.
  • Шаблонный синтаксис интерпретируется в PHP

Они должны перестать лгать самим себе.Их «шаблонный синтаксис» - это язык программирования, построенный поверх другого, который, в свою очередь, построен поверх еще другого языка - это неэффективно, избыточно и странно .

Кроме того, я не вижу, как само существование переменных , от которых зависит каждый шаблонизатор, от которого когда-либо зависели, не считается логикой - их существование, содержание и реализация зависят от логический бэкэнд.

И что из этих шаблонных систем с , если / else операторов и для циклов?Это сама суть логики - те самые понятия, которые используются в большинстве языков программирования .Они требуют переменных данных, которые могут быть сгенерированы или существовать только в какой-либо форме вычислений.

Вы не можете обслуживать динамический контент, не смешивая представление с логикой.Это невозможно.


2,1 Это безопаснее ...

Итак, вы не доверяете ваш парень по HTML?

Дело: Вы думаете, что ваш парень по HTML / CSS глупый и случайно напечатает пароль базы данных

Если это так, у меня естьновость для вас - ваша среда уже небезопасна, если к чувствительным данным можно получить доступ или изменить их из любой точки программы.

Случай: Вы думаете, что ваш парень из HTML будет печатать случайные серверные константы - этоопасно позволять ему, как частному лицу, работать с серверной логикой

Понятно - он либо глуп, либо ненавидит свою работу и хочет быть уволенным и поэтому будет делать что-то глупое, например, печать переменных сеанса.Хорошо, но на это я скажу ...

... Какого черта этот материал не рецензируемый ?Даже если бы у него не было доступа к прямой серверной логике, а была бы причудливая система шаблонов, он все равно мог бы в равной степени распространять свою глупость / ненависть только потому, что он имеет решающее право голоса на выходе.Или он может даже быть в сговоре с другим программистом (если есть) и по-прежнему иметь доступ к серверным константам и другим.

-

2.2.1 Хорошие шаблоныДвижки автоматически очищают вывод или позволяют шаблонисту делать это самому - он лучше знает, когда нужно выполнить очистку данных

Ты дурак.

Ты не знаешь, когда вывод долженбыть продезинфицированы?Вы не могли бы сделать это сами ..?

Несмотря на это, может быть, вы просто обезьяна кода, а парень по HTML - специалист по веб-безопасности HTML-инъекций, и он долженбыть единственным дезинфицирующим выходом.В этом случае предоставление ему доступа к PHP также позволяет ему использовать подобные htmlspecialchars() вместо того, что шаблон дает ему делать то же самое.

Относительно автоматического побега при условии, что вы безопасно передавая контент, вы можете реализовать такую ​​простую функцию в коде, который вы делаете.

-

2.2 ...и я могу контролировать, с какими данными работают

Подумайте о классах, функциях и т. д. - Вы добавляете данные, они работают с ними, а затем вы получаете результат.Как правило, они не имеют дело с внешними данными, если они не переданы им (в противном случае непонятная, опасная и плохая практика - некоторые константы в стороне).С помощью этих же методов вы можете точно передать то, что вам нужно, в эффективном, ясном и неограниченном поместье.

-

Все это говорит о том, что вы думаете, что ваш движок шаблонов более безопасен, чем простой код, потому что вам не хватает нескольких областей общей безопасности :

  • Вы (или кто-либо другой) не рецензируют контент - Вы разрешаете частным лицам выводить контент.
  • Вы не реализуете надлежащие или безопасные методы программирования и, похоже, не понимаете, что можете контролировать то, что передается из точки A в B .

3. Синтаксис PHP слишком сложен / труден, чтобы учить людей стиля

Правда в том, что он не сложнее, чем псевдосинтаксис, созданный системами шаблонов, такими как Smarty, поэтому, если это проблема, динамический контент не для вас.

Следующее в PHP "короткий синтаксис" - это слишком сложно?

<div class='username'><?= $username ?></div>


4. Слишком много работы для разработки моего собственного решения

Хотя я бы сказал, что это не так, вы можете выбирать все, что пожелаете! Выберите то, что соответствует вашим потребностям лучше всего. Они, как правило, бесплатны, их нетрудно интегрировать, и они поставляются с множеством функций из коробки.



У меня сложилось впечатление, что большинство людей выбирают шаблоны просто потому, что они выглядят «аккуратно» внутри файла - им нравится думать, что файл TPL - это нечто особенное, что они создали, им нравится, как выглядит синтаксис; Как будто каким-то волшебством, переменная «вызывается» маленьким символом @ или # и переходит из вашей логики в вывод.

Это похоже на уловку - Прекрасная волшебница ( AKA Шаблонный движок ) привлекает вас своей красотой. Хотя она привлекательна для глаз, она на самом деле кровососущий демон и извлекает вашу душу ( Ресурсы сервера ) в обмен на глазные конфеты, которых никто не видит (у ваших пользователей гораздо быстрее будет веб-сайт и дополнительные функции, финансируемые за счет $$$, который вы экономите на аренде питания / сервера)

<title>{{@title}}</title>
Vs
<title><?= $title ?></title>


Признаюсь, есть только один случай, когда я могу подумать о том, какие шаблоны имеют какое-либо отношение к PHP - Переносимость в другие приложения. Ответ Appartisan обращается к этому. Несмотря на это, несложно заменить <?= $var ?> на {{@var}} - Это работа для системы шаблонного типа.

5 голосов
/ 02 октября 2015

Просто и чисто мнение, я думаю, что единственным преимуществом является мобильность.Вы можете повторно использовать шаблоны или представления из движка шаблонов в другом бэкэнд-приложении.Допустим, вы перемещаете свое приложение с PHP на Java, вам не нужно реорганизовывать шаблоны.

В противном случае вы добавляете сложность, добавляете другой уровень выполнения (больше времени), больше требований для обслуживания.приложение (вам нужны люди, которые знают этот шаблонный движок) и так далее.Сам по себе PHP - это лучший и более функциональный шаблонизатор, который вы получите, возможно, самый быстрый, и вы также можете выполнять кеширование с преимуществом управления кешем из внутреннего приложения, а не из представления.

4 голосов
/ 02 апреля 2015

Я вернусь к этому снова, так как все значительно изменилось, и в предыдущем ответе отсутствуют некоторые доказательства.

Не вдаваясь в глубину понимания того, почему фреймворки используют движки шаблонов поверх PHP, которые большинство используют. Почему-то постоянно пытаются «исправить» PHP с помощью другого уровня абстракции. Всегда с претензиями на простоту без потери универсальности или производительности.

Несмотря на это, использование PHP по-прежнему является самым быстрым и универсальным способом создания шаблонов. PHP в его самых ранних воплощениях выглядел очень похоже на язык шаблонов. Но давайте посмотрим на достижения в PHP и разместим их рядом с слоями после .

Twig и некоторые другие утверждают, что кэшировали что-то, что всегда было аддоном в более ранних версиях PHP. Кэширование теперь является частью 1015 * по умолчанию PHP5.5 + (Opcache), поэтому использование PHP в качестве языка шаблонов даст больше улучшений производительности.

Twig и другие утверждают, простой синтаксис для дизайнеров. При сравнении синтаксиса механизма шаблонов вы увидите, что логика схожа с единственным преимуществом использования системы шаблонов, такой как Twig, являющейся еще одним уровнем разделения безопасности между конструктором и базовым системным кодом.

Две очень популярные CMS Wordpress и Drupal использовали PHP в качестве своих шаблонизаторов. Таким образом, старый аргумент использования шаблонизатора для обеспечения безопасности и упрощения использования PHP при разработке веб-сайта на самом деле недопустим в современной сети. В то время как Drupal 8 переходит к Twig, он в основном потому, что twig является частью Symfony Framework (возвращаясь к тому, почему фреймворки используют движки шаблонов). Wordpress, с другой стороны, все еще использует PHP. Поскольку Wordpress стремительно растет, веб-дизайнеры используют PHP, чтобы помочь этому случиться. Сообщество Drupals также было частично разделено решениями об использовании Twig и Symfony.

Так что может показаться, что использование PHP - лучший выбор с точки зрения производительности, но также предпочтение для будущих разработчиков и дизайнеров. По крайней мере, все доказательства приводят к такому выводу.

Как говорится, вот мое необоснованное мнение. Я думаю, что использование чего-либо другого, кроме PHP, в качестве движка шаблонов в современной сети покрывает некоторые слабые места в базовой структуре или архитектуре веб-приложений. Эта слабость заключается в ее сложностях и сложностях , которые трудно объяснить на уровне дизайнера или разработчика.

Если вы пишете легкое приложение, которое должно быть небольшим. Сохраняйте его небольшим и оптимально работающим с помощью PHP, а другие механизмы оставляйте группам и проектам уровня предприятия

0 голосов
/ 03 августа 2017

У меня проблема с аргументом, что логика и отображение данных должны быть максимально разделены.Я обнаружил, что проверка и отображение данных на самом деле требует много логики в формах.Информация о типе данных, диапазоне номеров, связи между различными данными требует много кода.Реальный вопрос заключается в том, должны ли мы использовать язык шаблонов на стороне сервера или Javascript на стороне клиента.Используя Ajax и клиентский код для отображения и проверки данных, я получаю очень мало шаблонного кода.Самая большая проблема с шаблонизаторами - это введение новых правил и синтаксиса кода.Я вижу будущее с PHP, Jquery и Ajax и шаблонными движками, теряющими свою привлекательность.

...