首页 > 其他分享 >html,css,js加载顺序

html,css,js加载顺序

时间:2022-10-29 19:55:47浏览次数:65  
标签:脚本 浏览器 DOM js html 网页 css 加载

<head lang="en">
    <meta charset="utf-8">
    <title></title>
    <link rel="stylesheet" href="css/*.css">
    <script src="js/*.js></script>
</head>

DOM文档的加载顺序是由上而下的顺序加载;

1、DOM加载到link标签(css)

css文件的加载是与DOM的加载并行的,也就是说,css在加载时Dom还在继续加载构建,而过程中遇到的css样式或者img,则会向服务器发送一个请求,待资源返回后,将其添加到dom中的相对应位置中;

浏览器一边下载HTML网页,一边开始解析;
解析过程中,发现link 标签
浏览器继续往下解析HTML网页,同时并行下载link标签中的css样式

2、DOM加载到script标签(js)
(1)正常非处理网页
由于js文件不会与DOM并行加载,因此需要等待js整个文件加载完之后才能继续DOM的加载,倘若js脚本文件过大,则可能导致浏览器页面显示滞后,出现“假死”状态,这种效应称之为“阻塞效应”;会导致出现非常不好的用户体验;

正常的网页加载流程是这样的。
浏览器一边下载HTML网页,一边开始解析
解析过程中,发现script标签
暂停解析,网页渲染的控制权转交给JavaScript引擎32
如果script标签引用了外部脚本,就下载该脚本,否则就直接执行
执行完毕,控制权交还渲染引擎,恢复往下解析HTML网页

html需要等head中所有的js和css加载完成后才会开始绘制,但是html不需要等待放在body最后的js下载执行就会开始绘制,因此将js放在body的最后面,可以避免资源阻塞,同时使静态的html页面迅速显示。将脚本文件都放在网页尾部加载,还有一个好处。在DOM结构生成之前就调用DOM,JavaScript会报错,如果脚本都在网页尾部加载,就不存在这个问题,因为这时DOM肯定已经生成了。

js文件不会与DOM并行加载,而这个特性也是为什么在js文件中开头需要$(document).ready(function(){})或者(function(){})或者window.onload,即是让DOM文档加载完成之后才执行js文件,这样才不会出现查找不到DOM节点等问题;

js阻塞其他资源的加载的原因是:浏览器为了防止js修改DOM树,需要重新构建DOM树的情况出现;

(2)外链的js如果含有defer="true"属性,将会并行加载js,到页面全部加载完成后才会执行,会按顺序执行。

defer属性的作用是,告诉浏览器,等到DOM加载完成后,再执行指定脚本。

浏览器开始解析HTML网页
解析过程中,发现带有defer属性的script标签
浏览器继续往下解析HTML网页,同时并行下载script标签中的外部脚本 浏览器完成解析HTML网页,此时再执行下载的脚本

对于内置而不是连接外部脚本的script标签,以及动态生成的script标签,defer属性不起作用。

(3)外链的js如果含有async="true"属性,将不会依赖于任何js和css的执行,此js下载完成后立刻执行,不保证按照书写的顺序执行。因为async="true"属性会告诉浏览器,js不会修改dom和样式,故不必依赖其它的js和css。

async属性的作用是,使用另一个进程下载脚本,下载时不会阻塞渲染。

浏览器开始解析HTML网页
解析过程中,发现带有async属性的script标签
浏览器继续往下解析HTML网页,同时并行下载script标签中的外部脚本 脚本下载完成,浏览器暂停解析HTML网页,开始执行下载的脚本
脚本执行完毕,浏览器恢复解析HTML网页

async属性可以保证脚本下载的同时,浏览器继续渲染。需要注意的是,一旦采用这个属性,就无法保证脚本的执行顺序。哪个脚本先下载结束,就先执行那个脚本。另外,使用async属性的脚本文件中,不应该使用document.write方法。

一般来说,如果脚本之间没有依赖关系,就使用async属性,如果脚本之间有依赖关系,就使用defer属性。如果同时使用async和defer属性,后者不起作用,浏览器行为由async属性决定。

同时使用defer和async属性时,defer属性会失效;
————————————————
版权声明:本文为CSDN博主「孟孟_mengmeng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40922656/article/details/118056527

标签:脚本,浏览器,DOM,js,html,网页,css,加载
From: https://www.cnblogs.com/sexintercourse/p/16839502.html

相关文章

  • 【JS】扩展内建类 - Symbol.species
    species是个函数值属性,其被构造函数用以创建派生对象,species访问器属性允许子类覆盖对象的默认构造函数。 JS内建类可以被扩展classMyArrayextendsArray{......
  • CSS权重的叠加
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width......
  • js 字符串中包含逗号和分号分析成数组
    varstr="117.39755436808615,34.59211450864094;117.39783481906638,34.59185738594207;117.39825396841732,34.59151467824745;117.39895365857903,34.5909999082......
  • js 数组-过滤数据
    js数组-过滤数据filter()方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。注意:filter()不会对空数组进行检测。注意:filter()不会改......
  • HTML DOM
    HTMLDOM是HTMLDocumentObjectModel(文档对象模型)的缩写,定义了访问和操作HTML文档的标准方法DOM以树结构表达HTML文档 HTMLDOM是:HTML的标准对象模型HTM......
  • 1_js中过滤器filter简单实现
    filterAPI自实现我感觉这个API我用起来不是很顺畅我自己写一个看看分析这是api参考手册设计思路抛开其他的不谈,filter本质上就是原型Array上的一个函数==ap......
  • 【Node.JS 练习】时钟案例
    目录​​案例要求​​​​实现​​​​步骤​​​​创建正则表达式​​​​使用相关模块,读取需要被处理的html文件​​​​自定义resolve方法​​​​css​​​​ js​​......
  • 【Node.JS 】http的概念及作用
    什么是http模块在网络节点中,负责消费资源的电脑,叫做客户端,负责对外提供网络资源的电脑,叫做服务器。http模块是Node.js官方提供的,用来创建web服务器的模块,通过http模块提供的......
  • 【Node.JS 练习】考试成绩整理
     目标整理前的数据格式  整理后的数据格式 实现思路导入需要的fs文件系统模块使用fs.readFile()方法,读取素材目录下的成绩.txt文件。判断文件是否读取失败。文件读取成功......
  • 【Node.JS】buffer类缓冲区
    目录​​简介​​​​创建Buffer类​​​​使用Buffer类​​​​例 ​​​​直接使用buffer类​​简介node.js的开发语言就是js,javascript语言自身只有字符串数据类型,没有......