Можно ли кэшировать JavaScript, если он находится в теге body HTML-страницы?

Я читаю это Как ускорить рендеринг HTML, в котором говорится что скрипты в теге HEAD можно кэшировать.

Можно ли кэшировать JavaScript в теге BODY? Если нет, то почему YUI рекомендует размещать скрипты в теге body?


person Community    schedule 25.04.2011    source источник


Ответы (3)


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

Ответ, по большей части, заключается в том, что вы не можете кэшировать JavaScript, встроенный в HTML-код (в разделе HEAD или где-либо еще). Чтобы сделать его кэшируемым, вам нужно поместить его во внешний файл, но тогда браузеру нужно будет сделать дополнительный HTTP-запрос, чтобы получить JavaScript в первый раз.

person Emil Vikström    schedule 25.04.2011
comment
Дополнительным преимуществом извлечения javascript во внешние файлы является возможность обслуживать его из другого домена или CDN для ускорения доставки в браузер. - person Jakub Konecki; 07.06.2011
comment
Еще одно преимущество заключается в том, что вам не нужно беспокоиться об экранировании XHTML/экранировании/сокрытии двойного XHTML/HTML от старых браузеров. - person John Dvorak; 21.07.2012

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

Он может быть закэширован, если он встроен в саму страницу (т. е. между <script> и </script>, а не в конце src="..."), но только если кешируется вся страница и ее нельзя будет повторно использовать между страницами.

Для кэширования не имеет значения, находится ли <script src="..."></script> в голове или в теле.

person Quentin    schedule 25.04.2011
comment
+1 Внешние файлы скриптов можно кэшировать, встроенные скрипты будут кэшироваться только как часть этой одной страницы. - person Fenton; 07.06.2011
comment
Я предполагаю, что вы путаете кеширование (в HTTP) с кешированием (в компилированном байт-коде). Совершенно очевидно, что встроенные строки ‹script› не могут кэшироваться HTTP между страницами. Поэтому я предполагаю, что он имеет в виду ссылочные файлы из скрипта и, возможно, даже загруженные XHTTP ajax загруженные файлы js. - person Lothar; 21.05.2017
comment
@Lothar - Нет. Ничто в контексте не говорит об этом. - person Quentin; 21.05.2017

Приятель, я думаю, ты мог неправильно понять, что сказал Рич. Он сказал, поместите JavaScript во внешний файл и свяжите его с головой.

Это отличается от размещения JavaScript в теге скрипта в теле страницы.

Было бы разумно поместить JavaScript в тег script в теле страницы, если он используется только на этой странице. На самом деле, если бы он использовал только одну эту страницу, размещение ее во внешнем файле не было бы оптимизацией. Дополнительный запрос GET для файла JS будет почти одновременным в Firefox, Opera, Safari, но нет в IE6. Причина в том, что в IE6 всего несколько (2) потоков для загрузки файлов, тогда как в Firefox их до 16. Вот почему наличие отдельного файла для кода страницы было бы шагом назад. потому что это может фактически замедлить загрузку страницы.

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

Думаю, именно это он и имел в виду. Это помогает?

person Richard Kernahan    schedule 25.04.2011