Ненавязчивый JavaScript
Из Википедии, бесплатной энциклопедии
Стиль этой статьи неэнциклопедичен или нарушает нормы литературного русского языка. |
Ненавязчивый JavaScript (англ. unobtrusive JavaScript) — подход к web-программированию на языке JavaScript. Термин введён в 2002 году Стюартом Лэнгриджем[1]. Под принципами ненавязчивого JavaScript обычно понимают следующее:
- отделение функциональности веб-страницы («уровень поведения») от структуры, содержания и представления её же[2];
- наработанные методы по избежанию проблем традиционного программирования на JavaScript (таких, как зависимость от браузера и недостаток масштабируемости);
- техники «постепенного улучшения» (англ. Progressive enhancement) для поддержки пользовательских агентов, которые могут не в полной мере поддерживать функциональность JavaScript[3].
Предпосылки появления
[править | править код]![]() | В разделе не хватает ссылок на источники (см. рекомендации по поиску). |
Из-за непоследовательной реализации языка и объектной модели документа в браузерах JavaScript имел репутацию языка, непригодного для серьезного использования и разработки, что изменило появление основанных на стандартах веб-браузеров, AJAX и интерфейсов Web 2.0, сделав JavaScript важный инструмент, хотя этот язык программирования когда-то использовался для относительно простых и тривиальных задач, таких как проверка ввода на стороне браузера и декоративные элементы, с тех пор он используется для создания ядра функциональность сайта.
Цели
[править | править код]Работоспособность веб-сайта для наиболее широкой аудитории пользователей, включая доступность для пользователей с ограниченными возможностями, является главной целью ненавязчивого подхода. Достижение цели основывается на разделении представления и поведения, при котором поведение программируется с помощью внешних скриптов JavaScript и привязывается к семантической разметке[4].
За счёт применения ненавязчивого подхода легче достичь следующих результатов[4]:
- Доступность веб-сайта для большего числа пользователей;
- Гибкость при внесении изменений в документ, стили или скрипты;
- Эксплуатационная надёжность (robustness) и расширяемость, в том числе возможность постепенного улучшения;
- Повышение производительности, например, за счёт кэширования внешних скриптов.
Рекомендации
[править | править код]Крис Хейлман (Chris Heilmann), один из сторонников применения ненавязчивого подхода, в 2007 году составил для него семь правил[4]:
- Не делайте никаких предположений.
- Ищите зацепки (hooks) и отношения.
- Оставьте обход (traversing) экспертам.
- Понимайте браузеры и пользователей.
- Имейте представление о событиях.
- Играйте хорошо с другими.
- Проявляйте заботу о следующем разработчике.
Отделение поведения от разметки
[править | править код]Традиционно вызовы функций JavaScript размещались непосредственно в разметке документа. Пример ниже иллюстрирует типичную реализацию валидации полей формы:
<input type="text" name="date" onchange="validateDate(this);" />
При хорошо структурированном подходе к разработке разметка предназначена для описания структуры документа, но не его поведения. Смешивание структуры и поведения ведёт, среди прочего, к ухудшению поддерживаемости сайта. Происходит это по той же причине, что и в случае смешивания структуры и представления: если сайт содержит сотни полей с данными, добавление соответствующего атрибута onchange
к каждому (и модификация их позже в случае необходимости) может оказаться трудоёмкой процедурой.
Ненавязчивое решение заключается в программной установке обработчиков событий. Обычно это достигается логическим выделением элементов, для которых необходим тот или иной обработчик в класс с последующей обработкой:
<input type="text" class="validatedDate" />
Скрипт может просматривать все элементы input, относящиеся к классу validatedDate
и устанавливать для них нужный обработчик:
window.onload = function() { var inputs, i; inputs = document.getElementsByTagName('input'); for (i = 0; i < inputs.length; i++) { if (inputs[i].className == 'validatedDate') { inputs[i].onchange = function() { validateDate(); }; } } }; function validateDate(){ // логика обработчика }
Следующий скрипт специфичен для библиотеки JavaScript jQuery:
$(document).ready(function(){ $('input.validatedDate').bind('change', validateDate); }); function validateDate(){ // логика обработчика }
Поскольку атрибут class
отражает семантическую роль элемента, такой подход хорошо согласуется с рекомендациями W3C, основанными на современных стандартах.
Примечания
[править | править код]- ↑ Лэнгридж, Стюарт. Ненавязчивый DHTML и мощь маркированных списков (ноябрь 2002). Дата обращения: 4 июня 2009. Архивировано 1 апреля 2012 года. (англ.)
- ↑ Кейт, Джереми. Отделение поведения (20 июня 2006). Дата обращения: 4 июня 2009. Архивировано 1 апреля 2012 года. (англ.)
- ↑ Олсон, Томми. Вежливая деградация и постепенное улучшение (6 февраля 2007). Дата обращения: 4 июня 2009. Архивировано 1 апреля 2012 года. (англ.)
- ↑ 1 2 3 Johansen, 2010, Chapter 9. Unobtrusive JavaScript.
Литература
[править | править код]- Johansen, C. Test-Driven JavaScript Development. — Pearson Education, 2010. — 480 p. — ISBN 9780321684059.
Ссылки
[править | править код]- The Web Standards Project. The JavaScript Manifesto . Дата обращения: 5 апреля 2015. Архивировано 4 апреля 2015 года.