Статьи

Почему встроенный код CSS и JavaScript такой плохой

Когда я просматриваю веб-сайты, а также в своих собственных проектах с несколькими разными членами команды, я почти постоянно сталкиваюсь с тем, от чего веб-разработчики действительно должны воздерживаться: встроенное моделирование и встроенный код 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- кода, и вы, а также ваша команда и посетители веб-сайта сразу почувствуете себя лучше.