Если я сохраню JavaScript в нижней части или сохраню JavaScript в <head>внутри document.ready, это одно и то же? - PullRequest
7 голосов
/ 13 октября 2010

Если я сохраню код JavaScript внизу или оставлю код JavaScript в <head> внутри document.ready, это одно и то же?

Я запутался между этими двумя методологиями, http://api.jquery.com/ready/ иhttp://developer.yahoo.com/performance/rules.html#js_bottom.

Есть ли какая-то польза от размещения кода JavaScript внизу (непосредственно перед </body>), даже если я храню код внутри.

   $(document).ready(function() {
       // code here
   });

Поскольку JavaScript добавлен в

<head>
    <script type="text/javascript" src="example.js"></script>
</head>

Ответы [ 7 ]

5 голосов
/ 13 октября 2010

В общем, вы должны поместить файлы Javascript внизу вашего HTML-файла.

Это даже более важно, если вы используете «классические» файлы тегов <script>. Большинство браузеров (даже современных) блокируют UI thread и, следовательно, процесс рендеринга вашего HTML markup при загрузке и выполнении JavaScript.

Это, в свою очередь, означает, что если вы загружаете приличное количество Javascript вверху вашей страницы, пользователь прекратит «медленную» загрузку вашей страницы, потому что он увидит всю вашу разметку после весь ваш скрипт был загружен и выполнен.

Чтобы усугубить эту проблему, большинство браузеров не загружают файлы JavaScript в параллельном режиме. Если у вас есть что-то вроде этого:

<script type="javascript" src="/path/file1.js"></script>
<script type="javascript" src="/path/file2.js"></script>
<script type="javascript" src="/path/file3.js"></script>

ваш браузер будет

  • загрузить file1.js
  • выполнить file1.js
  • загрузить file2.js
  • выполнить file2.js
  • загрузить file3.js
  • выполнить file3.js

и при этом блокируется UI thread и процесс рендеринга.

Некоторые браузеры, такие как Chrome, наконец, начали загружать файлы сценариев в параллельном режиме, что делает эту проблему чуть менее важной.

Другой способ обойти эту проблему - использовать dynamic script tag insertion. Что в основном означает, что вы загружаете только один файл JavaScript через тег <script>. Этот скрипт (загрузчик) динамически создает теги <script> и вставляет их в вашу разметку. Это работает асинхронно и намного лучше (с точки зрения производительности).

2 голосов
/ 13 октября 2010

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

Различия заключаются в воспринимаемой скорости загрузки страницы.Если javascript последний, он не будет блокировать любой CSS, который пытается загрузить, который всегда должен быть вверху, и не будет блокировать любые изображения, которые необходимо загрузить.

Браузеры запрашивают только элементы какони находят их в HTML, но у них есть только ограниченное количество потоков загрузки (~ 10 в современных браузерах), поэтому, если вы делаете много запросов для изображений / CSS и JS, что-то может потеряться и воспринимается скорость / пользовательский опытзагрузки страницы вашей страницы будет принимать удар.

1 голос
/ 13 октября 2010

Важно учитывать, что на самом деле делает JavaScript на вашей странице, когда решаете, где его разместить. В большинстве случаев время загрузки и запуска JavaScript делает размещение в конце страницы более логичным. Однако, если отображение самой страницы зависит от вызовов Ajax или аналогичных, это может быть не так.

Вот хорошее чтение на тему document.ready(), не подходящее для всех JS.

1 голос
/ 13 октября 2010

Yahoo!Сайт разработчика говорит, что если вы поместите JavaScript внизу страницы, он не заблокирует загрузку других ресурсов браузером.Это сделает начальную загрузку страницы быстрее.

jQuery указывает функцию для загрузки, когда загружена вся страница.

Если у вас есть функция, которая выполняется при загрузке страницы, не имеет значения, включите ли вы ее в <head>или внизу страницы, он будет выполнен одновременно.

1 голос
/ 13 октября 2010

Это не то же самое, что событие ready, возникающее при построении дерева DOM, в то время как сценарии в конце страницы могут фактически выполняться позже.

В любом случае, они обе являются безопасными точками входа для выполнения вашего приложения.

0 голосов
/ 13 октября 2010

Даже если скрипт находится внизу HTML-документа, DOM может быть загружен не полностью. Все закрытые элементы над сценарием будут , как правило, готовы, событие готовности DOM может потребоваться в угловых случаях.

0 голосов
/ 13 октября 2010

Положение тега <script> не включает ваш скрипт, если вы используете document.ready.Кажется, JavaScript загружается быстрее, если его поместить до </body>, но я не уверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...