Где должен быть JavaScript? - PullRequest
       13

Где должен быть JavaScript?

8 голосов
/ 18 апреля 2010

Я уже некоторое время делаю небольшой JavaScript (ну, больше похожий на jQuery), и меня всегда смущает одна вещь - куда мне помещать свои скрипты, в теге <head> или в <body> тег.

Если бы кто-нибудь мог прояснить этот вопрос, это было бы здорово. Пример того, что должно идти, где было бы идеально.

Ответы [ 2 ]

11 голосов
/ 18 апреля 2010

Рекомендации от google и yahoo говорят, что для производительности javascript всегда должен быть помещен во внешний файл и связан с вашей страницей с помощью тега <script>, расположенного по адресу нижняя часть HTML, перед закрытием элемента <body>.

Это позволяет браузеру отображать всю страницу сразу, а не останавливаться для оценки javascript.

9 голосов
/ 18 апреля 2010

Вы упомянули три места:

  1. В тегах;

  2. в HTML; и

  3. во внешнем файле.

Позвольте мне обратиться к каждому из них.

Рекомендуется иметь общий Javascript в одном или нескольких внешних файлах, и чем меньше файлов, тем лучше, поскольку каждый загруженный файл JS будет блокировать загрузку страницы до тех пор, пока этот файл JS не будет загружен.

Слово «обычный» чрезвычайно важно. Это означает, что вы не хотите помещать специфичный для страницы код Javascript во внешний файл по причинам кэширования. Допустим, у вас есть сайт с 1000 страниц. У каждой страницы есть свой JS-код. Это может быть либо 1000 разных файлов, либо один действительно большой файл, который выполняет много ненужного кода (например, ищет идентификаторы, которые не находятся на этой конкретной странице, но находятся на одном из 999 других). Ни один из этих результатов не является хорошим.

Первое дает вам небольшой импульс кеширования. Второй может иметь ужасное время загрузки страницы.

Итак, вы делаете все общие функции в одном файле JS, где этот файл JS only содержит функции. На каждой HTML-странице вы вызываете функции JS, необходимые для этой страницы.

В идеале ваши JS-файлы тоже эффективно кэшируются. Рекомендуется использовать заголовок HTTP Expires для далекого будущего и номер версии, чтобы JS-файл загружался только один раз каждым браузером независимо от того, сколько страниц они посещают. Когда вы изменяете файл, вы меняете номер версии, и это вызывает перезагрузку. Использование mtime (время последнего изменения файла JS) - это распространенная схема, в которой указаны URL-адреса, например:

<script type="text/javascript" src="/js/script.js?1233454455"></script>

, где это время генерируется автоматически. Ваш веб-сервер настроен на обслуживание файлов JS с соответствующим заголовком Expires.

Для наилучшего возможного смешивания внешних файлов и скриптов на странице (imho).

Последнее место, которое вы упомянули, было в теге. Здесь все зависит от того, какие библиотеки и фреймворки JS вы используете. Я большой поклонник jQuery, который поощряет ненавязчивый Javascript . Это означает, что вы (надеюсь) не помещаете никакой Javascript в свою разметку вообще . Так что вместо:

<a href="#" onclick="doStuff(); return false;">do stuff</a>

вы делаете:

<a href="#" id="dostuff">do stuff</a>

с Javascript:

$(function() {
  $("#dostuff").click(doStuff);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...