Де слід розмістити теги <script> у розмітці HTML?


1487

Коли вбудовувати JavaScript у документ HTML, куди правильно розмістити <script>теги та включений JavaScript? Здається, я нагадую, що ви не повинні розміщувати їх у <head>розділі, але розміщення на початку <body>розділу також погано, оскільки JavaScript доведеться проаналізувати, перш ніж сторінка буде повністю виведена (або щось подібне). Це , здається , залишити кінець цього <body>розділу в якості логічного місця для <script>тегів.

Так, де це правильне місце , щоб поставити <script>мітки?

(Це питання посилається на це питання , в якому було запропоновано переміщення викликів функції JavaScript з <a>тегів у <script>теги. Я спеціально використовую jQuery, але більш загальні відповіді також підходять.)


у випадку, якщо ви також просто шукаєте просте рішення, і ви використовуєте такий генератор на стороні сервера, як Jekyll, я рекомендую замість цього включити сценарій. так простіше!
Крегокс

Відповіді:


1861

Ось що відбувається, коли браузер завантажує веб-сайт із <script>тегом на ньому:

  1. Виберіть сторінку HTML (наприклад, index.html)
  2. Почніть розбирати HTML
  3. Аналізатор стикається з <script>тегом, що посилається на зовнішній файл сценарію.
  4. Браузер запитує файл сценарію. Тим часом, аналізатор блокує та зупиняє розбір іншого HTML на вашій сторінці.
  5. Через деякий час сценарій завантажується і згодом виконується.
  6. Аналізатор продовжує розбирати решту HTML-документа.

Крок №4 спричиняє погану роботу користувачів. В основному ваш веб-сайт припиняє завантаження, поки ви не завантажите всі сценарії. Якщо є одна річ, яку ненавидять користувачі, вона чекає завантаження веб-сайту.

Чому це взагалі трапляється?

Будь-який сценарій може вставити свій власний HTML за допомогою document.write()або інших маніпуляцій DOM. Це означає, що аналізатору доводиться чекати, поки сценарій буде завантажений і виконаний, перш ніж він зможе безпечно проаналізувати решту документа. Зрештою, сценарій міг би вставити власний HTML в документ.

Однак більшість розробників JavaScript більше не маніпулює DOM під час завантаження документа. Натомість вони чекають, поки документ буде завантажений, перш ніж його змінити. Наприклад:

<!-- index.html -->
<html>
    <head>
        <title>My Page</title>
        <script src="my-script.js"></script>
    </head>
    <body>
        <div id="user-greeting">Welcome back, user</div>
    </body>
</html>

Javascript:

// my-script.js
document.addEventListener("DOMContentLoaded", function() { 
    // this function runs when the DOM is ready, i.e. when the document has been parsed
    document.getElementById("user-greeting").textContent = "Welcome back, Bart";
});

Оскільки ваш браузер не знає my-script.js не збирається змінювати документ до його завантаження та виконання, аналізатор припиняє розбір.

Старовинна рекомендація

Старий підхід до вирішення цієї проблеми полягав у тому, щоб помістити <script>теги внизу вашого <body>, оскільки це забезпечує те, що аналізатор не буде заблокований до самого кінця.

У цього підходу є своя проблема: браузер не може почати завантаження скриптів, поки не буде розбір всього документа. Для великих веб-сайтів з великими сценаріями та таблицями стилів дуже важливою є можливість завантаження сценарію якнайшвидше. Якщо ваш веб-сайт не завантажиться протягом 2 секунд, люди перейдуть на інший веб-сайт.

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

Сучасний підхід

Сьогодні браузери підтримують сценарії asyncта deferатрибути. Ці атрибути говорять браузеру про безпечне продовження розбору під час завантаження скриптів.

асинхронізація

<script src="path/to/script1.js" async></script>
<script src="path/to/script2.js" async></script>

Сценарії з атрибутом async виконуються асинхронно. Це означає, що сценарій виконується відразу після його завантаження, не блокуючи браузер тим часом.
Це означає, що сценарій 2 завантажується та виконується перед сценарієм 1.

За даними http://caniuse.com/#feat=script-async , 97,78% усіх браузерів підтримують це.

відкладати

<script src="path/to/script1.js" defer></script>
<script src="path/to/script2.js" defer></script>

