Библиотека параллельных задач (TPL)
Библиотека параллельных задач (TPL) представляет собой набор открытых типов и API-интерфейсов в пространствах имен System.Threading и System.Threading.Tasks. Цель TPL — повышение производительности труда разработчиков за счет упрощения процедуры добавления параллелизма в приложения. TPL динамически масштабирует степень параллелизма для наиболее эффективного использования всех доступных процессоров. Кроме того, в библиотеке параллельных задач осуществляется секционирование работы, планирование потоков в пуле ThreadPool, поддержка отмены, управление состоянием и выполняются другие низкоуровневые задачи. Используя библиотеку параллельных задач, можно повысить производительность кода, сосредоточившись на работе, для которой предназначена программа.
Начиная с .NET Framework 4, библиотека параллельных задач представляет собой предпочтительный способ создания многопоточного и параллельного кода. Однако не всякий код подходит для параллелизации. Например, если цикл за каждую итерацию выполняет небольшой объем работ или выполняется за небольшое число итераций, из-за дополнительной нагрузки, которую параллелизация оказывает на систему, код может выполняться медленнее. Кроме того, параллелизация, как и любой многопоточный код, усложняет выполнение программы. Хотя библиотека параллельных задач упрощает многопоточные сценарии, рекомендуется иметь базовое понимание понятий потоков, например блокировки, взаимоблокировки и состояния гонки, чтобы эффективно использовать библиотеку параллельных задач.
Ещё раз о шаблонах
Рано или поздно девелоперу, создающему сайты статусом выше «сайт-визитка», приходится сталкиваться с таким понятием как «шаблоны» или «шаблонизация» визуального представления (не шаблоны проектирования). Что это такое? Механизм шаблонов позволяет отделять визуальное представление веб-приложения (по-скольку работаю только с веб-приложениями, то и рассуждать буду в этом контексте) от бизнес-логики таким образом, чтобы при изменении, например, внутренней логики попутно не приходилось переделывать всю html-верстку. На этом поприще уже давно существует несколько отдельно стоящих флагманских решений, позволяющих создавать довольно гибкие приложения в плане разделения труда дизайнеров-верстальщиков и программистов, а также предотвращать запутанность кода в больших приложениях. Описывать все их нет смысла. Это уже сделано до меня и не один раз. Помимо этого, почти каждая CMS и фрэймворк имеет собственные решения для отделения логики приложения от логики представления.
Конечно, когда речь идет о проекте в десятки тысяч строк кода, когда у заказчика есть возможность нанять и программиста, и верстальщика, то и функционал шаблонов будет только пользой для всех участников проекта. Но когда разработчик в простецкий сайт в 3 страницы начинает втуливать Smarty, это ИМХО уже перебор. В таких случаях я люблю вспоминать выражение Джорджа Шлоснейгла из его замечательной книги «Профессиональное программирование на PHP» – «попытка убить муху молтком».
Действительно, встраивая все тот же Smarty в весьма простой по функционалу сайт, разработчик попросту тратит время. А время, как известно, — деньги. Да и в большинстве случаев заказчику безразлично на каком шаблонизаторе будет работать его сайт. Заказчик больше печется о затраченном времени.
Что же делать, если сайт не «визитка», но и не второй Amazon? Лично я считаю, что в этом случае оптимальное решение проблемы — воспользоваться своей самописной системой шаблонов, весь функционал которой, заточен только для решения узкого круга задач, необходимых для текущего ресурса. Впоследствии вы, возможно, выведите свою «формулу» универсального шаблонизатора с неким минимальным набором функций, расширяемую по мере необходимости в отдельно взятом проекте.
Может показаться, что автор сей статьи весьма скептически относится к Smarty и другим шаблонизаторам. Это не так. Я довольно долго работал с проектом, в котором роль шаблонизатора выполнял все тот же Smarty. И хочу заметить, мне весьма понравилось использование этой системы шаблонов в контексте обширного по функционалу проекта.
- Возможность назначать переменные шаблону
- Отдельное пространство имен переменных для отдельно взятого html-шаблона
- Возможность использования одного шаблона для общего каркаса страницы во избежание повторения конструкций вида require ‘header.tpl’;… require ‘footer.tpl’; в каждом файле
- Проект является интернет-магазином или социальным сообществом
- 10-20 типов страниц. Подчеркиваю — НЕ страниц, а типов страниц. Например: страница описания товара. Т.е. html-шаблон для этого типа страниц будет один, но самих страниц, когда каталог заполнится контентом будет много
Перейдем от слов к делу.
Рассмотрим простейший класс, который состоит всего из трех методов.
Давайте рассмотрим пример с применением этого класса. Создадим следующую структуру каталогов:
/wwwroot
|
— /classes
| — Template.php
— /templates
| — Main.tpl
| — Catalog.tpl
| — Product.tpl
| — Index.tpl
| — 404.tpl
|— index.php
Main.tpl
Catalog.tpl
Product.tpl
Index.tpl
404.tpl
index.php
Как видно из примера, содержимое страниц catalog и product изменяется в зависимости от значения $_GET[‘ID’]. Т.о. мы получили два типа шаблонов и неограниченное количество страниц, генерируемых приложением из этих шаблонов.
Вывод: не стремитесь во всех проектах, которыми вы занимаетесь, использовать навороченные библиотеки шаблонизаторов, предоставляющих большое обилие всевозможных инструментов, в большинстве случаев не используемых в должном объеме. Лучше всего написать свое решение, которое поможет сэкономить время, системные ресурсы, а главное — нервы останутся в порядке.
Как использовать файлы TPL

