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-თან ერთად. - მხარს უჭერს მოდულების იმპორტსა და ექსპორტს. ქმნის ცალკეულ სკოპს.
| ატრიბუტი | ჩატვირთვა | შესრულება | HTML-ის პარსინგის ბლოკირება | წესის დაცვა |
|---|---|---|---|---|
| არ არის | ბლოკირებადი | ბლოკირებადი | დიახ | შენარჩუნებულია |
async |
არ ბლოკირებადი (პარალელური) | არ ბლოკირებადი (ჩატვირთვის შემდეგ) | არა | გარანტია არ არის |
defer |
არ ბლოკირებადი (პარალელური) | არ ბლოკირებადი (HTML-ის პარსინგის შემდეგ) | არა | შენარჩუნებულია |
type="module" |
არ ბლოკირებადი (პარალელური) | არ ბლოკირებადი (HTML-ის პარსინგის შემდეგ, როგორც წესი) | არა | შენარჩუნებულია (როგორც წესი) |
// მარტივი სკრიპტის მაგალითი
console.log('სადამარტივო სკრიპტი');
// ასინქრონული სკრიპტის მაგალითი
console.log('ასინქრონული სკრიპტი');
// გადადებული სკრიპტის მაგალითი
console.log('გადადებული სკრიპტი');
// მოდულის მაგალითი
import { someFunction } from './module.js';
someFunction();
console.log('მოდულის სკრიპტი');