Сценарії з атрибутом відстрочки виконуються в порядку (тобто спочатку сценарій 1, потім сценарій 2). Це також не блокує браузер.

На відміну від сценаріїв асинхронізації, сценарії відстрочки виконуються лише після завантаження всього документа.

За даними http://caniuse.com/#feat=script-defer , 97,79% усіх браузерів підтримують це. 98,06% підтримують її хоча б частково.

Важлива примітка щодо сумісності браузера: в деяких обставинах IE <= 9 може виконувати відкладені сценарії не в порядку. Якщо вам потрібна підтримка цих браузерів, будь ласка, прочитайте це спочатку!

Висновок

Поточний стан сучасності полягає в тому, щоб помістити сценарії в <head>тег і використовувати атрибути asyncабо defer. Це дозволяє завантажувати ваші сценарії якнайшвидше, не блокуючи браузер.

Хороша річ у тому, що ваш веб-сайт все-таки повинен правильно завантажувати 2% браузерів, які не підтримують ці атрибути, прискорюючи інші 98%.


63
Я здивований, що ніхто не цитував пояснення Google ... developers.google.com/speed/docs/insights/BlockingJS
Casey Falk

6
Мені не ясно, що стосується DOM, а що ні. Ви можете уточнити? Чи безпечно робити асинхронне завантаження на щось на зразок jquery.js?
Дуг

7
@Doug Наприклад document.writeпрацює на домі . Питання не в тому, якщо сценарій маніпулює домом, а коли він це робить. Поки всі маніпуляції з домом відбуваються після початку domreadyподії, ви все в порядку. jQuery - це бібліотека, і як така не - або не повинна - сама маніпулювати домом.
Барт

24
Ця відповідь вводить в оману. Сучасні браузери не припиняють розбиратися, коли вони досягають тега синхронного скрипту, який може вплинути на HTML, вони просто припиняють рендерінг / виконання та продовжують оптимістично аналізувати, щоб почати завантажувати інші ресурси, які, ймовірно, будуть запитуватися згодом, якщо жоден HTML не вплине.
Фабіо Белтраміні

40
Чому атрибути asyncта deferатрибути ніде не використовуються? Я маю на увазі, я переглянув багато джерел HTML з Інтернету, і ніде не бачу asyncі deferатрибутів. ...?
john cj

239

Незадовго до закриття тега body, як зазначено в

http://developer.yahoo.com/performance/rules.html#js_bottom

Покладіть Сценарії знизу

Проблема, викликана сценаріями, полягає в тому, що вони блокують паралельні завантаження. Специфікація HTTP / 1.1 передбачає, що браузери завантажують не більше двох компонентів паралельно на ім’я хоста. Якщо ви подаєте свої зображення з кількох імен хостів, ви можете отримати більше двох завантажень паралельно. Поки сценарій завантажується, однак браузер не запускає жодних інших завантажень, навіть на різних іменах хостів.


7
Погодився з концепцією та її поясненням. Але що станеться, якщо користувач почне грати зі сторінкою. Припустимо, у мене є спадне меню AJAX, яке почне завантажуватися після появи сторінки користувачеві, але поки вона завантажується, користувач натискає на неї! А що робити, якщо "дійсно нетерплячий" користувач подає форму?
Hemant Tank

9
@Hermant Old коментар, але ви можете зробити фокус, відключивши поля за замовчуванням, а потім увімкніть їх за допомогою JS, коли DOM повністю завантажений. Саме цим, схоже, займається Facebook.
новато

2
Просто перевірив це на хромі, щоб перевірити, чи все одно це те саме. Це є. Тут ви можете перевірити відмінності у часі завантаження сторінки веб-переглядачів. stevesouders.com/cuzillion
cypher

46
Якщо це найкраща практика, чому переповнення стека включає всі їхні теги скриптів у <head>? :-P
Філіп

10
У деяких випадках, особливо у важких місцях з аяксом, навантаження на голову може насправді призвести до більш швидкого завантаження. Див: encosia.com/dont-let-jquerys-document-ready-slow-you-down (зверніть увагу , що «живий ()» функція застаріла в JQuery, але стаття все ще застосовується з «на ()» або « делегувати функцію). Завантаження в <head> також може знадобитися для гарантування правильної поведінки, як вказував @Hermant. Нарешті, modernizr.com/docs рекомендує розмістити свої сценарії в <head> з причин, роз'яснених на своєму сайті.
Натан

76

Теги сценарію, що не блокує, можна розміщувати майже будь-де:

<script src="script.js" async></script>
<script src="script.js" defer></script>
<script src="script.js" async defer></script>
  • async сценарій буде виконуватися асинхронно, як тільки він буде доступний
  • defer сценарій виконується, коли документ закінчив розбір
  • async defer сценарій повертається до поведінки відстрочки, якщо асинхронізація не підтримується

Такі сценарії виконуватимуться асинхронно / після того, як документ буде готовий, а це означає, що ви не можете цього зробити:

<script src="jquery.js" async></script>
<script>jQuery(something);</script>
<!--
  * might throw "jQuery is not defined" error
  * defer will not work either
-->

Або це:

<script src="document.write(something).js" async></script>
<!--
  * might issue "cannot write into document from an asynchronous script" warning
  * defer will not work either
-->

Або це:

<script src="jquery.js" async></script>
<script src="jQuery(something).js" async></script>
<!--
  * might throw "jQuery is not defined" error (no guarantee which script runs first)
  * defer will work in sane browsers
-->

Або це:

<script src="document.getElementById(header).js" async></script>
<div id="header"></div>
<!--
  * might not locate #header (script could fire before parser looks at the next line)
  * defer will work in sane browsers
-->

Сказавши це, асинхронні сценарії пропонують такі переваги:

  • Паралельне завантаження ресурсів :
    браузер може завантажувати таблиці стилів, зображення та інші сценарії паралельно, не чекаючи завантаження та виконання сценарію.
  • Незалежність від джерела замовлення :
    Ви можете розміщувати сценарії всередині голови чи тіла, не турбуючись про блокування (корисно, якщо ви використовуєте CMS). Однак порядок виконання досі має значення.

Можна обійти проблеми із замовленням на виконання, використовуючи зовнішні скрипти, що підтримують зворотний зв'язок. Зараз багато API JavaScript сторонніх розробників підтримують неблокуюче виконання. Ось приклад асинхронного завантаження API Карт Google .


2
Це правильна відповідь на сьогодні - використовуючи такий підхід означає, що простіше утримувати віджети самостійно, не потрібно робити фантазії, <head>включаючи логіку.
Даніель Соколовський

1
Я заплутався , чому ви не можете використовувати asyncабо deferпри включенні JQuery , як ви вкажете в вашому другому блоці: <script src="jquery.js" async></script>. Чи можете ви пояснити, чому? Я подумав, що мені потрібно мати тег async для продуктивності - відповідно до прийнятої відповіді - щоб моя сторінка могла завантажуватися навіть тоді, коли jQuery все ще завантажується]. Дякую!
ліктьовий локомотив

3
@elbow 99% разів <script src=jquery.js>супроводжуються $(function(){ ... })блоками десь на сторінці. Асинхронне завантаження не гарантує, що jQuery буде завантажений у той час, коли браузер намагається розібрати ці блоки, отже, це призведе до помилки $ не визначено (ви не можете отримати помилку, якщо jQuery був завантажений з кешу). Я відповів на питання про завантаження jQuery асинхронно та зберегти $(function(){ ... }). Я побачу, чи зможу я його знайти, або ви можете подивитися на це питання: stackoverflow.com/q/14811471/87015
Салман

1
@SalmanA Дякую! Так, я падаю на ці 99%. Мені спочатку потрібна jquerylib для завантаження, потім мої залишилися .jsсценарії. Коли я оголошую asyncабо deferна jqueryтезі Lib сценарію, мої .jsскрипти не працюють. Я думав, що це $(function(){ ... })захищено - не здогадуйтесь. Поточне рішення: я не додаю deferабо asyncна jqueryLib сценарій, але я додати asyncв моєму хіба .jsсценарії. Примітка: причиною того, що я роблю будь-що з цього, є задоволення швидкості сторінки Google. Ще раз за допомогою! Будь-яка інша порада вітається. (Або посилання на попередню відповідь). :)
elbowlobstercowstand

@elbow Див stackoverflow.com/a/21013975/87015 , це буде тільки дати вам ідею , але не повне рішення. Ви можете замість цього шукати "бібліотеки завантажувача асинхронних програм jquery".
Салман

38

Стандартна порада, яку рекламує Yahoo! Команда виняткової продуктивності полягає в тому, щоб помістити <script>теги в кінці тіла документа, щоб вони не блокували візуалізацію сторінки.

Але є новіші підходи, які пропонують кращу ефективність, як описано в цій відповіді про час завантаження файлу JavaScript Google Analytics:

Є кілька чудових слайдів Steve Souders (експерт із продуктивності на стороні клієнта) про:

  • Різні методи паралельного завантаження зовнішніх файлів JavaScript
  • їх вплив на час завантаження та візуалізацію сторінки
  • які показники "в процесі роботи" відображає браузер (наприклад, "завантаження" в рядку стану, курсор миші з пісочним годинником).

25

Якщо ви використовуєте JQuery, тоді поставте javascript там, де вам найкраще, і використовуйте $(document).ready()для забезпечення правильного завантаження речей перед виконанням будь-яких функцій.

Зі сторони: мені подобаються всі мої теги скриптів у <head>розділі, оскільки це, здається, є найчистішим місцем.


14
в голову ... е? <header>?
Дан Лугг

7
Зауважте, що використання $(document).ready()не означає, що ви можете розміщувати JavaScript куди завгодно - вам все одно доведеться ставити його після того, <script src=".../jquery.min.js">куди ви включаєте jQuery, щоб він $існував.
Rory O'Kane

2
Не оптимально розміщувати теги скриптів у розділі <head> - це затримає показ видимої частини сторінки до завантаження сценаріїв.
CyberMonk

Ні, @Dan, headerелемент є частиною вмісту документа HTML, і він повинен виникати один або кілька разів у тезі head`` bodyелемента . The для метаданих та невмістних даних для документа. Це, в ці дні, з deferі asyncідеальним місцем для тегів сценарію. headerелементи повинні містити лише інформацію, яка описує розділ документа, що йде за ним.
ПрофК

1
@ProfK, Ден мав на увазі оригінальне нередаговане запитання, коли розміщував це понад 4 роки тому. Як бачимо, питання було відредаговано через рік.
kojow7

18

Сучасний підхід у 2019 році використовує сценарії типів модулів ES6 .

<script type="module" src="..."></script>

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

Тут описані відмінності між сценарієм та модулем:

https://stackoverflow.com/a/53821485/731548

Виконання модуля порівняно зі сценарієм описано тут:

https://developers.google.com/web/fundamentals/primers/modules#defer

Тут представлена ​​підтримка:

https://caniuse.com/#feat=es6-module


приємну інформацію додати до бази знань
Sagar

1
Лише зауважте, що це не спрацює, якщо ви просто випробовуєте речі у вашій локальній файловій системі без сервера. По крайней мере, у Chrome ви отримаєте помилку перехресного походження, намагаючись завантажити js з HTML, навіть якщо вони мають однакове походження, вашу файлову систему.
hippietrail

11

XHTML не буде перевіреним, якщо сценарій знаходиться деінде, ніж у головному елементі. виявляється, це може бути скрізь.

Ви можете відкласти виконання чимось на зразок jQuery, так що не має значення, де воно розміщене (за винятком невеликого хіта продуктивності під час розбору).


1
XHTML буде підтверджений тегами скриптів у тілі, як суворими, так і перехідними. Однак мітки стилю можуть бути лише в голові.
I.devries

11
<script src="myjs.js"></script>
</body>

Тег сценарію слід використовувати завжди до закриття тіла або знизу в HTML- файлі.

потім ви можете побачити вміст сторінки спочатку перед завантаженням файлу js .

перевірте це, якщо потрібно: http://stevesouders.com/hpws/rule-js-bottom.php


2
Це фактично відповіло на питання. Мені було цікаво, що майже всі розміщені приклади ніколи не давали належного візуального контексту "кінця сторінки"
Ken Ingram

1
Ця відповідь є дуже оманливою і, швидше за все, помилковою. Статті в Google та в MDN припускають, що синхронний JS (що тут справа) завжди блокує побудову та аналіз DOM, що призведе до затримки першої рендерингу. Тому ви не можете бачити вміст сторінки, поки файл JS не буде отриманий і не буде завершено виконання незалежно від того, де ви розміщуєте свій файл JS в документі HTML до тих пір, поки він є синхронним
Lingaraju EV

Він також посилається на пункти, зроблені у 2009 році та більше не стосуються.
toxaq

7

Умовна (і широко прийнята) відповідь "внизу", тому що тоді вся DOM буде завантажена, перш ніж щось може почати виконувати.

Існують інакодумці з різних причин, починаючи з наявної практики навмисно починати виконання з події завантаження сторінки.


6

Найкраще місце , щоб помістити <script>тег перед закриттям </body>тега , тому завантаження і виконання не блокує браузер для розбору HTML в документі,

Крім того, завантаження файлів js зовні має свої переваги, такі як вони будуть кешовані браузерами і можуть пришвидшити завантаження сторінки , вона відокремлює код HTML та JavaScript і допоможе краще керувати базою коду .

але сучасні браузери також підтримують деякі інші оптимальні шляхи , як asyncі deferдля завантаження зовнішніх javascriptфайлів.

Асинхронізація та відстрочка

Зазвичай виконання HTML-сторінки починається рядок за рядком. Якщо виникає зовнішній елемент JavaScript, парсинг HTML зупиняється до завантаження JavaScript та готовності до виконання. Це звичайне виконання сторінки можна змінити за допомогою deferта asyncатрибутів.

Defer

Якщо використовується атрибут відкладання, JavaScript завантажується паралельно з розбором HTML, але він буде виконуватися лише після повного розбору HTML.

<script src="/local-js-path/myScript.js" defer></script>

Async

Коли використовується атрибут async, JavaScript завантажується, як тільки зустрічається сценарій, і після завантаження він буде виконуватися асинхронно (паралельно) разом з розбором HTML.

<script src="/local-js-path/myScript.js" async></script>

Коли використовувати які атрибути

  • Якщо ваш скрипт не залежить від інших сценаріїв і є модульним, використовуйте async.
  • Якщо ви завантажуєте script1 та script2 async, обидва будуть працювати
    паралельно разом з розбором HTML, як тільки вони будуть завантажені
    та доступні.
  • Якщо ваш сценарій залежить від іншого сценарію, використовуйте deferобидва:
  • Коли завантажуються script1 та script2 у тому порядку defer, тоді спочатку гарантовано виконати script1,
  • Тоді script2 виконається після того, як script1 буде повністю виконаний.
  • Необхідно зробити це, якщо script2 залежить від script1.
  • Якщо ваш скрипт досить малий і залежить від іншого типу сценарію, asyncтоді використовуйте свій сценарій без атрибутів і розміщуйте його над усіма asyncсценаріями.

довідка: knowledgehills.com


3

Залежить, якщо ви завантажуєте сценарій, необхідний для стилізації сторінки / використання дій на своїй сторінці (наприклад, натискання кнопки), тоді вам краще розмістити її вгорі. Якщо ваш стиль становить 100% CSS і у вас є всі варіанти резервних дій для дій із кнопками, тоді ви можете розмістити його внизу.

Або найкраще (якщо це не викликає занепокоєння) - ви можете зробити модальне поле для завантаження, розмістити javascript у нижній частині сторінки та змусити його зникати, коли завантажується останній рядок сценарію. Таким чином ви можете уникнути користувачів, які використовують дії на вашій сторінці до завантаження скриптів. А також уникайте неправильної укладки.


3

Включення сценаріїв в кінці використовується в основному там, де спочатку повинен бути показаний вміст / стилі веб-сайту.

включаючи сценарії в голові, він завантажує сценарії рано і може бути використаний перед завантаженням всього веб-сайту.

якщо сценарії введені нарешті, перевірка відбудеться лише після завантаження всіх стилів та дизайну, що не цінується для веб-сайтів, що швидко реагують.


2

Залежно від сценарію та його використання, найкращим можливим (з точки зору завантаження сторінки та часу візуалізації) може бути не використання звичайного <script> -мітки як такого, але динамічно запускати завантаження сценарію асинхронно.

Існує кілька різних методів, але найбільш прямим вперед є використання document.createElement ("скрипт"), коли спрацьовує подія window.onload. Потім сценарій завантажується спочатку, коли сама сторінка виведена, таким чином не впливаючи на час, який користувач повинен чекати появи сторінки.

Це, природно, вимагає, що сам сценарій не потрібен для візуалізації сторінки.

Для отримання додаткової інформації дивіться публікацію " З'єднання сценаріїв асинхронізації " Стіва Суудера (творець YSlow, але зараз у Google).


