美文网首页
script async和defer, 什么是阻塞渲染

script async和defer, 什么是阻塞渲染

作者: 一爷之秋 | 来源:发表于2019-09-26 10:31 被阅读0次

浏览器渲染逻辑

  • 浏览器下载html网页,边下载边解析渲染
  • 解析过程中发现script标签
  • 网页停止解析,把网页渲染控制权交给javascript引擎
  • 如果<script>标签加载了外部脚本,就开始下载外部脚本,如果不是加载外部脚本,就直接执行
  • 下载、执行完毕,控制权还给网页渲染引擎,继续下载解析html网页,解析并渲染网页
    在这个过程中,如果需要加载的外部脚本非常大,或者因为网速原因加载缓慢,则会造成浏览器不渲染或者空白,出现假死的现象。

async: 异步加载

只适用于加载外部脚本,加载过程如下

  • 浏览器下载html网页,边下载边解析渲染
  • 解析过程中发现async属性的script标签
  • 网页继续下载解析,同时启动javascript标签开始下载外部脚本
  • 脚本下载完成,浏览器暂停解析html网页,执行下载好的脚本
  • 脚本执行完成,继续解析html网页
    优点:一定程度上解决了阻塞浏览器渲染html的问题
    缺点:不清楚脚本加载完成的顺序,也就不知道哪一个脚本先执行;同时如果外部脚本报严重级错误,或者脚本代码陷入死循环,则同样会浏览器渲染崩溃或者陷入假死

defer:延迟加载

延迟执行js脚本,直至网页渲染完成

  • 浏览器下载html网页,边下载边解析
  • 解析过程中发现defer属性的script标签
  • 网页继续下载解析,同时启动javascript标签开始下载外部脚本
  • 网页渲染完成,执行下载的js脚本
    DOM渲染完成,才会执行js脚本

相关文章

  • script async和defer, 什么是阻塞渲染

    浏览器渲染逻辑 浏览器下载html网页,边下载边解析渲染 解析过程中发现script标签 网页停止解析,把网页渲染...

  • defer 和 async

    script 没有 defer 和 async 会停止(阻塞)dom 树构建,立即加载,并执行脚本 script ...

  • script上defer及async属性浅谈

    当script上有defer或async属性时,script的下载均不会阻塞html的解析,但是一旦含有async...

  • script - defer vs async

    no defer or async 立即下载执行脚本。 下载和执行阶段都阻塞dom渲染。-- 白屏时间加长 asy...

  • 简述async和defer

    defer和async是script标签的两个属性,用于在不阻塞页面文档解析的前提下,控制脚本的下载和执行。先了解...

  • async和defer的作用和区别

    defer和async是script标签的两个属性,用于在不阻塞页面文档解析的前提下,控制脚本的下载和执行。我们先...

  • async和defer的作用是什么?有什么区别

    defer和async是script标签的两个属性,用于在不阻塞页面文档解析的前提下,控制脚本的下载和执行。在介绍...

  • async和defer的具体作用和使用场景。

    async,加载和渲染后续文档元素的过程将和 script.js 的加载与执行并行进行(异步)。 defer,加载...

  • script、link标签详解