шаблонов
Smarty — PHP
от
: cjjer Внесены некоторые изменения
в использование PHP для реализации логического уровня и уровня представления модели разработки MVC. На выбор предлагается множество шаблонизаторов, но после их появления. официального движка SMARTY, выбор изменился. Его концепция и реализация весьма авангардны. В этой статье в основном обсуждаются различные характеристики SMARTY по сравнению с другими механизмами шаблонов, кратко описывается установка и использование механизма, а также используется небольшой тестовый пример для сравнения скорости и простоты использования SMARTY и PHPLIBtemplate.
1. MVC требует шаблонов.
MVC был впервые описан как шаблон проектирования в процессе разработки языка SmallTalk. MVC представляет собой модель, представление и элемент управления соответственно. Цель состоит в том, чтобы позволить различным ролям разработчиков выполнять свои соответствующие обязанности в крупных и средних компаниях. проекты. При разработке сетевых приложений для представления взаимосвязи между понятиями можно использовать следующую диаграмму.
На этом рисунке показано простое веб-приложение. Информация, которую пользователь видит в браузере, представляет собой содержимое сервера базы данных, но оно уже было обработано сервером приложений. Разработчики несут ответственность за создание структур данных, логики обработки данных и методов представления данных.
Когда в 1996 году в Китае стал популярен CGI, первые WEB-программисты учились самостоятельно на HTML. Печатать строки HTML в PERL было несложно. Однако по мере того, как скорость сети постепенно увеличивалась, размер страницы также увеличивался. первоначальные 20–30 К, выросли в десять раз. Написание программ CGI создает острую необходимость: разделить исходный код PERL и HTML. Таким образом, социальный прогресс отражается в разделении труда внутри команды разработчиков. Поскольку художники и программисты не очень хорошо знакомы с творчеством друг друга, им необходимо использовать согласованный язык для общения во время сотрудничества.
Этот язык не является нашим родным языком или английским. Термин называется шаблоном, и от него зависит логика и представление. Это метод выражения, сочетающий в себе характеристики HTML и языков сценариев. Таким образом, уровень представления может отображать данные, обработанные логическим уровнем, в формате, желаемом пользователем. Если у вас есть опыт разработки MFC на платформе Windows, вы наверняка знакомы с инкапсуляцией Document/DocumentTemplate/View. Это очень типичный пример MVC. Что касается веб-приложений, я лично считаю, что EJB/сервлеты/JSP в J2EE являются наиболее мощными, и, конечно же, есть простые и красивые структуры. Другая известная реализация — COM/DCOM+ASP. Эту комбинацию использует большинство людей в нашей стране.
Сравнивая несколько реализаций MVC в WEB-приложениях, мы можем получить представление о шаблонах: наборе скриптов, вставленных в HTML, или скриптов HTML, посредством которых вставленный контент представляет собой изменяющиеся данные. Ниже приведен пример файла шаблона. После обработки этот шаблон отображает Hello, world!
Метод обработки$greetings
пока опущен и будет обсуждаться позже для сравнения.
2. Почему стоит выбрать SMARTY?
Для PHP существует множество шаблонизаторов, например, самый ранний PHPLIBtemplate и восходящая звезда Fasttemplate. После нескольких обновлений они стали достаточно зрелыми и стабильными. Если вас очень устраивает имеющийся у вас шаблонизатор, то… пожалуйста, читайте дальше. Я считаю, что как энтузиаст свободного программного обеспечения или разработчик, стремящийся к эффективности и элегантности, следующее введение в SMARTY будет несколько интересным.
Помимо влияния личных предпочтений, я всегда был склонен использовать официальные стандартные реализации, такие как XML-движок APACHE Axis. Преимущество состоит в том, что вы можете получить максимально возможную совместимость (например, совместимость раннего MFC с Win3x была лучше, чем у других платформ приложений, и, конечно, теперь все версии очень полны). До выпуска SMARTY я использовал интегрированное расширение шаблонов в PEAR. Этот движок почти совместим с PHPLIBtemplate и Fasttemplate, начиная с синтаксиса шаблона и заканчивая его обработкой: шаблон считывается в память, а затем вызывается функция parse() для замены предустановленных тегов данными.
Давайте посмотрим, как SMARTY это делает. После получения запроса сначала определите, запрашивается ли URL-адрес в первый раз. Если да, скомпилируйте файл шаблона, необходимый для URL-адреса, в php-скрипт, а затем перенаправьте, если нет, это означает, что шаблон URL-адреса был использован. скомпилировано. Проверка. Вы можете перенаправить немедленно, без перекомпиляции. Условия перекомпиляции могут быть установлены на фиксированный срок. По умолчанию файл шаблона изменяется.
Как насчет этого? Это выглядит знакомо? Если подумать, разве это не принцип JSP! Действительно, такая компиляция кажется невероятной при использовании в интерпретируемом механизме сценариев, таком как PHP, но если вы внимательно подумаете, разве JAVA также не интерпретируется и не выполняется JVM? Это означает, что нет ничего невозможного, только невообразимое.
Теперь, когда мы поговорили о JAVA, позвольте мне высказать свое мнение о будущем PHP. Официальный сайт PHP объявил, что версия PHP 5.0 будет выпущена в конце 2003 года. В этой версии много новых функций: таких как обработка исключений, пространства имен, большая объектно-ориентированность и т. д. Можно сказать, что он приближается к JAVA, и SMARTY также является одной из новых функций, делающих PHP более подходящим для разработки крупных и средних проектов. Но, похоже, он все дальше и дальше отдаляется от той причины, по которой я выбрал его в первую очередь, — гибкости и простоты использования. Но с точки зрения жизненного цикла программного обеспечения PHP находится на стадии роста, и преимущества перевешивают недостатки, поэтому разработчики должны предоставить ему больше функций в надежде, что он сможет быть пригодным для коммерческих приложений. Как лояльный пользователь PHP, вы, конечно же, не хотите, чтобы PHP всегда обвиняли в недостаточных возможностях, не так ли?
ПОЧЕМУ ВЫБИРАЕТЕ SMARTY, ТОЛЬКО ПОТОМУ ЧТО ЭТО ПОХОЖЕ на JSP? Конечно, есть более веские причины. Прежде всего, помимо относительно высокой стоимости первой компиляции, пока файл шаблона не изменяется, скомпилированный скрипт кэша доступен в любое время, что экономит много времени на parse(). Во-вторых, у SMARTY есть функция; богатая библиотека функций, такая как PHP. От подсчета слов до автоматического отступа, переноса текста и регулярных выражений, вы можете использовать ее напрямую, если вам кажется, что этого недостаточно, например, вам нужна функция постраничного отображения набора результатов данных SMARTY; также имеет широкие возможности расширения, которые можно расширить с помощью плагинов.
Факты говорят громче слов. Я разработал тестовую программу и сравнил SMARTY и PHPLIBtemplate на основе двух факторов: скорости и сложности разработки. Причина, по которой я выбрал PHPLIBtemplate, заключается в том, что в статье Патрика «Выбор наиболее подходящего шаблона в мире PHP» есть сравнение между PHPLIB. В соревновании template и Fasttemplate PHPLIBtemplate одержал большую победу, что дало SMARTY хорошего соперника. Перед тестированием поговорим о проблемах, на которые необходимо обратить внимание в процессе установки.
3. Проблемы, с которыми вы можете столкнуться.
На официальном сайте SMARTY есть подробное руководство пользователя, и вы можете выбрать онлайн-версии в форматах HTML и PDF. Мы не будем здесь описывать существующее содержание руководства, а просто объясним проблемы, с которыми вы можете столкнуться при первом использовании.
Первый вопрос очень фатальный: там написано, что нужный файл не найден? Не все пишут приложения в соответствии со структурой каталогов SMARTY по умолчанию. Это необходимо указать вручную. Предположим, что структура каталогов следующая:
Вам необходимо указать структуру каталогов в index.php:
$smart->template_dir = "smarty/templates/";
$smart->compile_dir = "smarty/templates_c/";
$smart->config_dir = "smarty/configs/";
$smart->cache_dir = "smarty/cache/";
Первая проблема решена, а затем возникает вторая: почему нельзя использовать красивый шаблон, который я только что создал с помощью Dreamweaver? Дело не в том, что с файлом шаблона что-то не так, а в том, что разделителем тегов SMARTY по умолчанию является {}, и, к сожалению, Javascript определенно содержит этот тег. К счастью, мы можем использовать в качестве разделителя любой символ плюс эти два предложения:
$smart->left_delimiter = "{/";
$smart->right_delimiter = "/}";
Теперь установка практически завершена, проблем нет.
4. Контраст и аналогия
Сначала подумайте о дизайне теста. Главным фактором оценки, конечно же, является скорость. Для тестирования скорости использовалось среднее арифметическое. Повторите генерацию страницы N раз на тестовой странице, а затем сравните общее время генерации страницы. Еще одним важным фактором является простота использования (что касается масштабируемости, нет необходимости сравнивать результаты), поэтому используемый шаблон не может быть слишком маленьким. Я использую страницу своей личной домашней страницы, HTML-файл, созданный с помощью Firework+Dreamweaver, размером около 7 КБ. В настройках переменных также используются наиболее часто используемые блоки, которые называются блоками в шаблоне PHPLIB и разделами в SMARTY. Не стоит недооценивать разницу в именах. Критерии удобства использования разделены на две части: является ли синтаксис файлов шаблонов и файлов сценариев кратким и простым в использовании.
Давайте углубимся в тестирование. Давайте сначала посмотрим на синтаксис двух файлов шаблонов: левая часть синей полосы — это шаблон PHPLIB, а правая часть принадлежит SMARTY. Личные предпочтения различаются, поэтому я не буду здесь комментировать. Сосредоточьтесь на сравнении операторов обработки в скрипте, сначала посмотрите на шаблон PHPLIB:
$tpl->set_file('phplib', 'bigfile.htm');
$tpl->set_block('phplib', 'row', 'rows');
for ($j = 0; $j < 10; $j++){
$tpl->set_var('tag' ,"$j");
$tpl->parse('rows', 'row', true);
}
$tpl->parse('out', 'phplib');
$tpl->p('out');
Следующее является SMARTY:
$smart->assign('row',$row);
$smart->display('bigfile.htm');
SMARTY использует только две переменные, теги и строку, тогда как шаблон PHPLIB имеет дополнительный обработчик файла шаблона и необъяснимый выход. Честно говоря, я не знал, почему это существует, когда впервые узнал об этом. Это до сих пор кажется неловким. Почему в SMARTY так мало операторов обработки? Ответ в том, что работу совершает двигатель. Если вы хотите углубиться в исходную программу, вы можете обнаружить, что в Smarty_compiler.class.php есть функция _compile_tag(), которая отвечает за преобразование тега раздела в оператор PHP. Это не обычная метка. У нее есть параметры и данные, что позволяет сэкономить на программировании скриптов. Нагрузка на шаблонную метку не сильно отличается. Можно судить, что SMARTY более удобен в использовании.
Теперь наша очередь сосредоточиться на скорости. В конце концов, для опытного веб-разработчика освоение самого сложного инструмента, не говоря уже о шаблонизаторе — технологии, требующей щадящего обучения. Скорость – это жизнь веб-приложения, особенно когда шаблонизатор используется на сайте с большим количеством одновременных посещений, что еще важнее. До начала теста я думал, что шаблон PHPLIB выиграет в этом аспекте, поскольку он много раз обновлялся и практически не содержит ошибок. Кроме того, движок SMARTY слишком велик, в отличие от его оппонента, у которого всего два файла.
Конечно же, результаты теста показаны ниже: шаблон PHPLIB имеет преимущество в скорости на 25 %:
Но так будет не всегда. Я снова нажал кнопку «Обновить», и на этот раз получил другой результат:
PHPLIB практически не изменился, но SMARTY увеличил скорость на 25%. Продолжайте обновлять, и вы получите результаты, аналогичные тем, что были во второй раз: SMARTY почти на 10% быстрее, чем шаблон PHPLIB. Я думаю, именно поэтому скомпилированная версия работает быстрее, чем интерпретированная. Сам движок SMARTY очень большой, и шаблон необходимо скомпилировать в php-файл, поэтому скорость, конечно, не такая высокая, как у компактного шаблона PHPLIB. Но это происходит только впервые. При получении запроса во второй раз SMARTY обнаружил, что шаблон уже скомпилирован, поэтому самый трудоемкий шаг был пропущен, и оппоненту пришлось поэтапно выполнять поиск и замену. Это классический пример «обмена пространства на время», упомянутый в принципах компиляции.
5. Заключение
Вывод такой: если вы влюбились в SMARTY, то чего же вы ждете? Конечно, это не значит, что он всесилен. Точно так же, как когда я использую модель MVC для написания своего личного сайта, это не только не снижает рабочую нагрузку, но и мне всегда приходится беспокоиться о связях между разными уровнями.
Для чего не подходит SMARTY? Возьмем классический пример из руководства: сайт прогноза погоды. Еще одна вещь приходит на ум: фондовый рынок. Использование SMARTY на таком веб-сайте будет неэффективным из-за частой перекомпиляции, поэтому шаблон PHPLIB более подходит.
Целью этой статьи является не сравнение двух двигателей, а демонстрация преимуществ SMARTY. Самое важное в его использовании то, что он является частью новой системы PHP. В качестве независимой силы, помимо двух основных систем .NET и JAVA ONE, существуют и другие варианты для крупных и средних веб-разработок. Для проекта GNU его значение ничем не отличается от прыжка армии Лю и Дэна на тысячи миль в горы Даби.
Автор: Ю Босян