zoukankan      html  css  js  c++  java
  • 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/

    欢迎分享与转载。

  • 相关阅读:
    UVa 839 -- Not so Mobile(树的递归输入)
    UVa 548 -- Tree
    UVA 122 -- Trees on the level (二叉树 BFS)
    UVa679 小球下落(树)
    POJ 2255 -- Tree Recovery
    POJ 1451 -- T9
    POJ 2513 -- Colored Sticks
    STL -- heap结构及算法
    nginx利用try_files实现多个源
    nginx location的优先级
  • 原文地址:https://www.cnblogs.com/margo/p/3745301.html
Copyright © 2011-2022 走看看