DOMcontentload与load

3 篇文章 0 订阅

简介:

DOMContentLoaded与load简介

DOMContentLoaded事件在页面文档加载解析完毕之后马上执行。而不会等待图片文件和子框架页面的加载

onload

load事件会在页面所有资源被加载进来之后才会触发load事件。load时间在DOMContentLoaded事件触发之后

兼容性

onload事件所有浏览器都支持,DOMContentLoaded事件,高级浏览器均支持E6、IE7仅支持onreadystatechange,更低级的ie用doscroll事件来检测


要在DOMcontentload之后进行一系列操作,那么了解每个文件的用途以及在浏览器中的表现形式至关重要。


浏览器的渲染流程简介:

解析HTML文档构建DOM树——构建渲染树——渲染树布局——绘制渲染树 


CSS篇

测试方法:

    引入外部css+内联css样式来测试。然后对外部的css进行不同的处理,增加响应时间或者timeout请求

测试结果:

    当外部css长时间处于pending中。页面会处于白屏的状态。当请求超时之后,页面会展现内联样式或者其他浏览器自带样式

分析结论:

    为了防止页面重复渲染,浏览器多次重绘页面,降低性能。所以css会素在页面的渲染,但是不会阻塞页面DOM的解析

js篇

测试方法:

    页面中插入内嵌js或者引入外部js来测试。

测试结果:

    js会阻塞页面解析

分析结论:

    js的加载和执行都会阻塞页面

js与css篇

一个完整的页面中css和js文件都不可缺少。当一个页面中css和js出现某些情况时候浏览器又会表现怎么样的状况。

测试方法:

    页面中引入内嵌js,内嵌css,外联css,外联js,并且更改不同的顺序和响应时间来解决

测试结果:

  • 当内嵌js在前时,浏览器会先执行js,在按照顺序向下加载。
  • 当外联css在前时,内嵌js和外联js在后,此时会等到浏览器解析完毕css之后才会执行内嵌的js和外联js
  • 浏览器的css在解析完毕之前会阻塞之后js的执行

测试分析:

    为了保证浏览器的性能最优,浏览器会按照脚本的顺序来执行。js必须等位于它的css样式表之前加载和解析完之后才会执行。同样js的执行也会阻塞页面。但是js不会阻塞之前已经解析dom结构的重绘

页面篇

页面中包含的内容更加丰富和多样,在浏览器对于页面是怎么解析的?

1.浏览器下载html开始对html进行解析会按照顺序进行解析。

    当html过于庞大浏览器会进行边下载边解析。gzip的格式可以进行边下载边解析。减少了请求的字节数。

2.解析css

  • 内联的css会进行解析同时解析dom
  • 外嵌的css会进行下载,并且解析

3.解析到js

  • 会先解析脚本之前的css文件,如果解析完毕会立即执行js,执行js的时候会中断dom的解析和css的解析。
  • 脚本的下载优先级较高。当页面队列中有多个请求时,例如图片。脚本的下载的优先级会提高。
  • css和js的优先级按照解析的顺序来计算

4.解析到图片,svg等其他资源

    如果碰到js的时候浏览器会优先解析js。在执行其他操作

5.资源长时间不响应,浏览器的处理流程?

    当解析被阻塞的时候。一个轻量的解析器会扫描剩余的HTML,来解析HTML中的URL

6.资源过大。浏览器解析工作?

    浏览器解析文档的时候,会进行边解析边渲染。不会等待所有的解析完毕才开始渲染页面

7.如何优化页面性能?

  • 减少页面的请求数量,合并css优化css响应时间。
  • 将css放入头部,js放入尾部减少页面白屏时间
  • 对css和js进行合理压缩 
  • 触发页面预检来减少请求时间
  • 增加缓存来减少请求时间
回归主题DOMcontentload之后我们进行哪些操作会影响到页面

1.绑定事件

    DOMcontentload之后。我们可以访问到dom元素。同时可以对元素进行绑定时间,js执行的时间会影响load时间,但是不影响页面的展示

2.加载css、js、图片

    DOMcontentload之后,只是可以访问dom节点。但是并未完全加载完毕页面的资源。如果加载js和css会影响页面其他资源的加载。因为css和js的优先级较高。浏览器可以并行加载。会增加load的时间。同时加载css会使得页面重绘。加载js会阻塞其他页面。加载图片等资源会占用网络资源。

3.修改dom操作

    DOMcontentload之后直接修改dom操作。会使得页面重排增加页面load时间。影响视觉和用户体验。

4.测试方式:


测试项目的地址:

    https://github.com/qinchenguang/TestLoad



  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值