src和href引入资源的区别
定义
href
href表示超文本引用,指向资源的位置,将文档和资源之间建立联系。
<a href="www.baidu.com" rel="stylesheet">link</a>
<link type="text/css" href="./index.css" />
src
src(source)表示引用外部资源来替换当前元素。在请求src资源的时候会将其指向的资源下载下来并应用在当前文档中。
<img src="./lanqiu.jpg">
<script src="./index.js" type="text/javascript"></script>
浏览器的解析方式
常见的说法
- 浏览器对于href链接的资源,会并行下载,不会阻塞dom的构建。
- 浏览器对于src指向的资源,会串行下载和执行,所以是会阻塞dom的构建。
但是这种说法是不正确的,浏览器对于资源的下载应该不是根据链接的种类来判断的。img标签中src指向的图片资源是并行下载。
<div style="height: 100px;background-color:aquamarine"></div>
<img style="height: 200px" src="https://images.pexels.com/photos/3490257/pexels-photo-3490257.jpeg" />
<div style="height: 100px;background-color:royalblue"></div>
这里看到的现象就是两个div一开始就渲染出来,图片缓慢的渲染出来。
**script标签中的src指向的脚本资源,如果没有设置defer和async,js文件的加载和执行确实会阻塞dom的构建。**但是这应该是浏览器的策略,而不是src的功能。
<div style="height: 100px;background-color:aquamarine"></div>
<script type="text/javascript" src="./index.js"></script>
<div style="height: 100px;background-color:royalblue"></div>
//index.js
const arr = [];
for (let i = 0; i < 100000000; i++) {
arr.push(i);
arr.splice(i % 3, i % 7, i % 5);
}
console.log(arr);
可以看到第二个div是在js文件下载完成并且执行之后才渲染出来的。这也就是说明了为什么要将script标签放在body的最下面,否则会出现页面闪动的现象。
总结
- href链接资源的位置,建立资源之间的联系,浏览器会并行加载。
- src指向的资源会下载下来,替换当前的标签,但是浏览器并非对于所有的src资源都会同步下载和执行,script指向的外部js的下载和执行会阻塞html的解析,但是img指向的图片资源并不会。