Относительно недавно я писал о том, как создать свой движок для сайта. И там я сказал, что для HTML-кода надо создавать специальные файлы-шаблоны, которые имеют расширение tpl. Однако, один из моих посетителей попросил меня поподробнее рассказать о том, как использовать файлы tpl. И в этой статье я постараюсь подробно рассказать о том, зачем нужны файлы tpl, как их использовать, и приведу небольшой пример.
Файлы tpl используются для написания в них HTML-кода, который впоследствии будет «вытащен» PHP и выведен пользователю на конкретных страницах. Например, в файле tpl может быть форма регистрации. То есть просто HTML-код обычной формы, ничего больше. В другом файле tpl может быть блок с панелью пользователя. В этой панели идёт «Приветствие пользователя» по имени, различные ссылки на редактирование профиля, а также кнопка выхода. Это всё примеры, где регулярно используются файлы tpl.
Однако, есть один очень важный нюанс. Рассмотрим поподробнее файл tpl с панелью пользователя. Я написал, что там идёт приветствие пользователя по имени. Но файл один, а пользователей очень много (следовательно, и имён много). Глупо создавать для каждого пользователя отдельный файл, где жёстко прописано его имя. Поэтому в файлах tpl используются специальные элементы — шаблонизаторы. Они записываются примерно в таком виде: . Давайте приведу пример файла tpl, где используется шаблонизатор (пусть файл называется user_panel.tpl):
Как видите, никаких <html>, <head> и <body> здесь нет. Только тот HTML-код, который отвечает за панель пользователя.
Теперь напишем PHP-код, который этот tpl-файл обрабатывает:
<?php
$username = «Пётр»; //Разумеется, это имя Вы должны сначала откуда-то взять, например, из базы данных
$user_panel = file_get_contents(«user_panel.tpl»);
$user_panel = str_replace(«
echo $user_panel;
?>
Как видите, всё очень и очень легко. Мы здесь получили содержимое файла user_panel.tpl, а затем с помощью функции PHP str_replace() заменили на конкретное имя пользователя.
Это основа, которую необходимо знать для использования tpl-файлов. Далее Вы должны теперь понять, что страница будет собираться по кирпичикам, выводя все tpl-файлы в нужном порядке. Главное преимущество такого подхода, что разделяется программная часть и дизайнерская, благодаря чему становится крайне легко изменять дизайн и код PHP независимо друг от друга.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 22 ):
Михаил, я конечно, ещё не настолько овладел знаниями в области программирования, изучая платный курс(за который тебе отдельное спасибо), но сдается мне, что в написанном коде есть пара, скорее всего, опечаток.. 🙂
Михаил ! вопрос таков. просто не знал где его задать решил тут раз уж применяю tplы. вот к примеру у меня есть переменная имени "$login" и на экране выводится именно к примеру "Олег" А как вот его просклонять правильно ведь не ко всем именам подойжет префикс после его логина к примеру Сообщение от "Олег" — не очень смотрится=((( Как это реализовать?
Это сделать можно только для конечного числа имён. Реализовать это для всех имён не получится. Соответственно, Вы для каждого имени склоняете под всеми необходимыми падежами, а потом вытаскиваете нужный падеж (например, взятый из параметра функции).
Нет там опечаток, кроме той что тег <b> не работает с версии 4,1 HTML
Ты это мне написал? Ты видел дату моего поста??
Спасибо за статью, помню я как раз и не разобрался с шаблонизаторами и фигурными скобками.
Здравствуйте, Михаил. Есть вопрос. Например есть tpl файл для боковой панели. В боковой панели есть подобие виджетов. Они одинаково выглядят и для них я так же сделал один tpl файл. Вот tpl виджета: <div мне с помощью одного tpl для виджета выводить например 3 виджета?
Так если я буду в цикле с помощью str_replace() изменять значения
for(. ) $text .= str_replace(. ); И вот в $text и будут все 3 виджета.
Скажите, пожалуйста, а как связан tpl с версткой? Вот мы создали такой блок: <div> <p>Здравствуйте, <b>
Сначала делается вёрстка, а уже потом эта вёрстка разбивается на куски и отправляется в tpl-файлы.
Спасибо! Это я понимаю,но в самом же ptl файле не прописывается графика, содержимое и их свойства, и расположение на странице?