Многократный вызов метода Smarties display() по сравнению с использованием includes

#smarty

#умный

Вопрос:

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

 <?php
$smarty->display('header.tpl');
$smarty->display('menu.tpl');
$smarty->display('article1.tpl');
$smarty->display('footer.tpl');
?>
  

или отображение одного шаблона smarty, а затем внутри шаблона, имеющего

 {include file="header.tpl"}
<body id={$pageid}>
{include file="menu.tpl"}
{include file="header_inner.tpl"}

Content of page

{include file="footer.tpl"}
  

Ответ №1:

Если вы используете Smarty3 (что вам и следует), взгляните на наследование и наследование шаблонов. Это позволяет вам определять шаблоны так же, как вы бы создавали свои классы в стиле ООП.

Если вы не можете (или не хотите) использовать TI, я бы предложил {include} подход. Причины:

  1. Сокращение API между PHP и шаблонами
  2. позволяет кэшировать вывод более простым способом
  3. позволяет проверять $cache_modified_check для базовой HTTP 304 Not Modified обработки прямо из коробки
  4. может быть оптимизирован (с помощью Smarty3) с помощью {include … inline} для уменьшения ввода-вывода файловой системы
  5. обычно может быть оптимизирован (с помощью Smarty3) с помощью $merge_compiled_includes (по-прежнему уменьшая ввод-вывод файловой системы)

У нескольких вызовов display() есть (только) одно преимущество. Вы можете отправлять данные в браузер по частям. Таким образом, вы могли бы сбросить его в браузер до того, как он будет отображен. Это позволяет браузеру извлекать (блокировать) ресурсы, такие как скрипты и css, еще до того, как он получит весь документ. («Конвейерная обработка загрузки документов»)

Что касается удобства обслуживания, я использую подходы TI и {include}. Никогда не вызывайте несколько вызовов display(). Мне пришлось бы использовать слишком много сценариев, если бы что-то изменилось.