Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Существует две возможности для действительно незаметных сценариев:
</body></html>
) второе может быть быстрее, поскольку исходное исследование Yahoo показало, что некоторые браузеры пытаются загрузить файлы сценария, когда они поражают тег script и поэтому не загружают остальную часть страницы, пока они не закончили. Однако, если Ваш сценарий имеет 'готовую' часть, которая должна выполниться, как только DOM готов, Вы, возможно, должны иметь его в голове. Другой проблемой является расположение - если Ваш сценарий собирается изменить макет страницы, Вы хотите загруженный как можно раньше, таким образом, Ваша страница не проводит долгое время, перерисовывая себя перед Вашими пользователями.
, Если внешний сайт сценария находится на другом домене (как внешние виджеты) может стоить поместить его в нижнюю часть для предотвращения его загрузка задержки страницы.
И для любых проблем производительности делают Ваши собственные сравнительные тесты - что может быть верным когда-то, когда исследование сделано, мог бы измениться с Вашей собственной локальной установкой или изменениями в браузерах.
Это так никогда не сокращается и не сухо - Yahoo рекомендует поместить сценарии непосредственно перед закрытием </body>
тег, который создаст иллюзию, что страница загружается быстрее в пустом кэше (так как сценарии не заблокируют остальную часть загрузки документа). Однако, если у Вас есть некоторый код, Вы хотите работать на загрузке страницы, он только начнет выполняться после того, как вся страница загрузилась. Если бы Вы помещаете сценарии в эти <head>
тег, они начали бы выполняться, прежде - так в запущенном кэше страница, будет на самом деле казаться, будет загружаться быстрее.
кроме того, полномочие помещения сценариев внизу страницы не всегда доступно. Если необходимо включать встроенные сценарии в представления, которые зависят от библиотеки или некоторого другого кода JavaScript, загружаемого прежде, необходимо загрузить те зависимости в эти <head>
тег.
, В целом, рекомендации Yahoo интересны, но не всегда применимы и должны быть рассмотрены в зависимости от конкретного случая.
Нет это не должно быть после </html>
, поскольку это было бы недопустимо. Лучшее место для помещения сценариев является правильным перед </body>
, Это в основном, потому что большинство браузеров прекращает представлять страницу, в то время как они оценка сценарий, который Вы предоставляете. Так его OK для помещения не блокирующегося кода где угодно в страницу (я главным образом думаю о вещах, которые присоединяют функции к onLoad
событие так как привязка события так быстра, что эффективно свободна). Большой уничтожитель здесь в начале страницы, включающей некоторый сценарий сервера рекламы, который может предотвратить любую страницу, загружающуюся, прежде чем реклама полностью загрузила, делая Ваш воздушный шар времени загрузки страницы
Если Вы хотите переделать положение своих сценариев, YSlow является большим инструментом для предоставления Вам аромат, если это собирается улучшить или повредить производительность. Помещение JavaScript в определенных положениях документа может действительно уничтожить время загрузки страницы.
При помещении его в нижнюю часть это загружается в последний раз, следовательно ускоряя скорость, что пользователь видит страницу. Это действительно должно быть перед финалом </html>
, хотя иначе это не будет часть DOM.
, Если код необходим немедленно, хотя, затем помещает его в голову.
Лучше помещать вещи как виджеты блога в нижней части так, чтобы, если они не загружаются, она не влияла на удобство использования страницы.
Как уже говорили другие, поместите его перед закрывающими тегами body html .
На днях нам приходили многочисленные звонки от клиентов, которые жаловались на их сайты. медленный. Мы посетили их локально и обнаружили, что загрузка одной страницы заняла 20-30 секунд. Думая, что серверы работают плохо, мы вошли в систему - но веб-серверы и серверы sql работали на ~ 0%.
Через несколько минут мы поняли, что внешний сайт не работает, на который мы ссылались для тегов отслеживания Javascript. Это означало, что браузеры нажимали на тег script в разделе head сайта и ожидали загрузки файла сценария.
Итак, по крайней мере для сторонних / внешних сценариев, я рекомендую разместить их как последнюю вещь на странице. Тогда, если они были недоступны,