Тег шаблона (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) содержимое в дерево документа.
На счёт noframes не знаю, но содержимое noscript очень любят поисковики и будет нехорошо, если шаблон посчитается содержимым страницы.
Комментарий для splurov.livejournal.com:
Содержимое любого тега, включая предложенный TEMPLATE, про индексируется поисковиком. ничего страшного, веб-приложения не для поисковиков делаются.
Про NOFRAMES вспомнил, что, быть может, фреймы не поддерживает Опера Мини?
Проверил — рендерит! Хоть и без скроллинга внутри. Аццкий всё же браузер.
Комментарий для shaltai-boltai:
Интересно, какова будет судьба этого браузера в связи с отказом «Оперы» от собственного движка?
Ааа, точно! Я в панике. Другие мобильные браузеры меня не устраивают категорически.
Желаю чувакам найти правильное решение.