src 属性是source的缩写,意思为来源,一般作为媒体元素 HTNLDediaElement 的媒体资源映射URL。例图片、脚本的资源路径:
<img src="image/demo.png">
<iframe src="inner.html">
<script src="demo.js"></script>
src 加载媒体资源时时阻塞式的,页面的其他资源会暂停处理,这就是为什么一般吧 script 脚本标签放在文档末尾加载的一个原因。
href 是 Hypetext Reference 的缩写,意思为超文本引用,由于是非媒体资源,外部引用,也就是页面无需呈现出来的资源,所以加载这种资源的时候是非阻塞式的。例 link 和 a 标签:
<link rel="stylesheet" src="style/demo.css">
<a href="./demo">demo</a>
总结来说就是,src 是媒体资源路径的映射,是阻塞式加载,href 是超链接,是非阻塞式的。
我们可以理解为媒体资源是需要实实在在显示在页面上的,是DOM结构中的实实在在的数据,因此会阻塞加载,而超链相当于一个属性,一条引用,并不需要把真实的资源呈现到页面上,也就无需阻塞页面加载了。
值得注意的一问题就是,js脚本并不是媒体资源,也不是DOM需要的数据,为什么 js 脚本要用 src 而 css 就可以用 href 呢?实际上,这是设计之初的决定,可能设计者认为js脚本的执行会改变页面,也就是改变DOM,当然需要随着页面一起加载,而 css 只是页面样式,并不会改变 DOM ,也就属于超链接了,从这层含义理解,就知道是否阻塞页面和引用的资源大小无关了,而是和是否实际改变了页面 DOM 有关。