Sobes.tech
Middle

Ի՞նչ է տարբերությունը <script> թեգի ռեժիմների (async, defer կամ type) աշխատանքի մեջ։

sobes.tech AI

Պատասխան AI-ից

<script> առանցատրիբուտ

  • HTML վերլուծվում է մինչև <script> թեգը:
  • HTML վերլուծումը դադարեցվում է <script> թեգի հայտնաբերման ժամանակ:
  • Սկրիպտը բեռնվում է:
  • Սկրիպտը կատարվում է:
  • HTML վերլուծումը շարունակվում է սկրիպտի կատարման հետո:

<script async>

  • HTML-ը վերլուծվում է միաժամանակ սկրիպտի բեռնման հետ:
  • HTML վերլուծումը դադարեցվում է սկրիպտի բեռնման ավարտից հետո:
  • Սկրիպտը կատարվում է:
  • HTML վերլուծումը շարունակվում է սկրիպտի կատարման հետո:
  • async-ով սկրիպտների կատարման կարգը չի երաշխավորվում, կախված է բեռնման արագությունից:

<script defer>

  • HTML-ը վերլուծվում է միաժամանակ սկրիպտի բեռնման հետ:
  • Սկրիպտը կատարվում է HTML վերլուծումից հետո, բայց նախքան DOMContentLoaded իրադարձությունը:
  • defer-ով սկրիպտների կատարման կարգը երաշխավորվում է, համապատասխանում է HTML-ում նրանց դիրքին:
  • վարքը նման է <script>-ի, որը տեղադրված է </body> փակող թեգից առաջ:

<script type="module"> (ECMAScript մոդուլների համար)

  • Հաշվարկվում է որպես <script defer> ըստ նախնական կարգավորման (կարգավորված կատարմամբ վերլուծությունից հետո, կարգը պահպանելով):
  • Կարող է օգտագործվել async-ի հետ:
  • Պատրաստված է մոդուլների ներմուծում/արտահանման համար, ստեղծում է առանձին տեսադաշտ (scope):
Ատրիբուտ Բեռնման կարգը Կատարման կարգը HTML վերլուծության խոչընդոտում Կարգը պահպանվում է
Ոչ Բլոկավորող Բլոկավորող Այո Պահպանվում է
async Անբլոկավոր (պարալել) Անբլոկավոր (բեռնման ավարտից հետո) Ոչ Գործողությունը չի երաշխավորվում
defer Անբլոկավոր (պարալել) Անբլոկավոր (HTML վերլուծությունից հետո) Ոչ Պահպանվում է
type="module" Անբլոկավոր (պարալել) Անբլոկավոր (HTML վերլուծությունից հետո, ըստ նախնական կարգի) Ոչ Պահպանվում է (նախնական կարգով)
// Օրինակ պարզ սկրիպտ
console.log('Պարզ սկրիպտ');
// Օրինակ ասինխրոն սկրիպտ
console.log('Ասինխրոն սկրիպտ');
// Օրինակ հետաձգված սկրիպտ
console.log('Հետաձգված սկրիպտ');
// Օրինակ մոդուլ
import { someFunction } from './module.js';
someFunction();
console.log('Մոդուլ սկրիպտ');