Когда я просматриваю веб-сайты, а также в своих собственных проектах с несколькими разными членами команды, я почти постоянно сталкиваюсь с тем, от чего веб-разработчики действительно должны воздерживаться: встроенное моделирование и встроенный код JavaScript.
Что такое встроенный стиль и встроенный JavaScript?
Давайте начнем с объяснения того, что я имею в виду, имея встроенные CSS и JavaScript: это когда вы интегрируете свой HTML- код напрямую с любым из них, в результате чего код представления и взаимодействия распространяется по всей странице. Как это:
<div style="width: 800px; margin: 1em auto; font: bold 1em/1.2 Verdana, Arial, Helvetica, sans-serif">
<div style="float: left; width: 400px; padding: 1em 2em; font-size: 0.9em">
<span id="get-shit" onclick="callSomeFunction()">News</span>
</div>
</div>
Что в этом плохого?
За исключением того, что он не очень красивый код и его трудно получить, у него есть некоторые реальные недостатки:
-
Размер файла
HTML
Ваш
HTML- код будет весить больше, то есть веб-страница, пронизанная похожим кодом, будет иметь размер в
КБ, который намного больше, чем необходимо.
Недостаток кеширования
-
HTML- код никогда не будет кэширован. В противоположность этому, внешние зависимости, такие как
файлы CSS и JavaScript, будут кэшироваться веб-браузером посетителя после первого посещения — это означает, что вместо загрузки большого количества лишнего
HTML- кода для каждой страницы вашего веб-сайта, которую посетитель посещает, он быстро извлечет все стили и взаимодействие локально из кэша веб-браузера.
Плохая доступность
Когда дело доходит до встроенного кода JavaScript, такого как в приведенном выше примере, он применяется к элементу, который не имеет встроенного обработчика резервного взаимодействия (т. Е. Как ссылка ведет вас по
URL-адресу, указанному в его
href
атрибуте и т. Д.). Это означает, что он не будет работать, если JavaScript по тем или иным причинам недоступен.
Сложное обслуживание кода
Когда дело доходит до внесения изменений в код, я уверен, что каждый веб-разработчик согласится с тем, что иметь код только в одном централизованном месте гораздо предпочтительнее, чем изменять абсолютно одинаковые фрагменты кода, распространяемые по всем файлам в Интернете. сайт. Поддержание кода, подобного приведенному выше, для всего веб-сайта было бы адом.
У всех сегодня есть JavaScript?
Во-первых: нет, они этого не делают. Второе: некоторые люди намеренно отключают его (например, расширение NoScript Firefox было загружено 31 млн. К этой дате). В-третьих, очень часто это зависит не от конечного пользователя, а от внешних обстоятельств, которые они не контролируют, что в той или иной степени приведет к недоступности JavaScript. Эти факторы:
- Антивирусные программы и брандмауэры слишком суровы с точки зрения безопасности JavaScript.
- Прокси-серверы компании отфильтровывают код (например, прочитайте важный урок об AJAX и доступности ).
- Другие настройки доступа в интернет компании, препятствующие правильному выполнению JavaScript.
Как вы должны развиваться
Любой достаточно опытный разработчик интерфейса знает, что он должен стремиться создать структуру, в которой контент ( HTML- код) полностью отделен от кода представления ( CSS ) и кода взаимодействия (JavaScript). Это означает, что, естественно, вы не можете полностью обрезать связи, но в вашем HTML не должно быть встроенного кода CSS или JavaScript .
Единственный приемлемые зависимости через id
и class
атрибуты CSS и JavaScript крючки-ин.
Взяв приведенный выше пример плохого кода, давайте перепишем его правильно:
<link rel="stylesheet" href="CSS/base.css" type="text/css" media="screen"> <script type="text/javascript" src="js/base.js"></script> <div id="container"> <div id="navigation"> <a id="get-news" href="news-proper-URL">News</a> </div> </div> /* CSS code, in separate file (base.css) */ #container { width: 800px; margin: 1em auto: font: bold 1em/1.2 Verdana, Arial, Helvetica, sans-serif; } #navigation { float: left; width: 400px; padding: 1em 2em; font-size: 0.9em; } /* JavaScript code, in separate file (base.js) */ window.onload = function () { document.getElementById("get-news").onclick = function () { // Get news through AJAX }; }
Немного лучше, не правда ли?
Когда использовать id
и когда использоватьclass
По сути, это очень просто. An id
является уникальным для веб-страницы, то есть он должен появляться только один раз. class
Атрибут, с другой стороны, может быть в документе , как столько раз , сколько необходимо. Мое эмпирическое правило заключается в том, что обычно я использую id
атрибут для больших блоков на веб-странице, таких как контейнер сайта, навигация, основное содержимое и т. Д. В противном случае я всегда использую class
атрибут.
Когда дело доходит до кода CSS , связать что-либо с чем-либо с этим классом в коде HTML очень просто. Однако, что касается доступа к JavaScript и DOM , встроенная поддержка этого не существует во всех веб-браузерах, поэтому я рекомендую функцию getElementsByClassName , которая также поддерживает некоторые другие полезные функции, недоступные ни в одной собственной реализации веб-браузера.
Обработка событий в JavaScript
Код в примере — это старый способ DOM уровня 1 для применения событий к элементу. Он отлично работает для одного события на элемент, но не в том случае, если у вас есть несколько событий, которые вы хотите применить, или риск того, что чужой код перезапишет ваше событие (или наоборот).
Чтобы не беспокоиться об особенностях обработки событий между реализациями веб-браузера (и поверьте мне, они есть ), я рекомендую вместо этого использовать библиотеку JavaScript, такую как DOMAssistant или jQuery .
Но как насчет крупных игроков, таких как Google?
Итак, к настоящему моменту вы, надеюсь, согласились со всеми моими аргументами и готовы окунуться в смелый новый развивающийся мир интерфейса. Но просто из любопытства вы взгляните на самый популярный в мире веб-сайт Google и подумаете:
Подожди минутку сейчас! Роберт поддерживает меня.
Стартовая страница, и особенно страница результатов поиска, заполнена встроенными стилями и событиями JavaScript. Если они делают это так, это должно быть лучшим способом, верно? Ну нет. У Google есть несколько безумно талантливых JavaScript-кодеров, а также гениев в других областях, но когда дело доходит до HTML и CSS , они на самом деле несколько печально известны среди талантливых разработчиков интерфейсов.
В августе пару лет назад мой друг Роджер переписал код Google с реальным правильным кодом , и он более подробно объясняет, что он сделал в своем посте.
В конце, тем не менее, мы должны учитывать невероятно большое количество посетителей, которые Google получает каждый день, и для них это все о производительности, производительности, производительности (для тех, кто заинтересован в углублении в это, пожалуйста, прочитайте Улучшение производительности вашего веб-сайта — советы и хитрости, чтобы получить хороший рейтинг YSlow ). Для них решающее значение имеет сокращение любого HTTP- запроса, хотя это не оправдывает отсутствие правильного кода.
Наиболее разумным вариантом для Google было бы иметь один style
блок, расположенный вверху их HTML- кода, и один JavaScript
блок, расположенный внизу их HTML- кода (подробнее о том, почему в разделе Где включить файлы JavaScript в документ ), и просто иметь id
и class
атрибуты для подключения этого кода.
В конце концов, я действительно думаю, что польза от наличия кода в любом месте HTML- кода незначительна, и, кроме того, как только мы говорим о возвращении посетителей (например, я посещаю Google каждый день) наличие внешних включений было бы более выгодно и значительно лучше как для производительности, так и для использования полосы пропускания. Кроме того, для сравнения, страница Google для мобильных устройств находится в гораздо лучшем состоянии, поэтому наличие обычной настолько бедной страницы действительно имеет какую-либо действительную мотивацию — я думаю, что это скорее отсталая, которую еще не видели должным образом (они Вы, вероятно, в ужасе от его изменения).
Вывод
Поэтому, как указано выше, обязательно включите весь свой
код CSS и JavaScript из внешних файлов. Начните сегодня! Удалите весь встроенный код от
HTML- кода, и вы, а также ваша команда и посетители веб-сайта сразу почувствуете себя лучше.