Defer, Async и PageSpeed Insights

0

Я пытаюсь оптимизировать скорость загрузки страницы, используя рекомендации по параметрам PageSpeed Insights, в частности, отложить сценарии JavaScripts, чтобы не блокировать отображение содержимого страницы.

Таким образом, похоже, что HTML5 представил функцию preatty cool, async атрибут, который позволяет загружать скрипты асинхронно в "хаотичном" режиме. Существует еще один атрибут, defer, который загружает их также асинхронно, но в "упорядоченном" режиме (как я понял из этой статьи).

Итак, я пришел к выводу, что

  1. Всегда используйте (для каждого <script src='//////my.js'>) в defer атрибута.
  2. В случае, если сценарий не является критическим для нагрузки (например, jQuery или jQuery-ui), можно использовать атрибут async.

Это правильный вывод?

PS.

Бесплатный вопрос:
Является ли факт добавления сценариев в конце документа, автоматически "разблокирует" оформление документа? Как я мог понять, некоторые скрипты блокируют рендеринг, без различия их местоположения в документе (<head> или непосредственно перед </body>)...

  • 0
    Почему бы jQuery не быть «критичным к нагрузке», если вы используете $ а он не загружен, мне это кажется довольно критичным?
  • 0
    нагрузка критическая, как у jQuery :)
Показать ещё 4 комментария
Теги:
asynchronous

1 ответ

1

1. Всегда используйте (для каждого <script src='//////my.js'>) атрибут <script src='//////my.js'>.

Вы должны только откладывать сценарии, которые можно отложить. В некоторых случаях вам может потребоваться гарантировать порядок выполнения или полагаться на функции, которые должны выполняться в строке. Например, скрипты, вызывающие document.write не должны откладываться.

2. В случае, если сценарий не является критическим для нагрузки (например, jQuery или jQuery-ui), может использоваться атрибут async.

"критическая нагрузка" не имеет какого-либо конкретного значения, поэтому это плохой выбор фразировки. async следует использовать для скриптов, которые могут выполняться в любом порядке и не зависят от других скриптов.

  • 0
    как я понял, 'defer' гарантирует порядок выполнения "между различными сценариями" ... Я согласен, что если это "явно встроенный" сценарий, defer не должен использоваться ... но иногда его сложно узнать априори ...
  • 0
    @serhio, то, что я имел в виду под «порядком гарантированного выполнения», заключается в том, что скрипт может полагаться на состояние DOM до того, как DOM завершит загрузку. Даже если другие сценарии будут выполняться в том же порядке, DOM будет находиться в другом состоянии из-за отсрочки.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню