Page 14 - 6105
P. 14
<P> Важлива інформація! Буде непереливки, поки не
завантажиться скрипт. </ P>
<Script src = "https://js.cx/hello/ads.js?speed=0"> </
script>
<P> ... Важлива інформація! </ P>
Для уникнення даної ситуації можна поставити всі подібні скрипти в кінець
сторінки - це зменшить проблему, але не усуне її повністю, якщо скриптів кілька.
Припустимо, в кінці сторінки 3 скрипта, і перший з них гальмує, тоді інші два
його чекатимуть. Крім того, браузер дійде до скриптів, розташованих в кінці
сторінки, вони почнуть завантажуватися тільки тоді, коли вся сторінка
завантажиться. А це не завжди правильно. Наприклад, лічильник відвідуваності
найбільш точно спрацює, якщо завантажити його раніше. Тому «розташувати
скрипти внизу» - не кращий вихід.
Кардинально вирішити цю проблему допоможуть атрибути async або defer:
Атрибут async підтримується всіма браузерами, крім IE9-. Скрипт
виконується повністю асинхронно. Тобто, при виявленні <script async src = "...">
браузер не зупиняє обробку сторінки, а спокійно працює далі. Коли скрипт буде
завантажений - він виконається.
Атрибут defer ідтримується всіма браузерами, включно з більшістю старих
IE. Скрипт також виконується асинхронно, не примушує чекати сторінку, але є дві
відмінності від async:
Перше - браузер гарантує, що відносний порядок скриптів з defer буде
збережений. Тобто, в такому коді (з async) першим спрацює той скрипт, який
раніше завантажиться:
<Script src = "1.js" async> </ script>
<Script src = "2.js" async> </ script>
А в такому коді (з defer) першим спрацює завжди 1.js, а скрипт 2.js, навіть
якщо завантажився раніше, буде його чекати.
13