Ðа ÑÑÑаÑÐ½Ð¸Ñ Ð²ÐµÐ±ÑайÑÐ°Ñ ÑкÑипÑи ÑаÑÑо âважÑÑâ за HTML: ÑÑ ÑозмÑÑ Ð·Ð°Ð²Ð°Ð½ÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð±ÑлÑÑий, Ñ ÑÐ°Ñ Ð¾Ð±Ñобки Ñеж довÑий.
Ðоли бÑаÑÐ·ÐµÑ Ð·Ð°Ð²Ð°Ð½ÑажÑÑ HTML Ñ Ð·ÑÑÑÑÑÑÐ°Ñ Ñег <script>...</script>, вÑн не може пÑодовжÑваÑи бÑдÑвниÑÑво DOM. ÐÑн повинен виконаÑи ÑкÑÐ¸Ð¿Ñ Ð¿ÑÑмо заÑаз. Те ж Ñаме вÑдбÑваÑÑÑÑÑ Ð´Ð»Ñ Ð·Ð¾Ð²Ð½ÑÑнÑÑ
ÑкÑипÑÑв <script src="..."></script>: бÑаÑÐ·ÐµÑ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ заÑекаÑи, Ñоб ÑкÑÐ¸Ð¿Ñ Ð·Ð°Ð²Ð°Ð½ÑаживÑÑ, виконаÑи заванÑажений ÑкÑипÑ, Ñ ÑÑлÑки ÑÐ¾Ð´Ñ Ð²Ñн може обÑобиÑи ÑеÑÑÑ ÑÑоÑÑнки.
Це пÑизводиÑÑ Ð´Ð¾ Ð´Ð²Ð¾Ñ Ð²Ð°Ð¶Ð»Ð¸Ð²Ð¸Ñ Ð¿Ñоблем:
- СкÑипÑи не можÑÑÑ Ð±Ð°ÑиÑи елеменÑи DOM пÑд ними, ÑÐ¾Ð¼Ñ Ð²Ð¾Ð½Ð¸ не можÑÑÑ Ð´Ð¾Ð´Ð°Ð²Ð°Ñи обÑобники ÑоÑо.
- ЯкÑо Ñ Ð²ÐµÑÑ Ð½Ñй ÑаÑÑÐ¸Ð½Ñ ÑÑоÑÑнки Ñ Ð³ÑомÑздкий ÑкÑипÑ, вÑн âблокÑÑ ÑÑоÑÑнкÑâ. ÐоÑиÑÑÑваÑÑ Ð½Ðµ можÑÑÑ Ð¿Ð¾Ð±Ð°ÑиÑи вмÑÑÑ ÑÑоÑÑнки, поки вÑн не заванÑажиÑÑÑÑ Ñа не запÑÑÑиÑÑÑÑ:
<p>...вмÑÑÑ Ð¿ÐµÑед ÑкÑипÑом...</p>
<script src="https://javascript.info/article/script-async-defer/long.js?speed=1"></script>
<!-- Це не видно, поки ÑкÑÐ¸Ð¿Ñ Ð·Ð°Ð²Ð°Ð½ÑажÑÑÑÑÑÑ -->
<p>...вмÑÑÑ Ð¿ÑÑÐ»Ñ ÑкÑипÑÑ...</p>
ÐÐ»Ñ ÑÑого Ñ Ð´ÐµÑÐºÑ Ð¾Ð±Ñ ÑÐ´Ð½Ñ ÑлÑÑ Ð¸. ÐапÑиклад, ми можемо ÑозмÑÑÑиÑи ÑкÑÐ¸Ð¿Ñ Ð²Ð½Ð¸Ð·Ñ ÑÑоÑÑнки. Ð¢Ð¾Ð´Ñ Ð²Ñн зможе баÑиÑи елеменÑи над ним Ñ Ð½Ðµ блокÑваÑиме показ вмÑÑÑÑ ÑÑоÑÑнки:
<body>
...веÑÑ Ð²Ð¼ÑÑÑ Ð·Ð½Ð°Ñ
одиÑÑÑÑ Ð½Ð°Ð´ ÑкÑипÑом...
<script src="https://javascript.info/article/script-async-defer/long.js?speed=1"></script>
</body>
Ðле Ñе ÑÑÑÐµÐ½Ð½Ñ Ð´Ð°Ð»ÐµÐºÐ¾ не ÑдеалÑне. ÐапÑиклад, бÑаÑÐ·ÐµÑ Ð¿Ð¾Ð¼ÑÑÐ°Ñ ÑкÑÐ¸Ð¿Ñ (Ñ Ð¼Ð¾Ð¶Ðµ поÑаÑи його заванÑаженнÑ) лиÑе пÑÑÐ»Ñ Ñого, Ñк повнÑÑÑÑ Ð·Ð°Ð²Ð°Ð½ÑажиÑÑ HTML-докÑменÑ. ÐÐ»Ñ Ð²ÐµÐ»Ð¸ÐºÐ¸Ñ Ð´Ð¾ÐºÑменÑÑв HTML Ñе може ÑпÑиÑиниÑи помÑÑÐ½Ñ Ð·Ð°ÑÑимкÑ.
Ð¢Ð°ÐºÑ ÑеÑÑ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ñ Ð´Ð»Ñ Ð»Ñдей, ÑÐºÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑÑÑ Ð´Ñже ÑÐ²Ð¸Ð´ÐºÑ Ð·âÑднаннÑ, але багаÑо лÑдей Ñ ÑвÑÑÑ Ð²Ñе Ñе маÑÑÑ Ð½Ð¸Ð·ÑÐºÑ ÑвидкÑÑÑÑ ÐнÑеÑнеÑÑ Ñа викоÑиÑÑовÑÑÑÑ Ð´Ð°Ð»ÐµÐºÐ¾ не ÑдеалÑне мобÑлÑне ÑнÑеÑнеÑ-зâÑднаннÑ.
Ðа ÑаÑÑÑ, Ñ Ð´Ð²Ð° аÑÑибÑÑи <script>, ÑÐºÑ Ð²Ð¸ÑÑÑÑÑÑÑ Ð½Ð°ÑÑ Ð¿ÑоблемÑ: defer Ñ async.
defer
ÐÑÑибÑÑ defer повÑдомлÑÑ Ð±ÑаÑзеÑÑ, Ñо Ð¹Ð¾Ð¼Ñ Ð½Ðµ ÑÑеба ÑекаÑи на ÑкÑипÑ. ÐамÑÑÑÑ ÑÑого бÑаÑÐ·ÐµÑ Ð¿ÑодовжиÑÑ Ð¾Ð±ÑоблÑÑи HTML, бÑдÑваÑи DOM. СкÑÐ¸Ð¿Ñ Ð·Ð°Ð²Ð°Ð½ÑажÑÑÑÑÑÑ âÑ ÑÐ¾Ð½Ð¾Ð²Ð¾Ð¼Ñ ÑежимÑâ, а поÑÑм запÑÑкаÑÑÑÑÑ, коли DOM повнÑÑÑÑ Ð¿Ð¾Ð±Ñдовано.
ÐÑÑ Ñой Ñамий пÑиклад, Ñо й виÑе, але з defer:
<p>...вмÑÑÑ Ð¿ÐµÑед ÑкÑипÑом...</p>
<script defer src="https://javascript.info/article/script-async-defer/long.js?speed=1"></script>
<!-- видно вÑдÑÐ°Ð·Ñ -->
<p>...вмÑÑÑ Ð¿ÑÑÐ»Ñ ÑкÑипÑÑ...</p>
ÐнÑими Ñловами:
- СкÑипÑи з
deferнÑколи не блокÑÑÑÑ ÑÑоÑÑнкÑ. - СкÑипÑи з
deferзавжди виконÑÑÑÑÑÑ, коли DOM гоÑово (але пеÑед подÑÑÑDOMContentLoaded).
ÐаÑÑÑпний пÑиклад демонÑÑÑÑÑ Ð´ÑÑÐ³Ñ ÑаÑÑинÑ:
<p>...вмÑÑÑ Ð¿ÐµÑед ÑкÑипÑами...</p>
<script>
document.addEventListener('DOMContentLoaded', () => alert("DOM гоÑово пÑÑÐ»Ñ defer!"));
</script>
<script defer src="https://javascript.info/article/script-async-defer/long.js?speed=1"></script>
<p>...вмÑÑÑ Ð¿ÑÑÐ»Ñ ÑкÑипÑÑв...</p>
- ÐмÑÑÑ ÑÑоÑÑнки зâÑвлÑÑÑÑÑÑ Ð½ÐµÐ³Ð°Ð¹Ð½Ð¾.
- ÐбÑобник подÑÑ
DOMContentLoadedÑÐµÐºÐ°Ñ Ð½Ð° вÑдкладений ÑкÑипÑ. ÐÑн запÑÑкаÑÑÑÑÑ Ð»Ð¸Ñе ÑодÑ, коли ÑкÑÐ¸Ð¿Ñ Ð±Ñде заванÑажено Ñа виконано.
ÐÑÐ´ÐºÐ»Ð°Ð´ÐµÐ½Ñ ÑкÑипÑи збеÑÑгаÑÑÑ Ð²ÑдноÑний поÑÑдок, Ñк Ñ Ð·Ð²Ð¸ÑÐ°Ð¹Ð½Ñ ÑкÑипÑи.
СкажÑмо, Ñ Ð½Ð°Ñ Ñ Ð´Ð²Ð° вÑдкладениÑ
ÑкÑипÑи: long.js, а поÑÑм small.js:
<script defer src="https://javascript.info/article/script-async-defer/long.js"></script>
<script defer src="https://javascript.info/article/script-async-defer/small.js"></script>
ÐÑаÑзеÑи ÑканÑÑÑÑ ÑÑоÑÑÐ½ÐºÑ Ð½Ð° наÑвнÑÑÑÑ ÑкÑипÑÑв Ñ Ð·Ð°Ð²Ð°Ð½ÑажÑÑÑÑ ÑÑ
паÑалелÑно, Ñоб пÑдвиÑиÑи пÑодÑкÑивнÑÑÑÑ. ÐÑже, Ñ Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾Ð¼Ñ Ð²Ð¸Ñе пÑÐ¸ÐºÐ»Ð°Ð´Ñ Ð¾Ð±Ð¸Ð´Ð²Ð° ÑкÑипÑи заванÑажÑÑÑÑÑÑ Ð¿Ð°ÑалелÑно. small.js, ймовÑÑно, завеÑÑÑÑÑÑÑÑ Ð¿ÐµÑÑим.
â¦Ðле аÑÑибÑÑ defer, кÑÑм Ñого, Ñо каже бÑаÑзеÑÑ âне блокÑваÑиâ, гаÑанÑÑÑ, Ñо збеÑÑгаÑÑÑÑÑ Ð²ÑдноÑний поÑÑдок виконаннÑ. Ð¢Ð¾Ð¼Ñ Ð½Ð°Ð²ÑÑÑ ÑкÑо small.js заванÑажÑÑÑÑÑÑ Ð¿ÐµÑÑим, вÑн вÑе Ñе ÑÐµÐºÐ°Ñ Ñ Ð·Ð°Ð¿ÑÑкаÑÑÑÑÑ Ð¿ÑÑÐ»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ long.js.
Це може бÑÑи важливим в ÑÐ¸Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÐ°Ñ , коли нам поÑÑÑбно заванÑажиÑи бÑблÑоÑÐµÐºÑ JavaScript, а поÑÑм ÑкÑипÑ, Ñкий залежиÑÑ Ð²Ñд неÑ.
defer пÑизнаÑений лиÑе Ð´Ð»Ñ Ð·Ð¾Ð²Ð½ÑÑнÑÑ
ÑкÑипÑÑвÐÑÑибÑÑ defer ÑгноÑÑÑÑÑÑÑ, ÑкÑо Ñег <script> не Ð¼Ð°Ñ src.
async
ÐÑÑибÑÑ async деÑо ÑÑ
ожий на defer. ÐÑн Ñакож ÑобиÑÑ ÑкÑÐ¸Ð¿Ñ Ð½ÐµÐ±Ð»Ð¾ÐºÑÑÑим. Ðле вÑн Ð¼Ð°Ñ Ð²Ð°Ð¶Ð»Ð¸Ð²Ñ Ð²ÑдмÑнноÑÑÑ Ð² поведÑнÑÑ.
ÐÑÑибÑÑ async ознаÑаÑ, Ñо ÑкÑÐ¸Ð¿Ñ Ð¿Ð¾Ð²Ð½ÑÑÑÑ Ð½ÐµÐ·Ð°Ð»ÐµÐ¶Ð½Ð¸Ð¹:
- ÐÑаÑÐ·ÐµÑ Ð½Ðµ блокÑÑ
asyncÑкÑипÑи (Ñкdefer). - ÐнÑÑ ÑкÑипÑи не ÑекаÑÑÑ
asyncÑкÑипÑÑв, аasyncÑкÑипÑи не ÑекаÑÑÑ ÑÑ . DOMContentLoadedÑа аÑÐ¸Ð½Ñ ÑÐ¾Ð½Ð½Ñ ÑкÑипÑи не ÑекаÑÑÑ Ð¾Ð´Ð¸Ð½ одного:DOMContentLoadedможе вÑдбÑваÑиÑÑ Ñк пеÑед аÑÐ¸Ð½Ñ Ñонним ÑкÑипÑом (ÑкÑо аÑÐ¸Ð½Ñ Ñонний ÑкÑÐ¸Ð¿Ñ Ð·Ð°ÐºÑнÑÑÑ Ð·Ð°Ð²Ð°Ð½ÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð¿ÑÑÐ»Ñ Ñого, Ñк ÑÑоÑÑнка гоÑова)- â¦Ð°Ð±Ð¾ пÑÑÐ»Ñ Ð°ÑÐ¸Ð½Ñ Ñонного ÑкÑипÑÑ (ÑкÑо аÑÐ¸Ð½Ñ Ñонний ÑкÑÐ¸Ð¿Ñ ÐºÐ¾ÑоÑкий або бÑв Ñ HTTP-кеÑÑ)
ÐнÑими Ñловами, async ÑкÑипÑи заванÑажÑÑÑÑÑÑ Ñ ÑÐ¾Ð½Ð¾Ð²Ð¾Ð¼Ñ ÑÐµÐ¶Ð¸Ð¼Ñ Ñа запÑÑкаÑÑÑÑÑ Ð¿Ð¾ гоÑовноÑÑÑ. DOM Ñа ÑнÑÑ ÑкÑипÑи ÑÑ
не ÑекаÑÑÑ, Ñ Ð²Ð¾Ð½Ð¸ нÑÑого не ÑекаÑÑÑ. ÐовнÑÑÑÑ Ð½ÐµÐ·Ð°Ð»ÐµÐ¶Ð½Ð¸Ð¹ ÑкÑипÑ, Ñкий запÑÑкаÑÑÑÑÑ, коли заванÑажений. ÐаÑÑÑлÑки пÑоÑÑо, наÑкÑлÑки можливо, Ñи не Ñак?
ÐÑÑ Ð¿Ñиклад, подÑбний до Ñого, Ñо ми баÑили з defer: два ÑкÑипÑи long.js Ñ small.js, але ÑÐµÐ¿ÐµÑ Ñз async замÑÑÑÑ defer.
Ðони не ÑекаÑÑÑ Ð¾Ð´Ð¸Ð½ одного. ÐÑе, Ñо заванÑажÑÑÑÑÑÑ Ð¿ÐµÑÑим (ймовÑÑно, small.js) â запÑÑкаÑÑÑÑÑ Ð¿ÐµÑÑим:
<p>...вмÑÑÑ Ð¿ÐµÑед ÑкÑипÑами...</p>
<script>
document.addEventListener('DOMContentLoaded', () => alert("DOM гоÑово!"));
</script>
<script async src="https://javascript.info/article/script-async-defer/long.js"></script>
<script async src="https://javascript.info/article/script-async-defer/small.js"></script>
<p>...вмÑÑÑ Ð¿ÑÑÐ»Ñ ÑкÑипÑÑв...</p>
- ÐмÑÑÑ ÑÑоÑÑнки зâÑвлÑÑÑÑÑÑ Ð²ÑдÑазÑ:
asyncне блокÑÑ Ð¹Ð¾Ð³Ð¾. DOMContentLoadedможе вÑдбÑваÑиÑÑ Ñк до, Ñак Ñ Ð¿ÑÑлÑasync, ÑÑÑ Ð½ÐµÐ¼Ð°Ñ Ð³Ð°ÑанÑÑй.- ÐенÑий ÑкÑипÑ
small.jsйде дÑÑгим, але, ймовÑÑно, заванÑажÑÑÑÑÑÑ Ð¿ÐµÑедlong.js, ÑомÑsmall.jsзапÑÑкаÑÑÑÑÑ Ð¿ÐµÑÑим. ХоÑа, можливо,long.jsзаванÑажÑÑÑÑÑÑ ÑпоÑаÑкÑ, ÑкÑо вÑн кеÑÑÑÑÑÑÑ, Ñо вÑн запÑÑкаÑÑÑÑÑ Ð¿ÐµÑÑим. ÐнÑими Ñловами, аÑÐ¸Ð½Ñ ÑÐ¾Ð½Ð½Ñ ÑÑенаÑÑÑ Ð²Ð¸ÐºÐ¾Ð½ÑÑÑÑÑÑ Ð² поÑÑÐ´ÐºÑ âпеÑÑим заванÑаживÑÑ â пеÑÑим виконавÑÑâ.
ÐÑÐ¸Ð½Ñ ÑÐ¾Ð½Ð½Ñ ÑÑенаÑÑÑ ÑÑдовÑ, коли ми додаÑмо до ÑÑоÑÑнки незалежний ÑÑоÑоннÑй ÑкÑипÑ: лÑÑилÑники, ÑÐµÐºÐ»Ð°Ð¼Ñ ÑоÑо, оÑкÑлÑки вони не залежаÑÑ Ð²Ñд наÑÐ¸Ñ ÑкÑипÑÑв, Ñ Ð½Ð°ÑÑ ÑкÑипÑи не Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ ÑÑ ÑекаÑи:
<!-- Google Analytics зазвиÑай додаÑÑÑÑÑ Ñак -->
<script async src="https://google-analytics.com/analytics.js"></script>
async â лиÑе Ð´Ð»Ñ Ð·Ð¾Ð²Ð½ÑÑнÑÑ
ÑкÑипÑÑвЯк Ñ defer, аÑÑибÑÑ async ÑгноÑÑÑÑÑÑÑ, ÑкÑо Ñег <script> не Ð¼Ð°Ñ src.
ÐинамÑÑÐ½Ñ ÑкÑипÑи
Ð Ñе один важливий ÑпоÑÑб додаÑи ÑкÑÐ¸Ð¿Ñ Ð½Ð° ÑÑоÑÑнкÑ.
Ðи можемо ÑÑвоÑиÑи ÑкÑÐ¸Ð¿Ñ Ñ Ð´Ð¸Ð½Ð°Ð¼ÑÑно додаÑи його до докÑменÑа за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ JavaScript:
let script = document.createElement('script');
script.src = "/article/script-async-defer/long.js";
document.body.append(script); // (*)
СкÑÐ¸Ð¿Ñ Ð¿Ð¾ÑÐ¸Ð½Ð°Ñ Ð·Ð°Ð²Ð°Ð½ÑажÑваÑиÑÑ, Ñойно вÑн додаÑÑÑÑÑ Ð´Ð¾ докÑменÑа (*).
ÐинамÑÑÐ½Ñ ÑкÑипÑи за замовÑÑваннÑм поводÑÑÑÑÑ Ñк âasyncâ.
ТобÑо:
- Ðони нÑÑого не ÑекаÑÑÑ, ÑÑ Ð½ÑÑого не ÑекаÑ.
- СкÑипÑ, Ñкий заванÑажÑÑÑÑÑÑ Ð¿ÐµÑÑим â запÑÑкаÑÑÑÑÑ Ð¿ÐµÑÑим (в поÑÑÐ´ÐºÑ âпеÑÑим заванÑаживÑÑ â пеÑÑим виконавÑÑâ).
Це можна змÑниÑи, ÑкÑо ми Ñвно вÑÑановимо script.async=false. Ð¢Ð¾Ð´Ñ ÑкÑипÑи бÑдÑÑÑ Ð²Ð¸ÐºÐ¾Ð½ÑваÑиÑÑ Ð² поÑÑÐ´ÐºÑ ÑозмÑÑÐµÐ½Ð½Ñ Ð² докÑменÑÑ, Ñк пÑи defer.
У ÑÑÐ¾Ð¼Ñ Ð¿ÑÐ¸ÐºÐ»Ð°Ð´Ñ ÑÑнкÑÑÑ loadScript(src) Ð´Ð¾Ð´Ð°Ñ ÑкÑипÑ, а Ñакож вÑÑановлÑÑ Ð´Ð»Ñ async знаÑÐµÐ½Ð½Ñ false.
Ð¢Ð¾Ð¼Ñ long.js завжди запÑÑкаÑÑÑÑÑ Ð¿ÐµÑÑим (оÑкÑлÑки вÑн додаÑÑÑÑÑ Ð¿ÐµÑÑим):
function loadScript(src) {
let script = document.createElement('script');
script.src = src;
script.async = false;
document.body.append(script);
}
// long.js запÑÑкаÑÑÑÑÑ Ð¿ÐµÑÑим, ÑÐ¾Ð¼Ñ Ñо async=false
loadScript("/article/script-async-defer/long.js");
loadScript("/article/script-async-defer/small.js");
Ðез script.async=false ÑкÑипÑи виконÑваÑимÑÑÑÑÑ Ð·Ð° замовÑÑваннÑм, в поÑÑÐ´ÐºÑ âпеÑÑим заванÑаживÑÑ â пеÑÑим виконавÑÑâ (мабÑÑÑ, пеÑÑим бÑде small.js).
ÐÐ½Ð¾Ð²Ñ Ð¶ Ñаки, Ñк Ñ Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ Ð· defer, поÑÑдок Ð¼Ð°Ñ Ð·Ð½Ð°ÑеннÑ, ÑкÑо ми Ñ
оÑемо заванÑажиÑи бÑблÑоÑекÑ, а поÑÑм ÑнÑий ÑкÑипÑ, Ñкий залежиÑÑ Ð²Ñд неÑ.
ÐÑдÑÑмки
Ð async, Ñ defer маÑÑÑ Ð¾Ð´Ð½Ñ ÑпÑлÑÐ½Ñ ÑиÑÑ: заванÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑакиÑ
ÑкÑипÑÑв не блокÑÑ Ð²ÑдÑвоÑÐµÐ½Ð½Ñ ÑÑоÑÑнки. Таким Ñином коÑиÑÑÑÐ²Ð°Ñ Ð¼Ð¾Ð¶Ðµ пÑоÑиÑаÑи вмÑÑÑ ÑÑоÑÑнки Ñа одÑÐ°Ð·Ñ Ð¾Ð·Ð½Ð°Ð¹Ð¾Ð¼Ð¸ÑиÑÑ Ð· неÑ.
Ðле мÑж ними Ñ Ð¹ ÑÑÑоÑÐ½Ñ Ð²ÑдмÑнноÑÑÑ:
| ÐоÑÑдок | DOMContentLoaded |
|
|---|---|---|
async |
ÐоÑÑдок заванÑаженнÑ. ÐÑ Ð½Ñй поÑÑдок в докÑменÑÑ Ð½Ðµ Ð¼Ð°Ñ Ð·Ð½Ð°ÑеннÑ: Ñо заванÑажÑÑÑÑÑÑ Ð¿ÐµÑÑим â запÑÑкаÑÑÑÑÑ Ð¿ÐµÑÑим | Ðе Ð¼Ð°Ñ Ð·Ð½Ð°ÑеннÑ. Ðоже заванÑажÑваÑиÑÑ Ñа виконÑваÑиÑÑ, поки докÑÐ¼ÐµÐ½Ñ Ñе не заванÑажено повнÑÑÑÑ. Це ÑÑаплÑÑÑÑÑÑ, ÑкÑо ÑкÑипÑи Ð½ÐµÐ²ÐµÐ»Ð¸ÐºÑ Ð°Ð±Ð¾ кеÑованÑ, а докÑÐ¼ÐµÐ½Ñ Ð´Ð¾ÑÑаÑнÑо великий. |
defer |
ÐоÑÑдок докÑменÑа (Ñк вони ÑозмÑÑÐµÐ½Ñ Ð² докÑменÑÑ). | ÐиконÑÑÑÑÑÑ Ð¿ÑÑÐ»Ñ Ð·Ð°Ð²Ð°Ð½ÑÐ°Ð¶ÐµÐ½Ð½Ñ Ñа аналÑÐ·Ñ Ð´Ð¾ÐºÑменÑа (за поÑÑеби вони ÑекаÑÑÑ), безпоÑеÑеднÑо пеÑед DOMContentLoaded. |
Ðа пÑакÑиÑÑ defer викоÑиÑÑовÑÑÑÑÑÑ Ð´Ð»Ñ ÑкÑипÑÑв, Ñким поÑÑÑбен веÑÑ DOM, Ñ/або важливий ÑÑ
вÑдноÑний поÑÑдок виконаннÑ.
Ð async викоÑиÑÑовÑÑÑÑÑÑ Ð´Ð»Ñ Ð½ÐµÐ·Ð°Ð»ÐµÐ¶Ð½Ð¸Ñ
ÑкÑипÑÑв, ÑакиÑ
Ñк лÑÑилÑники або Ñеклама. Ð ÑÑ
вÑдноÑний поÑÑдок Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ð¼Ð°Ñ Ð·Ð½Ð°ÑеннÑ.
ÐвеÑнÑÑÑ ÑвагÑ: ÑкÑо ви викоÑиÑÑовÑÑÑе defer або async, коÑиÑÑÑÐ²Ð°Ñ Ð¿Ð¾Ð±Ð°ÑиÑÑ ÑÑоÑÑÐ½ÐºÑ Ð¿ÐµÑед заванÑаженнÑм ÑкÑипÑÑ.
У ÑÐ°ÐºÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ Ð´ÐµÑÐºÑ Ð³ÑаÑÑÑÐ½Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñи, ймовÑÑно, Ñе не ÑнÑÑÑалÑзовано.
Ðе забÑдÑÑе поÑÑавиÑи ÑндикаÑÑÑ âзаванÑаженнÑâ Ñа вÑдклÑÑиÑи кнопки, ÑÐºÑ Ñе не пÑаÑÑÑÑÑ. ÐÐµÑ Ð°Ð¹ коÑиÑÑÑÐ²Ð°Ñ ÑÑÑко баÑиÑÑ, Ñо вÑн може ÑобиÑи на ÑÑоÑÑнÑÑ, а Ñо Ñе гоÑÑÑÑÑÑÑ.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)