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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Пишу свой шаблонизатор - хочу посоветоваться

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Volloff
Отправлено: 20 Октября, 2021 - 13:50:25
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Окт. 2021  


Помог: 0 раз(а)




Всем привет! Для своего проекта решил написать простенький шаблонизатор, но есть некоторые опасения насчет производительности. Проект пишу по принципам 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 там и все такое, но пока идея сделать по своему. Или ну его нафик, что посоветуете?
Заранее спасибо, если посоветуете как что-то улучшить, то вообще буду очень благодарен)
 
 Top
miketomlin
Отправлено: 21 Октября, 2021 - 20:13:09
Post Id


Частый гость


Покинул форум
Сообщений всего: 129
Дата рег-ции: Июль 2016  


Помог: 5 раз(а)




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

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


Гость


Покинул форум
Сообщений всего: 78
Дата рег-ции: Март 2019  


Помог: 2 раз(а)




Любой нормальный шаблонизатор кэширует шаблон в php-коде, сам PHP кэширует PHP-код в Opcache (хранимый в памяти), выбросьте свой костыль.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB