Незаметный JavaScript: <сценарий> наверху или нижняя часть HTML-кода?

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

88
задан Peter Mortensen 31 December 2010 в 15:59
поделиться

6 ответов

Существует две возможности для действительно незаметных сценариев:

  • включая внешний файл сценария через тег script в главном разделе
  • включая внешний файл сценария через тег script у основания тела (перед </body></html>)

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

, Если внешний сайт сценария находится на другом домене (как внешние виджеты) может стоить поместить его в нижнюю часть для предотвращения его загрузка задержки страницы.

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

85
ответ дан Leniel Maccaferri 24 November 2019 в 07:32
поделиться

Это так никогда не сокращается и не сухо - Yahoo рекомендует поместить сценарии непосредственно перед закрытием </body> тег, который создаст иллюзию, что страница загружается быстрее в пустом кэше (так как сценарии не заблокируют остальную часть загрузки документа). Однако, если у Вас есть некоторый код, Вы хотите работать на загрузке страницы, он только начнет выполняться после того, как вся страница загрузилась. Если бы Вы помещаете сценарии в эти <head> тег, они начали бы выполняться, прежде - так в запущенном кэше страница, будет на самом деле казаться, будет загружаться быстрее.

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

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

31
ответ дан Nima Derakhshanjan 24 November 2019 в 07:32
поделиться

Нет это не должно быть после </html>, поскольку это было бы недопустимо. Лучшее место для помещения сценариев является правильным перед </body>

, Это в основном, потому что большинство браузеров прекращает представлять страницу, в то время как они оценка сценарий, который Вы предоставляете. Так его OK для помещения не блокирующегося кода где угодно в страницу (я главным образом думаю о вещах, которые присоединяют функции к onLoad событие так как привязка события так быстра, что эффективно свободна). Большой уничтожитель здесь в начале страницы, включающей некоторый сценарий сервера рекламы, который может предотвратить любую страницу, загружающуюся, прежде чем реклама полностью загрузила, делая Ваш воздушный шар времени загрузки страницы

5
ответ дан Leniel Maccaferri 24 November 2019 в 07:32
поделиться

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

http://developer.yahoo.com/yslow/

5
ответ дан skaffman 24 November 2019 в 07:32
поделиться

При помещении его в нижнюю часть это загружается в последний раз, следовательно ускоряя скорость, что пользователь видит страницу. Это действительно должно быть перед финалом </html>, хотя иначе это не будет часть DOM.

, Если код необходим немедленно, хотя, затем помещает его в голову.

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

2
ответ дан Rich Bradshaw 24 November 2019 в 07:32
поделиться

Как уже говорили другие, поместите его перед закрывающими тегами body html .

На днях нам приходили многочисленные звонки от клиентов, которые жаловались на их сайты. медленный. Мы посетили их локально и обнаружили, что загрузка одной страницы заняла 20-30 секунд. Думая, что серверы работают плохо, мы вошли в систему - но веб-серверы и серверы sql работали на ~ 0%.

Через несколько минут мы поняли, что внешний сайт не работает, на который мы ссылались для тегов отслеживания Javascript. Это означало, что браузеры нажимали на тег script в разделе head сайта и ожидали загрузки файла сценария.

Итак, по крайней мере для сторонних / внешних сценариев, я рекомендую разместить их как последнюю вещь на странице. Тогда, если они были недоступны,

20
ответ дан 24 November 2019 в 07:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: