首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
JavaScript类型:关于类型,有哪些你不知道的细节?
JavaScript对象:面向对象还是基于对象?
JavaScript对象:我们真的需要模拟类吗?
JavaScript对象:你知道全部的对象分类吗?
JavaScript执行(一):Promise里的代码为什么比setTimeout先执行?
JavaScript执行(二):闭包和执行上下文到底是怎么回事?
JavaScript执行(三):你知道现在有多少种函数吗?
JavaScript执行(四):try里面放return,finally还会执行吗?
JavaScript词法:为什么12.toString会报错?
(小实验)理解编译原理:一个四则运算的解释器
JavaScript语法(预备篇):到底要不要写分号呢?
JavaScript语法(一):在script标签写export为什么会抛错?
JavaScript语法(二):你知道哪些JavaScript语句?
JavaScript语法(三):什么是表达式语句?
JavaScript语法(四):新加入的**运算符,哪里有些不一样呢?
HTML语义:div和span不是够用了吗?
HTML语义:如何运用语义类标签来呈现Wiki网页?
CSS语法:除了属性和选择器,你还需要知道这些带@的规则
HTML元信息类标签:你知道head里一共能写哪几种标签吗?
CSS 选择器:如何选中svg里的a元素?
CSS选择器:伪元素是怎么回事儿?
HTML链接:除了a标签,还有哪些标签叫链接?
CSS排版:从毕昇开始,我们就开始用正常流了
HTML替换型元素:为什么link一个CSS要用href,而引入js要用src呢?
HTML小实验:用代码分析HTML标准
CSS Flex排版:为什么垂直居中这么难?
CSS动画与交互:为什么动画要用贝塞尔曲线这么奇怪的东西?
HTML语言:DTD到底是什么?
CSS渲染:CSS是如何绘制颜色的?
CSS小实验:动手做,用代码挖掘CSS属性
HTML·ARIA:可访问性是只给盲人用的特性么?
浏览器:一个浏览器是如何工作的?(阶段一)
浏览器:一个浏览器是如何工作的?(阶段二)
浏览器:一个浏览器是如何工作的(阶段三)
浏览器:一个浏览器是如何工作的?(阶段四)
浏览器:一个浏览器是如何工作的?(阶段五)
浏览器DOM:你知道HTML的节点有哪几种吗?
浏览器CSSOM:如何获取一个元素的准确位置
浏览器事件:为什么会有捕获过程和冒泡过程?
浏览器API(小实验):动手整理全部API
性能:前端的性能到底对业务数据有多大的影响?
工具链:什么样的工具链才能提升团队效率?
持续集成:几十个前端一起工作,如何保证工作质量?
搭建系统:大量的低价值需求应该如何应对?
前端架构:前端架构有哪些核心问题?
当前位置:
首页>>
技术小册>>
深入学习前端重构知识体系
小册名称:深入学习前端重构知识体系
### 章节:HTML替换型元素:为什么`link`一个CSS要用`href`,而引入JavaScript要用`src`呢? 在深入探讨Web开发的过程中,理解HTML、CSS与JavaScript之间的相互作用及其加载机制是至关重要的。本章节将聚焦于一个常见的疑问:为什么在HTML中,我们通过`<link>`标签的`href`属性来引入CSS样式表,而使用`<script>`标签的`src`属性来加载JavaScript脚本?这一差异背后隐藏着HTML的语义化设计、浏览器解析机制以及Web标准的发展轨迹。 #### 一、HTML替换型元素概述 首先,我们需要明确什么是HTML替换型元素。在HTML中,替换型元素(Replaced Elements)指的是那些其内容不由浏览器直接生成的元素,而是由外部资源(如图片、视频、音频、插件等)替换的元素。虽然`<link>`和`<script>`标签本身并不直接展示内容,但它们的行为特性与替换型元素有一定的相似性,因为它们都指向了外部资源。然而,严格来说,`<link>`和`<script>`标签并不直接属于替换型元素的范畴,但它们的行为影响了资源的加载和页面渲染的方式。 #### 二、`<link>`标签与CSS的`href`属性 `<link>`标签是HTML中用于定义文档与外部资源之间关系的元素。当它被用于引入CSS样式表时,其`rel`属性通常被设置为`"stylesheet"`,而`href`属性则指定了样式表文件的URL。 **为什么使用`href`?** 1. **语义清晰**:`href`是Hypertext Reference(超文本引用)的缩写,它自然地与链接到外部资源的行为相关联。在CSS的上下文中,`href`明确指出了样式表文件的位置,符合HTML设计时的语义化原则。 2. **预加载与并行处理**:浏览器在解析HTML文档时,遇到`<link>`标签时,会并行地下载指定的CSS文件,而不会阻塞HTML文档的进一步解析。这种机制有助于提升页面的加载速度和用户体验。 3. **缓存友好**:由于`href`指向的是静态资源(如CSS文件),浏览器能够高效地利用缓存机制来存储和重用这些资源,减少不必要的网络请求。 #### 三、`<script>`标签与JavaScript的`src`属性 `<script>`标签用于在HTML文档中嵌入或引用JavaScript代码。当需要引入外部的JavaScript文件时,使用`src`属性指定文件的URL。 **为什么使用`src`?** 1. **区分内联与外链**:虽然`<script>`标签也支持直接在标签内部编写JavaScript代码(即内联脚本),但`src`属性的存在明确地将外链脚本与内联脚本区分开来。这种区分不仅有助于代码的组织和管理,也使得浏览器能够针对不同类型的脚本采取不同的加载和执行策略。 2. **控制执行时机**:与CSS不同,JavaScript脚本的加载和执行可能会阻塞HTML文档的解析。然而,通过合理设置`<script>`标签的`defer`或`async`属性,可以控制脚本的加载和执行时机,以减轻对页面渲染性能的影响。`src`属性与这些属性的结合使用,为开发者提供了更精细的控制能力。 3. **模块化与重用**:将JavaScript代码封装在外部文件中,并通过`src`属性引入,是实现代码模块化和重用的重要手段。这不仅有助于维护大型项目的可维护性,还促进了代码的复用和共享。 #### 四、两者差异背后的深层次原因 尽管`href`和`src`在功能上有所相似,但它们在HTML中的作用和预期行为上存在根本差异。这种差异主要源于CSS和JavaScript在Web页面中的角色和加载机制的不同。 - **和CSS是表现层**:CSS负责控制网页的布局样式,其加载和执行不会改变页面的DOM结构或执行复杂的逻辑运算。因此,浏览器可以安全地并行加载CSS文件,而不会阻塞页面的渲染。 - **JavaScript是行为层**:JavaScript则负责实现网页的动态效果和交互逻辑,其执行可能会修改DOM结构、发起网络请求或执行复杂的计算。由于这些操作可能影响页面的渲染和性能,浏览器需要更精细地控制JavaScript脚本的加载和执行时机。 #### 五、最佳实践与未来趋势 1. **优化加载顺序**:为了提升页面性能,建议将CSS文件放在`<head>`标签内尽早加载,以确保在DOM元素渲染之前应用样式;而将JavaScript文件放在页面底部或使用`defer`、`async`属性来优化加载和执行时机。 2. **利用现代框架和工具**:随着前端技术的不断发展,出现了许多优秀的框架和工具(如Webpack、ES Modules等),它们提供了更先进的资源管理和模块加载机制,帮助开发者更高效地组织和管理CSS和JavaScript代码。 3. **关注Web标准的发展**:Web标准(如HTML5、CSS3、ES6+)的不断演进为前端开发带来了许多新特性和优化手段。了解并遵循最新的Web标准,有助于开发出更高效、更可维护的Web应用。 综上所述,`<link>`标签的`href`属性与`<script>`标签的`src`属性在HTML中扮演着不同的角色,它们之间的差异源于CSS和JavaScript在Web页面中的不同作用和加载机制。理解这些差异及其背后的原因,对于优化页面性能、提升用户体验以及开发高质量的Web应用具有重要意义。
上一篇:
CSS排版:从毕昇开始,我们就开始用正常流了
下一篇:
HTML小实验:用代码分析HTML标准
该分类下的相关小册推荐:
Javascript编程指南
npm script实战构建前端工作流
JavaScript入门与进阶
KnockoutJS入门指南
编程入门课:Javascript从入门到实战
javascript设计模式原理与实战
Node.js 开发实战
ES6入门指南
Javascript重点难点实例精讲(一)
剑指javascript-ES6
Javascript-ES6与异步编程
WebSocket入门与案例实战