Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Пишу свой шаблонизатор - хочу посоветоваться
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Пишу свой шаблонизатор - хочу посоветоваться

Страниц (1): [1]
 

1. Volloff - 20 Октября, 2021 - 13:50:25 - перейти к сообщению
Всем привет! Для своего проекта решил написать простенький шаблонизатор, но есть некоторые опасения насчет производительности. Проект пишу по принципам MVC и ООП, но здесь для простоты код привожу в процедурном стиле, так как меня интересует только вопрос производительности, если эта идея будет оправдана то перепишу на классах.
Суть вопроса
Я хочу не использовать вообще PHP код в шаблонах, все файлы шаблонов будут с расширением .html (сначала хотел юзать .tpl но потом понял смысла особого нет)

Сам обработчик выгладит так:
PHP:
скопировать код в буфер обмена
  1.  
  2. // получаем шаблон
  3. $template = 'assets/tmpl/template.html';
  4. $content=file_get_contents($template,true);
  5.  
  6.  
  7. // Парсим плейсхолдеры в шаблоне, и заменяем их подготовленными данными из модели
  8. $content=str_replace('[menu]',$menu,$content);
  9. $content=str_replace('[text]',$text,$content);
  10.  
  11. // далее функция вывода подготовленного шаблона
  12. if ($content) {
  13.    ob_start();
  14.                  return $content;
  15.    ob_get_flush();
  16. }
  17.  


и код шаблона
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <div class="menu">[menu]</div>
  3. <div class="text">[text]</div>
  4.  


собственно вопрос как уже и говорил в производительности, если будет сто str_replace может ли это как то сказаться на скорости? Если еще и данных дофига будет в заменах?
Знаю конечно про готовые шаблонизаторы, Twig там и все такое, но пока идея сделать по своему. Или ну его нафик, что посоветуете?
Заранее спасибо, если посоветуете как что-то улучшить, то вообще буду очень благодарен)
2. miketomlin - 21 Октября, 2021 - 20:13:09 - перейти к сообщению
Все это тормоза. Хотя бы посмотрели, как устроены др. серверные шаблонизаторы. В них шаблоны на языке шаблонизатора переводятся в нативные. Нативные тоже каждый раз не парсятся, а хранятся в бинарном, готовом к выполнению виде.

Лично меня использование нативных вообще не напрягает. Имеет смысл что-то изобретать, если у вас шаблоны будут писать домохозяйки, которым опасно давать прямой доступ к php-скриптам.
3. don.bidon - 23 Октября, 2021 - 03:44:52 - перейти к сообщению
Любой нормальный шаблонизатор кэширует шаблон в php-коде, сам PHP кэширует PHP-код в Opcache (хранимый в памяти), выбросьте свой костыль.

 

Powered by ExBB FM 1.0 RC1