Async, Defer and Dynamic Scripts

Explorar tipos de scripts async, defer e dinâmicos.

>

Daniel Movsesyan

Seguinte

Sep 12, 2020 – 3 min ler

>

>
>
>

>

>

>

>

>

>>

>

>>3045

Foto por Daniel Tran em Unsplash

Agora, os scripts podem ser mais pesados que o HTML e seu tamanho de download é maior, e o tempo de processamento também é maior.

Mas pode haver algumas questões importantes como:

  1. Scripts não podem ver elementos DOM abaixo deles
  2. Se houver um script volumoso no topo da página, ele “bloqueia a página”. Os usuários não podem ver o conteúdo da página até que ela seja baixada e executada.
>

>

Nós podemos resolver este problema colocando o script no final (depois de html), mas essa solução forçará o script a carregar depois de html carregar. Para documentos HTML longos, isso pode ser um atraso notável se as pessoas tiverem internet lenta.

Felizmente, existem dois atributos <script> que resolvem o problema para nós: defer e async.

Com o deferir atributo o navegador carrega o script em modo ‘background’ e o executa quando ele carrega.

>

>

>

>

>

>

Então o modo defer evita bloquear a página e os scripts com defer sempre executar quando o DOM estiver pronto, mas antes de DOMContentLoaded evento.

O evento DOMContentLoaded é disparado quando o documento HTML inicial é completamente carregado e analisado, sem esperar por folhas de estilo, imagens e subquadros para terminar o carregamento.

Cripts diferidos mantêm sua ordem relativa, assim como os scripts regulares. Então, se tivermos um script longo primeiro, e depois um menor, então o último aguarda.

Mas o atributo defer é ignorado se a tag <script> não tiver src.

Async

O atributo async significa que ele ajuda o script a carregar em modo ‘independente’.

O browser carrega páginas sem esperar que scripts async sejam carregados. DOMContentLoaded e async scripts não esperam um pelo outro (ordem “load-first”).

Outros scripts não esperam por async scripts, e async scripts não esperam por eles. O modo Async (como o modo deferir) não bloqueia a página.

Async scripts são ótimos quando integramos um script independente de terceiros na página: contadores, anúncios, ferramentas analíticas, etc., pois não dependem de nossos scripts, e nossos scripts não devem esperar por eles.

Dinâmica

Também podemos adicionar um script dinamicamente usando JavaScript:

>

O script começa a carregar assim que é anexado ao documento e se comporta como scripts “async” por padrão.

Significa:

  1. Não esperam por nada, nada espera por eles.
  2. O script que carrega primeiro – corre primeiro (ordem “load-first”).

Mas podemos desligar o modo async para scripts dinâmicos configurando script.async = false antes de anexá-lo ao html.

Resumo

Both async e defer têm uma coisa em comum: o download de tais scripts não bloqueia a renderização da página. Assim o usuário pode ler o conteúdo da página e se familiarizar com a página imediatamente.

Obrigado pela leitura. Espero que você tenha gostado 😎

Deixe uma resposta

O seu endereço de email não será publicado.