CSS-live.ru

Главный секрет HTML5

Пришла пора открыть главный секрет HTML5: его не существует. По крайней мере, в том виде, о котором громче всего говорят. И дело не в том, что "спецификация еще не готова". И даже не в том, что ни один браузер пока не набирает максимума в этом забавном тесте. И даже не в том, что для него существуют (как минимум) две разные спецификации, у одной из которых вообще нет никаких цифр в названии.

И тем не менее, HTML5 повсюду. Даже там, где его не ждали. Даже там, где нет модного короткого доктайпа <!DOCTYPE html> (кстати, тоже без цифры 5), даже без модных "семантичных" (хотя об их смысле не всегда могут договориться сами разработчики спецификаций, не говоря уже о простых вебмастерах) элементов типа <article> и <nav>. Даже в тех браузерах, где эти новые теги и не работают без пинка. Как это может быть?

Разгадка в том, что других сортов HTML, кроме HTML5… не существует еще больше. По крайней мере, в реальности, а не на бумаге.

В чем проблема старых языков разметки?

Любой язык работает (передает информацию) лишь тогда, когда является общим для отправителя и получателя, когда они трактуют его одинаково. Например, как узнать, что внутри коробочки с подписью "Gift" — подарок или яд? Нужно знать, на каком языке подписал ее отправитель — на английском или на немецком.

А основные "получатели сообщений" на языке (X)HTML — это браузеры. Так вот: ни один браузер не "понимает" на 100% того, что заложено в старых версиях типа HTML4 и XHTML1 так, как это там задумывалось.

Язык HTML4.0x (как до него HTML2–3.2) был описан на базе более общего языка SGML — своего рода "конструктора" для языков разметки, полного вольностей и неочевидностей. Например, кроме неявного закрытия (и даже открытия) тегов в нем была возможность сокращенной записи тега — <tag/содержимое тега/ (именно так: первым слешом заканчивается открывающий тег, а второй слеш стоит вместо закрывающего, и никаких угловых скобок больше не нужно!). Был особый смысл у двойного дефиса в комментариях и т.д. Но вот перекрытия тегов (<a><b>…</a></b>), вопреки популярной легенде, даже SGML не разрешал.

Но парсить (разбирать) даже правильный SGML, из-за всей этой сложности, было адом. Вдобавок, древние кодеры (да и немалый процент нынешних) писали не на правильном HTML, а на каком-то его "олбанском" диалекте). Поэтому браузеры тоже "научились" понимать HTML "по-своему". Например, тег — только то, что в угловых скобках, а слеш в открывающем теге — "глюк", который нужно игнорировать. Кстати, именно благодаря этому страницы, написанные по правилам XHTML, отображаются в HTML-браузерах как задумано (как минимум, почти). Потому что, разбирай их браузеры по SGML-правилам — все эти концевые слеши в <br/>, <img/> и т.п. воспринимались бы как конец тега, и на экран посыпались бы значки ">"!

Кстати, про XHTML. Появился он именно как ответ на сложность SGML-парсинга, на волне моды на XML. XML — тоже обобщенный, универсальный "конструктор" языков разметки, основанный на всё том же SGML, но упрощенный до предела, "вычищенный" от всех вольностей и почти всех неоднозначностей. Открыть тег — только <tag>, закрыть — </tag>, пустой элемент — <tag></tag> или <tag/>, и т.д. А нарушение любого из этих правил — расстре отказ от дальнейшего разбора кода вообще. И первая версия XHTML была ничем иным, как буквальным переводом HTML4.01 в синтаксис XML — вплоть до набора тегов и атрибутов для каждой разновидности, с точностью до регистра. В 1.1 этот набор попытались раскидать по смысловым модулям, но суть осталась той же.

