Middle
V čem spočívá rozdíl v chodu režimů (async, defer nebo type) tagu <script>?
sobes.tech AI
Odpověď od AI
<script> bez atributů
- HTML se analyzuje až do značky
<script>. - Analýza HTML je pozastavena při detekci značky
<script>. - Skript se načte.
- Skript se spustí.
- Analýza HTML pokračuje po spuštění skriptu.
<script async>
- HTML se analyzuje současně s načítáním skriptu.
- Analýza HTML je pozastavena po dokončení načítání skriptu.
- Skript se spustí.
- Analýza HTML pokračuje po spuštění skriptu.
- Pořadí spuštění skriptů s
asyncnení garantováno, závisí na rychlosti načítání.
<script defer>
- HTML se analyzuje současně s načítáním skriptu.
- Skript se spustí po dokončení analýzy HTML, ale před událostí
DOMContentLoaded. - Pořadí spuštění skriptů s
deferje garantováno, odpovídá pořadí v HTML. - Chování je podobné
<script>, který je umístěn před uzavíracím tagem</body>.
<script type="module"> (pro ECMAScript moduly)
- Je zpracován jako
<script defer>(odložené spuštění po analýze, zachování pořadí). - Může být použit s atributem
async. - Podporuje import/export modulů. Vytváří samostatný scope.
| Atribut | Načítání skriptu | Spuštění skriptu | Blokování analýzy HTML | Pořadí spuštění |
|---|---|---|---|---|
| Žádný | Blokující | Blokující | Ano | Zachovává se |
async |
Neblokující (paralelní) | Neblokující (po dokončení načítání) | Ne | Není garantováno |
defer |
Neblokující (paralelní) | Neblokující (po analýze HTML) | Ne | Zachovává se |
type="module" |
Neblokující (paralelní) | Neblokující (po analýze HTML, výchozí) | Ne | Zachovává se (výchozí) |
// Příklad jednoduchého skriptu
console.log('Normální skript');
// Příklad asynchronního skriptu
console.log('Asynchronní skript');
// Příklad odloženého skriptu
console.log('Odložený skript');
// Příklad modulu
import { someFunction } from './module.js';
someFunction();
console.log('Modul skript');