засахаренный script
Недавно Джон Резиг описал в статье «Degrading Script Tags» любопытную идею: использовать содержимое тега script
, подключающего внешний файл. У этого подхода два плюса: во-первых, становится возможно писать только один тег вместо двух, а во-вторых, текст «второго» скрипта не выполнится, если почему-то не загружен файл. Это сразу же пригодилось и Андрею Сумину для его библиотеки. А вот мне хочется покритиковать такой подход.
Во-первых, название «Degrading Script Tags» и предполагаемое поведение противоречит привычному веб-разработчикам смыслу «деградирующих элементов», тому, как обычно в html используется содержимое специфических тегов. Насколько я помню, если почему-то не проинициализировался object
, то его содержимое будет отображено, чтобы пользователь мог прочитать что-нибудь в духе «установите такой-то плагин для просмотра». А в предлагаемом подходе всё работает наоборот — содержимое выполнится, только если файл загружен успешно.
Во-вторых, эта вещь срабатывает для каждого файла по отдельности. То есть, в каждом внешнем скрипте, от которого мы хотим такого поведения, нам нужно прописывать те же самые две строчки инициализации.
И в-третьих, вызов document.getElementsByTagName
— не такая уж дешёвая операция, это я как неоднократно пострадавший за производительность яваскрипта говорю : ) А вызывать её для нескольких скриптов по очереди ещё хуже.
В общем, экономия одного тега — это просто смешной аргумент, а ради проверки на загруженность файла выписывать такие кренделя не стоит. Хотя на первый взгляд идея привлекательная, не спорю.