Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Тег шаблона (NOEMBED?)

Где-то видел спецификацию на тег TEMPLATE, для шаблонов в HTML. Его смысл в том, что содержимое не добавляется в DOM (дерево) документа, не засоряет дерево, что может быть очень полезно, если шаблонов много и веб-приложение активно работает с деревом. Работа с DOM одна из ресурсоёмких операций, ни к чему нагружать браузер ещё и шаблонами.

Традиционно в HTML4 для этого используют тег SCRIPT у указанием какого-нибудь несуществующего языка:

<script type="text/x-template" id="template-ok">
<div><div class="button">OK</div></div>
</script>

Либо используют комментарии (у Сергея Чикуёнка был рассказ про веб-читалку книг, там текст книги клался в комментарий, чтобы браузер его не парсил, книга большая и это занимало много времени), но к ним сложнее адресоваться (надо оборачивать тегом).

Был раньше такой нестандартный тег COMMENT, но его сейчас никто не понимает, даже Эксплорер прекратил его поддержку, в данном случае он бы пригодился.

Мне вчера ночью подумалось, что можно использовать и более лаконичные теги — NOFRAMES или NOSCRIPT. Первый показывает своё содержимое, если браузер не поддерживает фреймы, второй, если выключены скрипты. Если выключенные скрипты ещё встречаются у сетевых параноиков, то браузера без поддержки фреймов сейчас и не встретишь, а если таковые и есть, то веб-приложения им не понянуть.

Особенность же тегов в том, что они в нормальных условиях являются аналогом комментария, то есть не добавляют своё содержимое в DOM, поэтому они вполне пригоды на роль шаблонного тега.

<noframes id="template-ok">
<div><div class="button">OK</div></div>
</noframes>

<script>
alert(document.getElementById('template-ok').innerText); // содержимое шаблона
</script>

Не сказать, что это как-то по-особенному семантично или чем-то лучше тега SCRIPT (разве что короче), просто ещё один вариант.

Когда я уже дописал эту заметку, мне пришла в голову мысль, что а) тег NOEMBED был бы, наверное, более семантичем, чем NOFRAMES, он имеет отношение к встраиванию контента, а я совсем про него забыл, б) тег EMBED был бы, наверное, ещё более семантичен, но, к сожалению, он слишком тяжёл для браузера, надо испытывать, но я предполагаю, что даже если контент явно незнакомый, браузер всё равно попытается угадать что это. Но надо провести испытания, конечно же.

Так что, я бы остановился бы на NOEMBED. Во-первых, это тег ещё короче, во-вторых, обладает хоть какой-то семантикой, которую можно трактовать как не вставлять (no-embed) содержимое в дерево документа.

5 комментариев
Михаил Калашник (splurov.livejournal.com) 2013

На счёт noframes не знаю, но содержимое noscript очень любят поисковики и будет нехорошо, если шаблон посчитается содержимым страницы.

Евгений Степанищев (bolknote.ru) 2013

Комментарий для splurov.livejournal.com:

Содержимое любого тега, включая предложенный TEMPLATE, про индексируется поисковиком. ничего страшного, веб-приложения не для поисковиков делаются.

shaltai-boltai 2013

Про NOFRAMES вспомнил, что, быть может, фреймы не поддерживает Опера Мини?

Проверил — рендерит! Хоть и без скроллинга внутри. Аццкий всё же браузер.

Евгений Степанищев (bolknote.ru) 2013

Комментарий для shaltai-boltai:

Интересно, какова будет судьба этого браузера в связи с отказом «Оперы» от собственного движка?

shaltai-boltai 2013

Ааа, точно! Я в панике. Другие мобильные браузеры меня не устраивают категорически.

Желаю чувакам найти правильное решение.