Разработчики XHTML понимали, что браузеры сразу на XML-разбор не перейдут, что какое-то время странички придется разбирать по-старому. И предусмотрели в спецификации целый раздел с правилами, соблюдение которых делало странички худо-бедно понятными для старых браузеров (тех самых, не понимающих SGML — иначе совместимость "накрылась" бы сразу, но всё равно по умолчанию она не гарантировалась!). Естественно, ни о каких преимуществах XML (простой разбор, интеграция с другими языками, проверка ошибок и т.п.) речь в этом случае не шла — не до жиру. Да и с полноценным XHTML на деле всё оказалось не так уж радужно, как в теории (у браузеров были проблемы с поддержкой скриптов в нем, фатальные ошибки могли возникнуть по вине файрволла, криво вырезающего баннеры, и т.п.). Вот и получилось, что странички "разговаривали" кто на чём — кто на ломаном HTML4, кто на ломаном (во всех смыслах) XHTML1 — а браузеры пытались понять их, как могли (и часто понимали совсем не так, как задумывал автор).

Красная пилюля

И вот WHATWG собрались и положили конец безобразию. А именно взяли и написали свой алгоритм разбора. Чуть сложнее XML, но намного проще SGML, и не привязанный ни к какому "конструктору" типа них, зато максимально приближенный к реальному поведению браузеров. Ну и с запасом на будущее.

HTML5 Logo

И все новые браузеры (FF4+, Chrome 7+, Opera 11.6+ и IE10+) разбирают любые странички с типом text/html (что бы ни стояло у них в доктайпе) по этому новому универсальному алгоритму. А все старые — по очень похожему на него. Они могут не знать новых тегов, но по крайней мере концевые слеши понимают точно так же, потому что новый алгоритм сам во многом списан с них. Вот и получается, что "ультрановый" HTML5, который "еще далеко не стандарт", на самом деле гораздо ближе к реальности, чем "старые и проверенные" HTML4 и XHTML1!

Таким образом, даже если вы не используете ни одного нового модного тега — на самом деле вы пишете HTML5. Потому что скорее всего (а через полгода-год — почти гарантированно) браузеры поймут эту страничку как HTML5. Даже если у нее доктайп старой версии. Больше того — доктайпы XHTML 1.0 Strict, XHTML 1.1 или HTML4.0x Strict официально разрешены для HTML5. Т.е. HTML5 с ними может быть валиден! Вот пример из портфолио автора этого сайта (чтоб далеко не ходить). Валидатор, конечно, удивленно таращится на лишние буквы в доктайпе — но это не ошибка, а всего лишь предупреждение.

Так что HTML5 — это не короткий доктайп и тем более не модные новые теги. Это прежде всего единообразие понимания страниц, понемногу приходящее на смену старому разнобраузерному бардаку. И оно не спрашивает, готовы вы к нему или нет, собираетесь вы на него "переходить" или хотите продолжать "по старинке" — оно просто наступает. Как любое будущее.

Шумовые эффекты

А как же все эти замечательные фичи, о которых только и трещат блоги и твиттеры в вебмастерском сообществе, о которых наперебой заливаются восторженные статьи, а Эпл, Гугл и Микрософт как один штампуют умопомрачительные рекламные презентации, спросите вы? Все эти canvas-ы, drag-and-drop'ы, локальные хранилища, слайдеры и выпадающие календарики, произвольные контекстные меню, wysiwyg-редактирование, Web Workers, Web Sockets и всякий прочий кроссдоменный AJAX? А эти фичи тоже просто есть (хотя и не везде пока). И многие из них не имеют никакого отношения к спецификации HTML5, а некоторые и никогда не имели. Часть из них входит в спецификацию "живого стандарта HTML", разрабатываемую WHATWG (которая никогда не будет закончена совсем, но в любой момент считается достаточно готовой для реализации!), часть не входит даже туда. И вообще большинство этих фич относится не к HTML даже, а к DOM и Javascript).

