JavaScript高级部分_HTMLCSS JS的加载过程和网页解析的过程

JavaScript高级部分:ECMAScript BOM DOM(事件)

DOM简单学习:

  • 功能:控制html文档的内容
  • 获取页面标签(元素)对象:Element
    - document.getElmentById(“id值”):通过元素的id获取元素对象
  • 操作Element对象:
    - 修改属性值:明确获取的对象是哪一个?查看相关的API文档,找出那些属性是可以设置的
    - 修改标签体内容:属性—innerHTM 获取元素对象 使用innerHTML属性修改标签体内的内容

事件简单学习:

  • 功能:某些组件被执行了某些操作后,触发某些代码的执行

  • 事件的绑定:任何事件都是要绑定到某个标签对象上,绑定对象的方式通过属性提供唯一标识进行绑定
    - 直接在html标签上,指定事件的属性(操作),属性值就是js代码----通过方法进行绑定
    - `

     		<script>
     		    function fun(){
     		        alert('我被点了');
     		        alert('我又被点了');
     		    }
     		
     		    function fun2(){
     		        alert('咋老点我?');
     		    }
     		
     		    //1.获取light2对象
     		    var light2 = document.getElementById("light2");
     		    //2.绑定事件
     		    light2.onclick = fun2;
     		
     		
     		</script>
     	</body>`
          - 通过js获取元素对象,指定事件属性,设置一个函数进行绑定 
    

浏览器解析渲染【html的过程

  1. 用户输入网址(一般前后端分离的项目NG定位的都是index.html),浏览器向服务器发出请求,服务器返回html文件;
  2. 浏览器开始载入html代码,读取到<head>标签内有一个<link>标签引用外部CSS文件;
  3. 发出下载CSS文档的请求,服务器响应;
  4. 继续载入html中<body>部分的代码,用已有的CSS进行DOM结构开始构建—进行CSS的渲染,匹配的过程其实就是进行标签的匹配;
  5. 假设页面引用了一张<img>,向服务器发出下载请求。此时浏览器不会等到图片下载完,而是继续渲染后面的代码;
  6. 服务器返回图片文件,由于图片占用了一定面积,影响了后面段落的排布,因此执行重排。文件尾部,引入了一个<script>标签,执行其中的立即执行的脚本;
  7. JS脚本执行了style.display=”none”,假设为隐藏某个<div>`,隐藏该内容。
  8. 直到遇到</html>,表示执行完了此次的页面加载渲染过程
  9. 此时,假设用户点击页面的“换肤”按钮,JS让浏览器换了一下<link>标签的CSS路径,也就是执行了脚本中那部分交互逻辑;
  10. 浏览器检查各个元素,重新渲染页面----最后的动作还是渲染操作。

流程分析:

  1. 浏览器下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的
  2. 在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都已经下载完)
  3. 如果遇到语义解释性的标签嵌入文件(js脚本,css样式),那么此时浏览器的下载过程会弃用单独连接进行下载
  4. 并在下载后进行解析,解析过程中,停止页面所有往下元素的下载(阻塞下载)
  5. 样式表在下载完成后,将和以前下载的所有的样式表一起进行解析,解析完成后,将对此前所有元素包括以前已经渲染了的(重新渲染)—》保证页面的显示效果和预期效果一致
  6. JS、CSS中如果有重定义,后面定义的函数将覆盖前定义的函数

JS的加载
-

  1. 下载和解析不能一起进行(阻塞下载—提高效率,保证页面的尽量少做修改)
  2. 当引用了js的时候,浏览器将发送js 的请求一直等待该request的返回,因为浏览器需要一个稳定的DOM树结构,而js很有可能有代码直接修改了DOM树的结构,比如使用document.write或者appendChild等等,浏览器为了防止js修改DOM树,需要重新构建DOM树的情况,所以就会直接阻塞其他的下载和呈现

HTML CSS JS 三者加载的过程

<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文件的加载是与DOM的加载并行的,也就是说,CSS在加载时DOM树还在继续加载构建,而过程中遇到的css样式或者img,则会向服务器发送一个请求,待资源返回后,将其添加到dom中的相对应位置中;
  2. DOM加载到Script标签—》由于js文件不会与DOM并行加载,因此需要等待js整个文件加载完之后才能继续DOM的加载,倘若js的的文件过大,则会导致html页面的展现出现“”滞后“”,出现假死状态,造成给用户不好的体验
  3. 所以这也是为什么后期的技术栈的同时需要在js文件的开头出现$(document).ready(function(){})或者(function(){})或者window.onload,即是让DOM文档加载完成之后才执行js文件,避免出现dom找不到结点的问题,出现假死状态
  4. JS阻塞的原因:为了防止js修改代码,导致DOM树的重新构建
  5. 可以将scirpt标签放在body标签之后,这样就不会出现加载的冲突了。
  6. js是外部脚本:在script标签添加 defer=“true”—则会让js与DOM并行加载,带页面加载完成后再执行js文件–不会阻塞–defer进行延迟加载的控制
  7. js是外部脚本:在script标签添加 async=“true”—则会让js与DOM异步加载,不能保证js文件的加载顺序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值