JS/CSS/IMG加载顺序关系之DOMContentLoaded事件

DOMContentLoaded介绍

DOMContentLoaded事件的触发条件是:

将会在“所有的DOM全部加载完毕并且JS加载执行后触发”

但如果“js是通过动态加载进来的话,是不会影响到DOMContentLoaded的触发时间”

如下图所示,蓝色的线代表DOMContentLoaded开始触发,但前提是JS已经加载完毕并执行了。

(仅仅是DOM 并不是onload事件整个页面全部加载完毕触发,DOMContentLoaded比onload要早触发 请区分开,onload为红线 表示页面已经全部加载完毕)

 

IMG和CSS在DOMContentLoaded触发前都做了些什么?

上面说到在DOMContentLoaded触发之前,JS已经执行完毕。

但是IMG和CSS呢?我们看下图:DOMContentLoaded事件触发了,但是有的图片被阻挡了。

阻挡也就意味着被浏览器进行了延迟加载,虽然图片请求很早就发了出去。

但是浏览器认为你的CSS没有加载完毕,不确定图片的样式到底如何,牵扯到重绘资源问题。

于是将在CSS加载完毕后加载图片。(图下没有进行阻塞的图片请求是因为没有样式名,考虑到CSS不会改变它,浏览器就不需要阻塞它)

关键点来了:虽然CSS样式表会阻塞图片的加载,但是:JS不会。

如果你的页面没有CSS样式表,图片将全部在第一时间进行加载,不会判断你JS是否加载完毕,才去加载图片。

这个应该是和浏览器特性有关,我用的是firefox 29.01

 

最后的结论

1、CSS样式表影响了图片的加载速度,然而JS不会影响,如果想让图片尽快加载,就不要给图片使用样式,比如宽高采用标签属性即可。

2、JS的加载执行速度影响了DOMContentLoaded事件的触发时间,如果想要尽快触发DOMContentLoaded事件,就将次要的JS采用动态加载的方式加载吧。

参考资料:

jquery的ready函数是如何工作的?介绍了加载响应事件的区别。

http://www.cnblogs.com/haogj/archive/2013/01/15/2861950.html

JS、CSS以及img对DOMContentLoaded事件的影响(这篇文章使用的是chrome,我后来用firefox测试,把知识重新进行梳理了一下,在此感谢此文作者!)

http://www.alloyteam.com/2014/03/effect-js-css-and-img-event-of-domcontentloaded/

 

 

作者:Margo_test
出处:http://www.cnblogs.com/margo/

欢迎分享与转载。

 

转载于:https://www.cnblogs.com/margo/p/3745301.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值