美文网首页
为什么先加载css后加载js

为什么先加载css后加载js

作者: 小王子__ | 来源:发表于2021-04-01 15:14 被阅读0次

1,几个使用的BOM属性对象方法

什么是BOM,BOM是浏览器对象,有哪些常用的BOM属性呢?

1,location
location.href-- 返回或设置当前文档的URL

location.search -- 返回URL中的查询字符串部分。例如:
http://www.dreamdu.com/dreamdu.php?id=5&name=dreamdu返回包括(?)后面的内容?id=5&name=dreamdu

location.hash -- 返回URL#后面的内容,如果没有#,返回空

location.host -- 返回URL中的域名部分,例如
www.dreamdu.com

location.hostname -- 返回URL中的主域名部分,例如dreamdu.com

location.pathname -- 返回URL的域名后的部分。例如http://www.dreamdu.com/xhtml/返回/xhtml/

location.port -- 返回URL中的端口部分。例如http://www.dreamdu.com:8080/xhtml/返回8080

location.protocol -- 返回URL中的协议部分。例如http://www.dreamdu.com:8080/xhtml/ 返回(//)前面的内容http:

location.reload() -- 重载当前页面

2,history对象

history.go(num) 前进或者后退指定的页面数

history.back() 后退一页

history.forward() 前进一页

3,navigator对象

navigator.userAgent -- 返回用户代理头的字符串表示(就是包括浏览器版本信息等的字符串)

navigator.cookieEnabled -- 返回浏览器是否支持(启用)cookie

2,说下http2.0

http和https的区别:https是基于ssl加密的http协议

http2.0提升访问速度、允许多路复用、服务端推送、首部压缩

3,400 401 403状态码

400:请求无效

产生原因:前端提交请求的字段名或者类型与后端的实体没有保持一致

401:当前请求需要用户验证

403:服务器已经得到请求,但是拒绝执行

状态码大全:https://www.php.cn/web/web-http200.html

4,fetch发送两次请求的原因

fetch发送post请求的时候,总是发送两次,第一次状态是204,第二次才成功?

因为fetch发送post请求的时候,导致fetch第一次发送了一个options请求,询问服务器是否支持修改的请求头,如果服务器支持,则在第二次中发送真正的请求

5,js中defer和async区别

defer(延迟脚本):

 <script defer type="text/javascript" src="test.js"></script>

defer只适用于外部脚本文件

这个属性的作用是表明脚本在执行时不会影响页面的构造,也就是说,脚本会被延迟到整个页面都解析完毕后运行。也就相当于告诉浏览器立即下载,但延迟执行

HTML5规范要求脚本按照它们出现的先后顺序执行,因此第一个延迟脚本会先于第二个延迟脚本执行

async(异步脚本):

<script async type="text/javascript" src="test1.js"></script>
<script async type="text/javascript" src="test2.js"></script>

异步脚本:async属性只适用于外部脚本文件,并告诉浏览器立即下载文件

但与defer不同的是:标记为async的脚本并不保证按照指定他们的先后顺序执行

上面代码test2.js可能会在test1.js之前执行

6,为什么先加载css后加载js

先加载css后加载js,因为css加载会阻塞浏览器渲染,为了打开网页白屏时间缩短,会优先选择加载css;后加载js是因为js中可能会修改DOM元素,js加载会阻塞浏览器解析html,造成获取不到DOM的情况。

<head>
  <meta charset="utf-8">
  <title></title>
  <link rel="stylesheet" href="css/*.css" rel="external nofollow" >
  <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脚本文件过大,则可能导致浏览器页面显示滞后,出现“假死”状态,这种效应称之为“阻塞效应”;会导致出现非常不好的用户体验;

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

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

相关文章

  • 一文读懂 css js 阻塞问题

    前言 先抛出几个问题: css 加载会不会阻塞 js 的加载?(不会) css 加载会不会阻塞 js 的执行?(会...

  • 为什么先加载css后加载js

    1,几个使用的BOM属性对象方法 什么是BOM,BOM是浏览器对象,有哪些常用的BOM属性呢? 1,locatio...

  • 白屏和FOUC

    白屏和FOUC 白屏:浏览器加载会等css,js,图片等加载完成后,显示FOUC:浏览器会先显示文字,加载完成cs...

  • js动态加载HTML元素时点击事件无效

    js动态加载HTML元素时点击事件无效: 是因为这些动态加载的这些HTML,是在css,js代码加载完后,再添加的...

  • JavaScript动态加载js和css

    动态加载js 参考:javascript 性能优化 动态加载css 参考: 动态加载 css 方法实现和深入解析 ...

  • js的加载顺序

    先加载执行a.js,完毕后再加载执行b.js。 先执行a.js,完毕后再执行b.js。 这就不可以确定谁先执行了,...

  • 2020-03-10

    1. css会阻塞渲染 css加载不会阻塞DOM树的解析css加载会阻塞DOM树的渲染css加载会阻塞后面js语句...

  • html,css,js加载顺序

    1. 加载方式 css 异步加载(不阻塞)js 同步加载(阻塞) 2. 放置顺序 css 放置于 标签中原因:...

  • React Native 资源包拆分实践(二)

    Native加载多个 JS Bundle 客户端会先加载公共基础包,加载完成后,再加载业务包。 安卓端加载多个 J...

  • vue无限加载

    vue无限加载 template: js: css: js无限加载 先了解三个变量: document.docum...

网友评论

      本文标题:为什么先加载css后加载js

      本文链接:https://www.haomeiwen.com/subject/ouptkltx.html