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/

欢迎分享与转载。

JS/CSS/IMG加载顺序关系之DOMContentLoaded事件,布布扣,bubuko.com

时间: 2024-08-27 14:47:09

JS/CSS/IMG加载顺序关系之DOMContentLoaded事件的相关文章

js文件最后加载(在window.load事件发生后再加载js文件),用于解决因jQuery等js库导致网页加载慢的问题

需引入文件:lazyload-min.js <script src="JS/lazyload-min.js" type="text/javascript"></script> 插入代码: function loadscript() { LazyLoad.loadOnce([ 'JS/touch.js', 'http://libs.baidu.com/jquery/1.2.3/jquery.min.js' ], loadComplete); }

关于js css html加载顺序整理

1.js放在head中会立即执行,会阻塞后续的资源下载与执行.因为js有可能会修改dom,如果不阻塞后续的资源下载,dom的操作顺序不可控. 2.js的执行依赖前面的样式.即只有前面的样式全部下载完成后才会执行js,但是此时外链css和外链js是并行下载的. 3.js放在body的最后面,可以避免资源阻塞,同时使静态的html页面迅速显示. 4.外链的js如果含有defer="true"属性,将会并行加载js,到页面全部加载完成后才会执行,会按顺序执行. 5.外链的js如果含有asyn

对于HTML页面中CSS, JS, HTML的加载与执行过程的简单分析

最近在研究HTML页面中JavaScript的执行顺序问题.在JavaScript中,定义一个方法或者函数有很多方式,最常见的有2中,function语句式与函数直接量方式. 对于function语句式,解释器会优先解释.即加载了这个js文件后,会扫描一下所有的js代码,然后把该优先执行的东西先执行了,然后再从上到下按顺序执行.所以,定义的代码可以在执行的代码后边.就跟C#中的方法定义一样.解释器已经记住了这个方法,知道在内存中的哪里,用的时候直接去取就行了. C#语言是,对象中的属性与方法具有

nginx实现动态分离,解决css和js等图片加载问题

改帖专门为使用nginx,通过nginx把请求转发到web服务器再返回客户端的时候,解决css和js和图片加载不出来的问题. 如果没安装nginx,请访问一下地址进行安装 <a href="http://www.cnblogs.com/sz-jack/p/5200283.html">http://www.cnblogs.com/sz-jack/p/5200283.html</a>

html中的图片、css、js等路径加载问题

网页文件的存取路径有3种:物理路径.绝对路径和相对路径. 物理路径就是你的文件放在主机上的具体位置,例如:D:\\image\\1.jpg 这种格式,该方法可以很快确定出你的文件,但是在网页显示路径基本很少用. 绝对路径是以网站的根目录(www)作为起始点,某文件在该项目中具体位置信息.比如你的网站放在 /var/www 中,那么 /var/www 就是你的根目录.如果文件 head.jpg 放在该目录的 image 里,那么 head.jpg 的路径信息就是 /image/head.jpg.但

js插件动态加载js、css解决方案

最近因为工作需要做了一个js自动导入的插件,一开始很天真的以为动态创建个script添加到head中就ok了,试了之后才发现了问题,就是如果同时引入了多个js文件,而且后一个文件中用到了前一个文件中的变量,那就会报错,靠~~悲催了,就是说js如果动态加载(非浏览器加载因为浏览器加载时同步加载的会等待前一个js加载完成后才进行下一个js加载,这样就不会出现问题)那加载的文件是异步进行的,难怪啊!然后在网上找了些资料说用ajax同步加载,然后我试了真可以,下面就是我的代码分享出来给大家,但是注意这样

html、css、js三者的加载顺序

页面的加载顺序时从上往下加载的: 1.DOM树加载到llink标签 css文件的加载和DOM树的加载是可以同时进行的,也就是说,css在加载时DOM树还在继续构建. 这个过程中如果遇到css样式或者img,会向服务器发送一个请求,待资源返回后,将其添加到DOM中的相应位置. 2.DOM树加载到script标签 由于JS是单线程模式,因此不会与DOM并行加载,因此需要等到整个js文件加载完后再继续加载DOM.倘若JS文件过大,则可能导致浏览器页面显示滞后,出现"阻塞效应". .JS阻塞其

js的动态加载、缓存、更新以及复用(一)

使用范围: OA.MIS.ERP等信息管理类的项目,暂时不考虑网站. 遇到的问题: 完成一个项目,往往需要引用很多js文件,比如jQuery.js.easyUI等.还有自己写的一些列js文件,那么这些文件如何方便的加载,如果文件有变化如何才能让客户端及时更新缓存?如果能够提高点运行效率,那就更好了. 目标: 1.  可以方便的引用js文件. 2.  尽量使用各种缓存,避免频繁从服务器读取文件. 3.  如果js文件有更新或者增加.减少几个减少js文件,需要客户端能够自动.立刻更新. 4.  Js

js的动态加载、缓存、更新以及复用(三)

总体思路 1.  建立一个js服务,该服务实现通用js文件的加载.依赖.缓存.更新以及复用. 2.  各个项目如果使用通用js,可(bi)以(xu)使用js服务实现加载. 3.  Js服务只提供通用的js,比如jQuery.my97.easyUI等(可根据实际情况设定具体的js文件). 4.  其他针对特点需求写的js文件,需要自己写代码加载.Js服务可以提供加载用函数.(正在考虑要不要使用sea.js) 5.  Js服务加载的js文件,不需要做任何修改.当然也不负责各个文件里的函数名称是否冲突