Разработка HTML5 базируется на ряде принципов проектирования, сформулированных в отдельной спецификации WHATWG3, которые в полном смысле слова олицетворяют собой новое отношение к практической реализации предлагаемых возможностей:
- совместимость:
- удобство в использовании;
- независимость от типа браузера;
- универсальность доступа.
Совместимость: идем проторенным путем
Не беспокойтесь — HTML5 не внесет неразберихи, свойственной любой револю- ции. Скорее, наоборот — обеспечение безотказной работы приложений является одним из ключевых принципов этой спецификации. Если окажется, что какие-то средства HTML5 не поддерживаются, то сбоя не произойдет, потому что система сможет продолжить работу в режиме корректного сокращения возможностей (graceful degradation), используя только те средства языка, которые ей фактически доступны. Кроме того, поскольку информация в виде HTML-содержимого накапли- валась в течение примерно 20 лет, то важное значение приобретает поддержка уже существующего контента.
На выявление и изучение характерных общих тенденций в имеющемся HTML- содержимом затрачиваются огромные усилия. Так, компания Google, исследовавшая частотную повторяемость наиболее употребительных имен идентификаторов в дескрипторах DIV, проанализировала миллионы веб-страниц и обнаружила, что некоторые из имен встречаются намного чаще других. Например, для обозначения заголовка содержимого часто используется элемент DIV id= "header". Мы уже подчеркивали, что HTML5 весьма прагматичен и ориентирован на решение прак- тических проблем, не правда ли? Так не проще ли сразу предусмотреть в языке элемент <header>?
Несмотря на то что многие новшества HTML носят довольно революционный характер, все же более подходящим для него определением будет не "революция", а "эволюция". В конце концов, имеет ли смысл заново изобретать велосипед? (Правда, если такое желание у вас есть, то хотя бы предложите намного лучший его вариант!) Если какой-либо способ решения определенных задач ранее уже получил широкое распространение, то почему бы не пойти проторенным путем и не включить его в спецификацию?
Удобство в использовании и принцип приоритетности
Процесс разработки спецификации HTML5 основывается на принципе очередности приоритетов всех заинтересованных сторон, и эта очередность такова, что наивысший приоритет отдается пользователям. Это означает, что при наличии любых сомнений принимаемые решения должны в первую очередь учитывать интересы пользователей, затем — разработчиков, после этого — реализаторов (производителей браузеров) и, наконец, органов, ответственных за разработку спецификации (W3C/WHATWG). Соображениям же "теоретической чистоты" в этом параде приоритетов отводится самое последнее место. Как следствие, спецификация HTML5 имеет преимущественно практическую направленность, хотя кое в чем она еще далеко не совершенна.
Рассмотрим конкретный пример. В HTML5 приведенные ниже фрагменты кода равносильны.
id="prohtml5" id=prohtml5 ID="prohtml5"
Безусловно, подобная вольность синтаксиса может вызывать возражения, но конечного пользователя все эти тонкости по большому счету не интересуют. Никто не собирается поощрять небрежность при написании кода, но если в данном случае потребовать соблюдения только какой-то одной из приведенных выше форм написания, то подобная строгость в некоторой степени сыграет против пользователя.
Разработка спецификации HTML5 также инициировала создание спецификации XHTML5, используя которую комплекты инструментальных средств для работы с XML смогут генерировать правильный HTML-код. Сериализация HTML- и XHTML- версий документа должна давать аналогичные DOM-деревья с минимальными различиями между ними. Очевидно, что синтаксис XHTML намного более строг, и код приведенных выше последних двух строк примера в нем был бы недопустимым.
Встроенная модель безопасности
Большое внимание уделяется тому, чтобы спецификация HTML5 обеспечивала безопасность уже сама по себе, без привлечения средств сторонних разработчиков. В каждой части спецификации содержится раздел, посвященный вопросам безопасности, причем эти вопросы всегда находятся на первом плане.
HTML5 вводит новую модель безопасности, основанную на понятии источника (origin), которая не только проста в применении, но и последовательно используется в различных библиотеках функций. С помощью этой модели безопасности удается делать то, что раньше, как правило, оказывалось невозможным. Она позволяет организовать безопасную передачу данных между доменами, не прибегая к использованию всякого рода нестандартных, остроумных, но крайне ненадежных в плане безопасности решений. В этом отношении мы уж точно не будем с грустью вздыхать, вспоминая о старых добрых временах.
Разделение представления и содержимого
Спецификация HTML5 знаменует гигантский шаг вперед в отношении последовательного разделения представления и содержимого. В HTML5 это разделение обеспечивается везде, где только возможно, причем это достигается за счет использования CSS. В действительности значительная доля средств представления содержимого, предусмотренных в более ранних версиях HTML, больше не поддерживается, но благодаря соблюдению уже упоминавшегося ранее принципа совместимости эти средства попрежнему будут работать. Вместе с тем, сама по себе эта идея далеко не нова и была взята на вооружение уже в процессе работы над спецификациями HTML4 Transitional и XHTML 1.1. В течение длительного времени она используется веб-дизайнерами в качестве одного из эталонов хорошей практики программирования, но в настоящее время значимость неукоснительного отделения представления от содержимого еще более возросла. С разметкой, обеспечивающей представление содержимого, связаны следующие проблемы:
- недостаточная доступность содержимого для людей с ограниченными возможностями;
- излишняя сложность (включение строковых стилей значительно затрудняет чтение кода);
- увеличение размера документа (в связи с повторением стилевого содержимого), что замедляет загрузку страниц.
Упрощение взаимодействия с браузерами
Все в HTML5 нацелено на максимальное упрощение и избежание ненужной сложности. Хотите знать основной девиз HTML5? "Проще — лучше! Упрощать везде, где только возможно". Вот лишь некоторые примеры реализации этих принципов:
- встроенные возможности браузера взамен сложного кода JavaScript;
- новый упрощенный дескриптор DOCTYPE;
- новое упрощенное объявление набора символов;
- мощные, но вместе с тем простые программные интерфейсы HTML5.
Кое-что из вышеперечисленного будет обсуждаться нами более подробно. Отмеченная простота далась за счет увеличения размера спецификации, поскольку для этого потребовалась гораздо большая детализация формулировок, чем в любой другой предыдущей спецификации HTML. Чтобы успеть обеспечить к 2022 году истинную независимость от типа браузера, в спецификацию HTML5 неизбежно требовалось включить бесчисленные описания вариантов допустимого поведения браузеров. Любая неопределенность сделала бы достижение поставленной цели просто невозможным.
Другой причиной большей детализации спецификации HTML5 по сравнению с ее предшественницами является стремление предотвратить возможность неправильного истолкования ее положений. Определения отличаются предельной четкостью формулировок, особенно во всем, что касается веб-приложений. Поэтому не удивительно, что объем спецификации составляет свыше 900 страниц! Кроме того, спецификация HTML5 предусматривает обеспечение безотказной работы приложений в соответствии с целым рядом усовершенствованных и весьма неординарных стратегий обработки ошибок. Вместо полного прекращения работы приложения в случае некорректного кода используется более прагматичный процесс корректной обработки ошибок (graceful error recovery), опять-таки с учетом того, что интересы конечного пользователя имеют наивысший приоритет. Например, ошибки в документах не будут приводить к катастрофическим сбоям, препятствующим отображению страниц. Для подобных случаев определены точные процедуры восстановления после сбоев, благодаря чему, в частности, браузеры смогут отображать "некорректную" разметку неким стандартным образом.