Sobes.tech
Middle

Qual é a diferença entre as tags <script>, <script async> e <script defer>?

sobes.tech IA

Resposta da IA

A tag <script> padrão interrompe a análise do HTML, carrega o script e executa-o, depois a análise continua.

<script async> carrega o script de forma assíncrona, enquanto a análise do HTML continua. O script é executado imediatamente após o carregamento. A ordem de execução não é garantida.

<script defer> carrega o script de forma assíncrona, enquanto a análise do HTML continua. O script só é executado após a conclusão da análise do HTML, mas antes do evento DOMContentLoaded. A ordem de execução dos scripts com defer é mantida de acordo com sua aparição no HTML.

Tabela comparativa:

Atributo Análise do HTML durante o carregamento do script Execução do script Manutenção da ordem de execução
Nenhum Pausa Imediatamente após o carregamento Sim
async Continua Imediatamente após o carregamento (pode interromper a análise) Não
defer Continua Após a conclusão da análise do HTML Sim

Exemplo:

<!-- Script normal - bloqueia a análise -->
<script src="script1.js"></script>

<!-- Script assíncrono - não bloqueia a análise, execução imediata após o carregamento -->
<script src="script2.js" async></script>

<!-- Script diferido - não bloqueia a análise, execução após a análise do HTML -->
<script src="script3.js" defer></script>
<script src="script4.js" defer></script> <!-- Será executado após script3.js -->