2
  • Якщо ви все ще сильно піклуєтесь про підтримку та продуктивність в IE <10, краще ЗАВЖДИ зробити свої теги сценарію останніми тегами вашого HTML-тексту. Таким чином, ви впевнені, що решта DOM завантажена, і ви не будете блокувати та рендерінг.

  • Якщо ви більше не переймаєтесь IE <10, можливо, ви захочете покласти свої сценарії в голову документа та використати deferдля того, щоб вони працювали лише після завантаження вашого DOM ( <script type="text/javascript" src="path/to/script1.js" defer></script>). Якщо ви все ще хочете, щоб ваш код працював в IE <10, не забудьте його добре розгорнути window.onload!


У прийнятій відповіді це згадується як "стародавня рекомендація". Якщо ви все ще маєте на увазі це, ви, ймовірно, повинні створити деяку посилання на його підтримку.
дакаб

1

Сценарій блокує завантаження DOM до моменту завантаження та виконання.

Якщо розмістити сценарії в кінці <body>всіх DOM, є шанс завантажити і візуалізувати (сторінка буде "відображатися" швидше).<script>матиме доступ до всіх цих елементів DOM.

З іншого боку, розміщення його після <body>запуску або вище виконає скрипт (де ще немає елементів DOM).

Ви включаєте jQuery, що означає, що ви можете розмістити його куди завгодно та використовувати .ready ()


1

Я думаю, це залежить від виконання веб-сторінки. Якщо сторінка, яку ви хочете відобразити, не може відображатися належним чином без завантаження JavaScript спочатку, слід спочатку включити файл JavaScript. Але якщо ви можете відобразити / візуалізувати веб-сторінку, не завантажуючи початково файл JavaScript, вам слід ввести код JavaScript внизу сторінки. Тому що це буде імітувати швидке завантаження сторінки, і, з точки зору користувача, здається, що ця сторінка завантажується швидше.


1

Більшість <script>посилань можна розмістити в кінці <body>,
але якщо на вашій сторінці є активні компоненти, які використовують зовнішні скрипти,
то їх залежність (js-файли) повинна бути перед цим (в ідеалі в головному тезі).


1

Перед закінченням тегу body з метою запобігання та блокування інтерфейсу користувача.


-1

В кінці HTML-документа

Так що це не вплине на завантаження HTML-документа в браузер під час виконання.


-1

Найкраще написати свій JavaScriptкод в кінці документа після або прямо перед </body>тегом, щоб спочатку завантажити документ, а потім виконати js-код.

<script> ... your code here ... </script>
</body>

І якщо ви пишете JQueryнаступне, це може бути в головному документі, і він буде виконаний після завантаження документа:

<script>
$(document).ready(function(){
   //your code here...
});
</script>

це кидаєSyntaxError
Raz

Ваша відповідь не була помилковою, але гостро потребувала оновлення.
Пол Карлтон

-2

Для мене більше сенсу включати скрипт після HTML. Тому що більшу частину часу мені потрібно, щоб Dom завантажувався, перш ніж виконувати свій сценарій. Я міг би помістити його в тег заголовка, але мені не подобається, що всі слухачі завантаження документів накладні. Я хочу, щоб мій код був коротким і солодким та легким для читання.

Я чув, що старі версії сафарі були химерними, коли додавали сценарій поза тегом head, але я кажу, що це хвилює. Я не знаю нікого, хто використовує цю стару лайну?

Добре питання до речі.


-6

Ви можете розмістити там, де хочете сценарії, і один не кращий за іншу практику.

ситуація така:

Сторінка завантажується лінійно, "зверху вниз", тому якщо ви помістите сценарій у голову, це гарантує, що воно почне завантажуватися раніше всього, тепер, якщо ви помістите його всередину тіла, змішаного з кодом, це може спричинити завантаження сторінки непривабливо.

виявлення належної практики не залежить від того, де.

Щоб підтримати вас, зазначу наступне:

Ви можете розмістити:

і сторінка завантажиться лінійно

сторінка завантажується асинхронно з іншим вмістом

вміст сторінки завантажиться до та після завершення завантаження сценаріїв завантажуються

Доброю практикою тут буде, коли впроваджуватимуть кожну?

Я сподіваюся, що я був корисним, і що-небудь просто відповість мені на це питання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.