html,css,js加载顺序
1.js放在head中会⽴即执⾏,阻塞后续的资源下载与执⾏。因为js有可能会修改dom,如果不阻塞后续的资源下载,dom的操作顺序不可控。
正常的⽹页加载流程是这样的。
1. 浏览器⼀边下载HTML⽹页,⼀边开始解析
vba字符串分割split2. 解析过程中,发现<script>标签
3. 暂停解析,⽹页渲染的控制权转交给JavaScript引擎
4. 如果<script>标签引⽤了外部脚本,就下载该脚本,否则就直接执⾏
5. 执⾏完毕,控制权交还渲染引擎,恢复往下解析HTML⽹页
如果外部脚本加载时间很长(⽐如⼀直⽆法完成下载),就会造成⽹页长时间失去响应,浏览器就会呈现“假死”状态,这被称为“阻塞效应”。html需要等head中所有的js和css加载完成后才会开始绘制,但是html不需要等待放在body最后的js下载执⾏就会开始绘制,因此将js放在body的最后⾯,可以避免资源
阻塞,同时使静态的html页⾯迅速显⽰。将脚本⽂件都放在⽹页尾部加载,还有⼀个好处。在DOM结构⽣成之前就调⽤DOM,JavaScript会报错,如果脚本都在⽹页尾部加载,就不存在这个问题,因为这时DOM肯定已经⽣成了。
2.js的执⾏依赖前⾯的样式。即只有前⾯的样式全部下载完成后才会执⾏js,但是此时外链css和外链js是并⾏下载的。源代码2 异形大战铁血战士
css需要分块,⾸页的css独⽴,其余的css需要动态加载,因为html的绘制会被css阻塞,这样可以减少⾸次进⼊时的⽩屏时间。
3.外链的js如果含有defer="true"属性,将会并⾏加载js,到页⾯全部加载完成后才会执⾏,会按顺序执⾏。编程用的是什么语言
defer属性的作⽤是,告诉浏览器,等到DOM加载完成后,再执⾏指定脚本。
1. 浏览器开始解析HTML⽹页
2. 解析过程中,发现带有defer属性的script标签
3. 浏览器继续往下解析HTML⽹页,同时并⾏下载script标签中的外部脚本
4. 浏览器完成解析HTML⽹页,此时再执⾏下载的脚本
快速排序算法的空间复杂度平均情况下为最坏情况下为 对于内置⽽不是连接外部脚本的script标签,以及动态⽣成的script标签,defer属性不起作⽤。html个人网页完整代码顺序
4.外链的js如果含有async="true"属性,将不会依赖于任何js和css的执⾏,此js下载完成后⽴刻执⾏,不保证按照书写的顺序执⾏。因为async="true"属性会告诉浏览器,js不会修改dom和样式,故不必依赖其它的js和css。
async属性的作⽤是,使⽤另⼀个进程下载脚本,下载时不会阻塞渲染。
1. 浏览器开始解析HTML⽹页
2. 解析过程中,发现带有async属性的script标签
3. 浏览器继续往下解析HTML⽹页,同时并⾏下载script标签中的外部脚本
4. 脚本下载完成,浏览器暂停解析HTML⽹页,开始执⾏下载的脚本
5. 脚本执⾏完毕,浏览器恢复解析HTML⽹页
async属性可以保证脚本下载的同时,浏览器继续渲染。需要注意的是,⼀旦采⽤这个属性,就⽆法musician怎么读
保证脚本的执⾏顺序。哪个脚本先下载结束,就先执⾏那个脚本。另外,使⽤async属性的脚本⽂件中,不应该使⽤document.write⽅法。
⼀般来说,如果脚本之间没有依赖关系,就使⽤async属性,如果脚本之间有依赖关系,就使⽤defer属性。如果同时使⽤async和defer属性,后者不起作⽤,浏览器⾏为由async属性决定。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论