美文网首页
JS(浏览器)加载时间线

JS(浏览器)加载时间线

作者: 发飙的奶牛 | 来源:发表于2019-03-15 10:46 被阅读0次

个人笔记,仅供参考。

JS加载时间线,换句话讲可以理解为浏览器渲染页面时的时间流程。

  1. 生成document对象,开始对web页面进行解析,此时document.readyState = "loading";
  2. 遇到link标签引入的外部css,开启新的线程异步加载(同时进行,谁都不妨碍谁),并继续解析文档;
  3. 遇到script标签外部js,并且没有defer,async属性,浏览器加载,并阻塞页面(等待js加载并执行该脚本,妨碍到别个了),然后继续解析文档;
  4. 遇到script外部js,并且有defer或者async属性,浏览器开启新的线程异步加载,并继续解析文档;如是async属性,加载完就立即执行;
  5. 遇到img等,先正常解析dom结构,然后浏览器异步加载src,并继续解析文档;
  6. 当文档解析完成,doucment.readyState = "interactive";
  7. 当文档解析完成,所有设置有defer的脚本会按照顺序执行;
  8. 当文档解析完成,触发document的DOMContentLoaded事件;
  9. 当所有async的脚本加载完并执行后,img等加载完成后,此时document.readyState = "complete",文档加载完毕,触发window.onload事件;

总结:

  1. JS最好放在文档下面加载,不会阻塞页面的正常解析;
  2. 工具类的JS 可以放在head里面,但要异步加载;
  3. window.onload事件,是要等所有加载完成后才触发(如果有一张图片一直无法加载,就会一直等待),效率最低,所以,最好是把主程序代码放到文档解析完成后开始执行:

// 监听dom解析完就执行的代码
document.addEventListener('DOMContentLoaded', function(){
//代码块
},false)

相关文章

  • JS(浏览器)加载时间线

    个人笔记,仅供参考。 JS加载时间线,换句话讲可以理解为浏览器渲染页面时的时间流程。 生成document对象,开...

  • 浏览器性能提升--js加载优化

    动态加载js脚本函数封装优点:js代码加载不阻塞浏览器其他的执行

  • RequireJS规范

    为什么使用RequireJS 上述多个js文件加载的时候,浏览器会停止网页渲染(JS阻塞浏览器渲染),加载文件越多...

  • js加载时间线

    1、创建Document对象,开始解析web页面。解析HTML元素和他们的文本内容后添加Element对象和Tex...

  • JS加载时间线

    浏览器在解析文档的时候,会按照特定的规则一步一步进行解析。我将此过程用下面这张图记录下来,方便查阅

  • js加载时间线

    渡一公开课笔记。侵删 1.创建Document对象,开始解析web页面,解析HTML元素和他们的文本内容后添加El...

  • js加载时间线

    创建Document对象, 开始解析web页面. 解析HTML元素和它们的文本内容之后, 添加Element对象和...

  • 2018-10-11(浏览器加载js的阻塞&非阻塞)

    1、js在浏览器中的阻塞 常规理解就是浏览器在加载js时候会阻塞浏览器的渲染操作,但页面性能决定不希望我们在加载j...

  • 同步按顺序动态加载JS

    我们知道, 现代主流浏览器(如chrome)加载js是异步执行的,会同时加载多个js,那么当我们需要在js中动态加...

  • 白屏和FOUC

    白屏和FOUC 白屏:浏览器加载会等css,js,图片等加载完成后,显示FOUC:浏览器会先显示文字,加载完成cs...

网友评论

      本文标题:JS(浏览器)加载时间线

      本文链接:https://www.haomeiwen.com/subject/nttcmqtx.html