Недостатки
Используем атрибут defer тега script
Работает только в IE
Используем document.write() для подключения тега script
Неблокирующее поведение возможно только в IE ( через defer )
Не рекомендуется широко использовать document.write
Используем XMLHttpRequest для получения тела скрипта, затем его исполняем через eval()
«eval() — зло» (долго выполняется, есть потенциальная угроза взлома при передаче «неправильных» данных)
Используем XHR-запрос для получения тела скрипта, затем создаем новый тег script и устанавливаем его содержание
Еще сложнее, чем предыдущий случай
Загрузка скрипта в iframe
Сложно
Издержки на создание iframe
Таблица 7.1 . Сравнение методов «отложенной» загрузки JavaScript -файлов
В будущем
В будущие версии Safari и IE8 уже внесены изменения, которые коснулись способа загрузки скриптов. Идея заключается в том, чтобы загружать скрипты параллельно, но исполнять в той последовательности, в которой они находятся на странице. По всей видимости, в один прекрасный день проблема блокирующих скриптов при загрузке станет попросту неактуальной, потому что будет касаться только пользователей IE 7 и младше или Firefox 3 и младше. Пока же наиболее простым способом решения данной проблемы является применение динамического тега .
7.2. Основы «ненавязчивого» JavaScript
Веб-разработка в последнее время существенно изменилась: мы прекратили смешивать содержание, оформление и функциональность, и, таким образом, менять дизайн и верстку по всему сайту стало легче — для этого нужно просто изменить таблицу стилей. А дополнительная функциональность может быть легко добавлена в уже существующий файл скриптов или за счет подключения нового.
Давайте рассмотрим, как научиться использовать все преимущества современных браузеров, не ограничивая при этом пользователей более старых версий.
Javascript: храним отдельно
Одна из сильных сторон JavaScript заключается в том, что его можно поместить в отдельный файл. Как и для CSS это означает, что можно присвоить одну коллекцию функций для каждой страницы сайта, и если нам нужно изменить ее функциональность, можно сделать все это в одном документе, что предпочтительнее, чем перебирать все страницы и менять какой-то один участок кода на другой.
Например, мы можем подключить только один такой файл, который будет обеспечивать всю логику функционирования страницы в клиентском браузере:
Javascript — это расширение
Мы используем JavaScript, только чтобы улучшить уже существующую функциональность, так как мы не можем на него полностью полагаться. JavaScript может быть выключен или отфильтрован прокси-серверами и файерволлами компаний, обеспечивающих безопасность. Мы никогда не можем принимать JavaScript за данноcть.
Это не означает, что мы совсем не можем использовать Javascript, это лишь значит, что мы можем добавлять его только как дополнительную возможность. Страницы должны работать и при выключенном JavaScript — это одно из основных правил «ненавязчивого» JavaScript.
Давайте рассмотрим для примера следующий HTML-код:
Логин:
GПароль:
Если у пользователя отключен JavaScript (или он отрабатывает некорректно в силу особенностей различных браузеров), то зайти на сайт будет просто невозможно. И это только по причине неверного проектирования, а не ошибки на стороне сервера или неверного расположения элементов в дизайне.
Мы можем исправить этот фрагмент, заменив button на submit и добавив обработчик события submit для формы:
...
document.forms[0].onsubmit = checkform;