А что маркетологи и рекламисты объединяют это всё в одну кучу под звучным названием "HTML5" — так это их работа, придумывать звучные слова для запудривания мозгов не разбирающимся в теме людям, разве можно за это на них обижаться, в самом деле?

Тем более нам. Тем более теперь, когда мы-то уже знаем главный секрет HTML5… )

P.S. Это тоже может быть интересно:

20 комментариев

    1. Смысл как раз примерно в этом, так что вы его отлично уловили :)

      Ну и еще в том, что будущее наступает независимо от нашего желания и мы уже давно делаем странички на новом HTML, даже если об этом не подозреваем и не пользуемся его распиаренными фичами.

  1. По-моему, в статье перепутано влажное с мягким.

    HTML5 это стандарт. Стандарт W3C. Он существует и развивается.

    Да, WHATWG перешла на живой стандарт, лишенный версионности, а w3c — нет. И ква? Это помоему разжевали и пережевали много месяцев назад, когда собственно WHATWG отказалась от версионности. Тогда как раз еще всякие красивые значки для HTML5 на сайте W3C опубликовали и все по этом поводу ми-ми-ми-кали.

    То о чем ты говоришь в статье, строго говоря, парсер. Если я правильно понял о чем речь. Который так или иначе имплементирует стандарт. И, кстати, у каждого вендора *свой*. Особенный, уникальный и неповторимый.

    И да, HTML5 называют что ни попадя. Но те кто мало мальски знаком с вопросом понимают, что web storage или сокеты это вполне самостоятельные спеки.

    В общем не знаю, что мне дало прочтение этой статьи.

    1. Спасибо за отзыв!

      Согласен, что в статье влажное и мягкое разделено недостаточно:). Но моей главной целью было отделить их обоих от «газообразного» — реальные спеки HTML5/ЖHTML (и смежные технологии) от представлений людей, не знакомых с вопросом (которые «ждут, когда HTML5 будет готов, чтобы перейти на него и использовать все его фичи, которые постоянно рекламируют»).

      Вторая часть статьи, про парсер — вольный пересказ заметки http://friendlybit.com/html/html5-is-not-an-option/, которая в свое время меня впечатлила и, судя по многочисленным репликам на том же форуме htmlbook.ru, по сей день актуальна. Парсеры, возможно, и уникальные, но реализуют они один и тот же алгоритм, жестко описанный в стандарте и легко проверяемый несложным тестом http://hsivonen.iki.fi/test/moz/detect-html5-parser.html (т.к. новый стандарт едва ли не в большей мере для браузеров, чем для авторов). Ну и подчеркнуть универсальный и эволюционный характер новых стандартов — благодаря чему он оказывается ближе к реальности, чем идеализированные HTML4/XHTML1 — на мой взгляд, тоже было не лишним. Для очень многих новичков HTML5 начинается с новых тегов, и то, что многие существующие страницы уже являются HTML5 (валидным!) по построению стандарта — для многих как минимум неочевидно.

      Я надеялся, что для таких людей статья как раз послужит стимулом ознакомиться с вопросом получше. Признаю, что получилось сумбурновато. Буду благодарен за подсказки, как подать этот же материал (или что заменить/дополнить), чтобы стало лучше!

      1. >т.к. новый стандарт едва ли не в большей мере для браузеров, чем для авторов
        Вообще на сайте w3c есть стандарт для вендоров (http://www.w3.org/TR/2011/WD-html5-20110525/) и для разработчиков (http://www.w3.org/TR/2011/WD-html5-author-20110809/), если что.

        p.s. я вообще то тоже считаю, что html5 начинается с новых «клеви сочни семантични фруктови» тегов и коротенького доктайпа :D Вникать в особенности поведения парсеров новичкам точно не следует.

        1. Есть такие — в первом я насчитал 1,3 млн. знаков (и ссылка на «полную спецификацию»), во втором 2,2 млн. Что, имхо, подтверждает мой тезис, что почти половина нового стандарта — для браузеров :)

          Насчет парсеров — вникать в особенности, может, и не стоит, но понимать реальность («какой язык услышат и поймут браузеры»), на мой взгляд, вредным точно не будет. XHTML ведь в свое время рекламировали именно «быстрым парсингом» и т.п. — даром что в 99% случаев это не работало. А тут, можно сказать, впервые теория и практика идут рука об руку. Чем плохо знать это?

          И преимущество короткого доктайпа, имхо, легче оценить, если понимать, что он не «включает какой-то новый особый режим», а является минимально достаточным способом включить в точности тот же режим, что включается для HTML4 Strict/XHTML1 Strict. С бонусом в виде валидности autocomplete, contenteditable и прочих удобностей (в т.ч. банановых).

          С радостью выслушаю, где я в корне неправ и чего принципиального упустил! :)

  2. SilentImp неодобрительно смотрит на «Ваш комментарий ожидает одобрения.»
    Долой премодерацию!

    1. Антон, это странно на самом деле. Потому что у нас вроде не стоит премодераций никаких. Постараюсь выяснить этот вопрос. Спасибо, что написал.
      Вопрос решён.

  3. Не совсем понял. Но ведь браузеры до сих пор по-разному отображают сайты со строгим и переходным доктайпом, разве нет?

    1. Со строгим и переходным — да (в Standards mode и Almost Standards mode соответственно). Короткий <!DOCTYPE html> по действию эквивалентен строгим. Какие доктайпы включают нестандартные режимы, зафиксировано в сабжевом стандарте, так что новый парсер в курсе.

      В IE6-7 для всех этих доктайпов режим один (называется стандартным, но по сути ближе к «почти стандартному»).

      А что именно в статье смутило? Я поправлю, чтоб было яснее…

  4. Весьма интересная точка зрения, хотя суть сводится к одинаковым входам-выходам. Согласен с автором в одном-нет и никогда не было единого стандарта, да и не будет в обозримом будущем, есть его разновидности ( прямые ручки из колен) и попытка придумать «USB». Html5 или там 10 по сути и будут различаться тем, что рано или поздно все сведется к лицензированию и стандартизации кода, останется лишь придумывать новые названия ( в рекламных целях).

    1. Да, пожалуй стоит сказать про то , что html5 делает ВСЁ, кроме того, что нужно. По сути html 5 со своими «шумелками» — это попытка разобраться со всеми предыдущими «стандартами», так сказать попытка допилить тот же html4 или понять как перевести хлам со староалбанского на более менее человеческую форму без дополнительных фич размером с самосвал. Только допиливают обычно рабочий вариант, хотя и так сойдет :)

    2. На всякий случай: автор не утверждал, что «нет и никогда не будет единого стандарта». Автор пытался показать, что старые стандарты в действительности понимались браузерами не так, как самими этими стандартами предполагалось. Получилась парадоксальная ситуация, что новые, еще не утвержденные стандарты оказались ближе к реальности (т.к. написаны с оглядкой на нее), чем давно утвержденные и «проверенные временем».

      Приколы с лицензированием, конечно, еще будут подгаживать счастью разработчиков (те же кодеки для <video>…), но в таких основополагающих (я на этом настаиваю) вещах, как парсинг разметки в DOM, можно считать, что в главном всё уже устаканилось.

  5. Кто писал эту статью? Читать просто тяжко. Наймите Вы копирайтера нормального. Пускай он нормально доработает текст. Такое ощущение, что «графоман» писал статью. В целом сайт хороший.

    1. Писал я. Признаю, что текст далек от идеала, с радостью выслушаю предложения по улучшению. Что особенно раздражает — длинные предложения, повторяющиеся обороты, слова-паразиты? Или само содержание текста вызывает дискомфорт своей неожиданностью, непохожестью на «то, чему нас учили годами»?

Добавить комментарий для SelenIT Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Получать новые комментарии по электронной почте. Вы можете подписаться без комментирования.