2026-02-15 01:57:52 +08:00
|
|
|
|
# 前端框架对比(React / Vue / Svelte / Angular)
|
2026-02-14 12:14:07 +08:00
|
|
|
|
::: tip 🎯 核心问题
|
|
|
|
|
|
**为什么网页越来越复杂?前端技术为什么要不断演进?** 这个问题会带你理解从简单网页到现代 Web 应用的技术演变之路。
|
|
|
|
|
|
:::
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
---
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
## 1. 为什么要关注前端演进史?
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
### 1.1 从"电子海报"到"桌面应用"
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
想象一下你在街上看到的**海报**:
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- ✅ 有内容(文字、图片)
|
|
|
|
|
|
- ✅ 有设计(颜色、排版)
|
|
|
|
|
|
- ❌ 但你跟它说话,它不会回应
|
|
|
|
|
|
- ❌ 你点击某个地方,不会发生什么
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**最早的网页**就是这样的"电子海报":只能看、不能改、内容固定。
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**现代网页**完全不同了。它们像**桌面应用**(VS Code、Figma):
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- ✅ 可以编辑文档、画图、玩游戏
|
|
|
|
|
|
- ✅ 实时响应你的每个操作
|
|
|
|
|
|
- ✅ 甚至可以离线工作
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**这种转变的核心原因: 网页的功能越来越复杂,需要更高效的技术和开发方式。**
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
### 1.2 一个生活的比喻:盖房子
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
前端技术的演进,就像盖房子方式的进化:
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
| 时代 | 🏠 盖房比喻 | 实际特点 | 优缺点 |
|
|
|
|
|
|
| --------- | ------------------ | ---------------------------- | --------------------------- |
|
|
|
|
|
|
| **2000s** | **贴海报** | 静态网页,写好 HTML 就行 | ✅ 简单 ❌ 不能互动 |
|
|
|
|
|
|
| **2010s** | **请工人手动装修** | jQuery 时代,手动操作每个元素 | ✅ 能互动 ❌ 代码乱、难维护 |
|
|
|
|
|
|
| **2020s** | **用乐高搭房子** | Vue/React 时代,组件化开发 | ✅ 高效、可维护 ❌ 学习曲线 |
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
::: tip 💡 从表格中你能看到什么?
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**阶段一 → 阶段二**: 从"不能动"到"能动"。这是质的飞跃——网页开始有交互,但代价是代码变得混乱。
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**阶段二 → 阶段三**: 从"能用"到"好用"。组件化让代码像积木一样可复用,大幅提升开发效率。
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**核心思想**: 技术演进不是"为了新而新",而是为了解决上一个阶段的痛点。
|
|
|
|
|
|
:::
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
---
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
## 2. 第一阶段:静态网页与"切图"(2000s)
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
<FrontendEvolutionDemo />
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
### 2.1 这个时代是什么样的?
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**开发方式**:
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- 写几个 HTML 文件
|
|
|
|
|
|
- 内嵌一些 CSS 和 JavaScript
|
|
|
|
|
|
- 直接把文件拖到浏览器就能看效果
|
|
|
|
|
|
- 上传文件夹到服务器就完成部署
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**特点**:
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- ✅ **优点**: 简单直接,没有学习成本,写完就能跑
|
|
|
|
|
|
- ❌ **缺点**: 无法实现复杂交互,代码一多就乱
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
::: details 查看当时的项目结构
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
```
|
|
|
|
|
|
project/
|
|
|
|
|
|
├── index.html
|
|
|
|
|
|
├── login.html
|
|
|
|
|
|
├── css/
|
|
|
|
|
|
│ ├── bootstrap.css
|
|
|
|
|
|
│ └── custom.css
|
|
|
|
|
|
├── js/
|
|
|
|
|
|
│ ├── jquery.js
|
|
|
|
|
|
│ └── app.js
|
|
|
|
|
|
└── images/
|
|
|
|
|
|
```
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**遇到的问题**:
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
1. **全局变量污染**: 所有变量都在全局命名空间,容易互相覆盖
|
|
|
|
|
|
2. **依赖管理混乱**: 必须按正确顺序加载 JS 文件,否则会报错
|
|
|
|
|
|
3. **代码难以复用**: 想复用某个功能,只能复制粘贴
|
|
|
|
|
|
:::
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
### 2.2 "切图"是什么?
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
<SliceRequestDemo />
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
你可能听说过"切图"这个词。它是早期前端的主要工作:
|
|
|
|
|
|
|
|
|
|
|
|
**什么是切图?**
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
设计师用 Photoshop 设计好页面 → 前端把设计切成小图片 → 用 HTML 把图片拼成页面
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**为什么这么慢?**
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
网页上的每张小图片,浏览器都要发一次**网络请求**。请求越多,加载越慢。
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
::: tip 💡 雪碧图(Sprite)
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
为了减少请求数,出现了"雪碧图"技术:把很多小图合成一张大图。
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
优点是请求数变少,缺点是制作和维护都很麻烦。
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
这个阶段的教训:**请求太多是性能大敌**。
|
|
|
|
|
|
:::
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
## 3. 第二阶段:jQuery 时代 - "手动搬砖"(2010s)
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
### 3.1 为什么需要 jQuery?
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
随着网页变复杂,原生 JavaScript 的问题暴露出来:
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- ❌ **API 繁琐**: 简单的操作也要写很多代码
|
|
|
|
|
|
- ❌ **浏览器兼容**: 不同浏览器的 API 不一样,要写很多兼容代码
|
|
|
|
|
|
- ❌ **选择器弱**: 找元素很麻烦
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**jQuery** 诞生了。它让 JavaScript 变得简单:
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
```javascript
|
|
|
|
|
|
// 原生 JavaScript (繁琐)
|
|
|
|
|
|
const element = document.getElementById('title')
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
// jQuery (简洁)
|
|
|
|
|
|
const element = $('#title')
|
|
|
|
|
|
```
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
### 3.2 jQuery 的思路:亲手改页面
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
<JQueryVsStateDemo />
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
jQuery 的核心思路是**命令式**: 你告诉浏览器"怎么做"。
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
```javascript
|
|
|
|
|
|
// 找到标题元素
|
|
|
|
|
|
$('#title').text('新标题')
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
// 找到按钮并禁用
|
|
|
|
|
|
$('#submit-btn').attr('disabled', true)
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
// 找到列表并添加一项
|
|
|
|
|
|
$('ul').append('<li>新项目</li>')
|
|
|
|
|
|
```
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**问题**: 你需要记住页面上有哪些元素,每次数据变化都要手动更新所有相关元素。
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
::: warning ⚠️ jQuery 的痛点
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
想象你在做一个购物车:
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
```javascript
|
|
|
|
|
|
// 用户点击"添加到购物车"
|
|
|
|
|
|
function addToCart() {
|
|
|
|
|
|
cartCount++ // 数据变化
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
// 你要手动更新所有相关地方
|
|
|
|
|
|
$('#cart-count').text(cartCount) // 右上角小红点
|
|
|
|
|
|
$('#cart-page-count').text(cartCount) // 购物车页面
|
|
|
|
|
|
$('#checkout-price').text(calculatePrice()) // 结算按钮
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
// 如果漏了一个地方,页面就不一致了!
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**这就是"手动搬砖"的代价**: 容易出错,难以维护。
|
|
|
|
|
|
:::
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
### 3.3 移动端普及:响应式设计的出现
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
这个阶段还有一个重要变化:**手机和平板开始流行**。
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
<ResponsiveGridDemo />
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
网页必须适配不同屏幕。这需要**响应式布局**: 同一套 HTML/CSS,自动根据屏幕宽度变换布局。
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**响应式布局的核心: 媒体查询 (Media Query)**
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
```css
|
|
|
|
|
|
/* 电脑屏幕(大于 640px) */
|
|
|
|
|
|
@media (min-width: 640px) {
|
|
|
|
|
|
.container {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
/* 手机屏幕(小于 640px) */
|
|
|
|
|
|
@media (max-width: 640px) {
|
|
|
|
|
|
.container {
|
|
|
|
|
|
display: block;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
::: tip 💡 响应式就像"智能相框"
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
想象你在不同房间看同一张照片:
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- 在**大客厅**(电脑屏幕),照片可以摆大一些,旁边还能放其他装饰品
|
|
|
|
|
|
- 在**小卧室**(手机屏幕),照片需要缩小,其他装饰品要收起来
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**响应式布局**就是"智能相框",它会自动根据房间大小调整展示方式。
|
|
|
|
|
|
:::
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
---
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
## 4. 第三阶段:从"手动搬砖"到"数据驱动"(Vue/React)
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
### 4.1 为什么需要新框架?
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
jQuery 时代的问题积累到一定程度:
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- **代码一多就乱**: 到处都是 DOM 操作,难以维护
|
|
|
|
|
|
- **容易出 bug**: 漏更新一个地方,页面就不一致
|
|
|
|
|
|
- **协作困难**: 多人修改同一个文件,容易冲突
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**Vue / React** 的核心思路:**只改数据,页面自动更新**。
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
### 4.2 Vue/React 的思路:声明式 UI
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
<ImperativeVsDeclarativeDemo />
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**jQuery (命令式)**:
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
```javascript
|
|
|
|
|
|
// 你要告诉浏览器每一步怎么做
|
|
|
|
|
|
$('#title').text('新标题')
|
|
|
|
|
|
$('#title').css('color', 'red')
|
|
|
|
|
|
$('#title').show()
|
|
|
|
|
|
```
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**Vue (声明式)**:
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
```javascript
|
|
|
|
|
|
// 你只需告诉浏览器"要显示什么"
|
|
|
|
|
|
data() {
|
|
|
|
|
|
return {
|
|
|
|
|
|
title: "新标题",
|
|
|
|
|
|
color: "red",
|
|
|
|
|
|
visible: true
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
::: tip 💡 命令式 vs 声明式
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
就像画一幅画:
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- **命令式**: 你告诉画家"拿起笔,蘸红颜料,在坐标(10,10)画一个圈"
|
|
|
|
|
|
- **声明式**: 你直接给画家一张照片,"给我画成这样"
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
Vue/React 就是"声明式": 你描述"页面长什么样",框架负责"怎么把它画出来"。
|
|
|
|
|
|
:::
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
### 4.3 组件化:像搭乐高一样写页面
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**Vue / React** 最强大的特性是**组件化**: 把页面拆成一个个独立的"积木"。
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
想象一下你在搭乐高:
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- 你不需要"从头开始雕刻每一块积木"(从头写 HTML/CSS)
|
|
|
|
|
|
- 你只需要"按说明书把积木拼在一起"(把组件组合起来)
|
|
|
|
|
|
- 每个积木都是**独立的**,你可以在不同的套装里**重复使用**
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**组件的好处**:
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- **复用**: 写一个"商品卡片"组件,可以用 100 次
|
|
|
|
|
|
- **封装**: 组件内部的状态不影响别人
|
|
|
|
|
|
- **维护**: 修改一个组件,所有用到它的地方都会更新
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
### 4.4 SPA:单页应用的诞生
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
<RoutingModeDemo />
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**Vue / React** 时代还有一个重要变化:**从 MPA 到 SPA**。
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**MPA (Multi-Page Application)**:
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- 点一个链接 → 整页刷新 → 显示新页面
|
|
|
|
|
|
- 就像**翻书**: 每翻一页都要把旧书合上、去书架拿新书
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**SPA (Single-Page Application)**:
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- 点一个链接 → 只刷新内容区域 → 页面不刷新
|
|
|
|
|
|
- 就像**同一本书里换章节**: 只擦掉旧内容、写上新内容
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**SPA 的优点**:
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- ✅ **体验丝滑**: 页面切换快
|
|
|
|
|
|
- ✅ **状态好管理**: 输入的内容、滚动位置都在
|
|
|
|
|
|
- ❌ **首屏可能慢**: 需要先下载 JavaScript
|
|
|
|
|
|
- ❌ **SEO 要额外处理**: 搜索引擎可能抓不到内容(需要 SSR/SSG)
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
---
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
## 5. 渲染策略:从 CSR 到 SSR/SSG
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
<RenderingStrategyDemo />
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
## 6. 第四阶段:工程化与构建工具(2015s-2020s)
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
### 6.1 为什么需要"工程化"?
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
前端项目越来越大,不能再靠"手动引入脚本"。
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**工程化**就是用工具和规范,让开发更高效、代码更可靠、协作更顺畅。
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
::: tip 💡 工程化 = 从"手工作坊"到"现代化工厂"
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
想象一下你在家做饭 vs 开餐厅:
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- **在家做饭**: 想吃什么就做什么,很自由
|
|
|
|
|
|
- **开餐厅**: 需要标准化的菜谱、规范的操作流程、统一的原材料采购
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
前端开发也一样:
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- **小项目**: 怎么写都行
|
|
|
|
|
|
- **大项目**: 需要统一的代码规范、自动化工具、标准化流程
|
|
|
|
|
|
:::
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
### 6.2 构建工具:Webpack → Vite
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**Webpack** (传统):
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- 工作方式:**先打包,后服务**
|
|
|
|
|
|
- 启动时: 打包所有代码 → 启动服务器
|
|
|
|
|
|
- 问题:**慢**。项目越大,启动越慢(可能要等 30 秒)
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**Vite** (现代):
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- 工作方式:**按需编译**
|
|
|
|
|
|
- 启动时: 不打包,直接启动服务器
|
|
|
|
|
|
- 浏览器请求哪个文件,就实时编译哪个
|
|
|
|
|
|
- 优势:**快**。通常 1 秒内启动
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
| 对比项 | Webpack | Vite | 提升 |
|
|
|
|
|
|
| -------- | ------- | ------ | ------------ |
|
|
|
|
|
|
| 冷启动 | 30s+ | <1s | **快 30 倍** |
|
|
|
|
|
|
| 热更新 | 3-5s | <100ms | **快 30 倍** |
|
|
|
|
|
|
| 配置文件 | 几百行 | 几十行 | **大幅简化** |
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
::: tip 💡 为什么 Vite 这么快?
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**Webpack** 就像**整备家当搬家**:先把所有东西打包,再出门。
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**Vite** 就像**轻装旅行**:只带必需品,用到什么再买什么。
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
在开发环境,大多数时候你只需要修改几个文件,Vite 只编译这几个文件,当然快。
|
|
|
|
|
|
:::
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
---
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
## 7. 总结:演进的本质
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
前端技术的演进,本质上是在解决两个问题:
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
### 7.1 效率:从手动到自动
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
| 时代 | 开发方式 | 效率 |
|
|
|
|
|
|
| --------- | ------------------------ | ---------- |
|
|
|
|
|
|
| **2000s** | 手写 HTML/CSS/JS | ⭐ |
|
|
|
|
|
|
| **2010s** | jQuery + 手动 DOM 操作 | ⭐⭐ |
|
|
|
|
|
|
| **2020s** | Vue/React + 数据驱动 | ⭐⭐⭐ |
|
|
|
|
|
|
| **现在** | 组件化 + 工程化 + 自动化 | ⭐⭐⭐⭐⭐ |
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
### 7.2 规模:从个人到团队
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
| 时代 | 项目规模 | 协作方式 |
|
|
|
|
|
|
| --------- | ---------- | ----------------------- |
|
|
|
|
|
|
| **2000s** | 几个文件 | 单人就能维护 |
|
|
|
|
|
|
| **2010s** | 几十个文件 | 小团队,容易冲突 |
|
|
|
|
|
|
| **2020s** | 几百个文件 | 中团队,需要规范 |
|
|
|
|
|
|
| **现在** | 几千个文件 | 大团队,需要完整工程体系 |
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
## 8. 学习路线图
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
### 8.1 如果你是零基础
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**第 1 步: HTML/CSS/JavaScript 基础**
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- 理解网页的三大基石
|
|
|
|
|
|
- 能写出简单的静态页面
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**第 2 步: 学习一个框架(Vue 推荐)**
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- 理解"数据驱动"的思想
|
|
|
|
|
|
- 掌握组件化开发
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**第 3 步: 实战项目**
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- 做一个完整的单页应用
|
|
|
|
|
|
- 熟悉路由、状态管理、API 调用
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
### 8.2 如果你有基础
|
|
|
|
|
|
|
|
|
|
|
|
**进阶方向**:
|
|
|
|
|
|
|
|
|
|
|
|
- **工程化**: 学习 Vite/Webpack,理解构建流程
|
|
|
|
|
|
- **性能优化**: 学习懒加载、代码分割、缓存策略
|
|
|
|
|
|
- **TypeScript**: 为代码加上类型,提升可靠性
|
|
|
|
|
|
- **服务端渲染**: 学习 Nuxt/Next.js,解决 SEO 和首屏问题
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
## 9. 名词速查表 (Glossary)
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
| 名词 | 英文 | 用人话解释 |
|
|
|
|
|
|
| ---------------- | ----------------------- | --------------------------------------------- |
|
|
|
|
|
|
| **DOM** | Document Object Model | 文档对象模型。用对象树表示页面,可被 JS 读写。 |
|
|
|
|
|
|
| **jQuery** | - | 早期流行的 JS 库,简化了 DOM 操作。 |
|
|
|
|
|
|
| **Vue/React** | - | 现代前端框架,采用数据驱动和组件化开发。 |
|
|
|
|
|
|
| **组件** | Component | 可复用的 UI 单元,如按钮、卡片、导航栏。 |
|
|
|
|
|
|
| **MPA** | Multi-Page Application | 多页应用。每次跳转都重新加载整个页面。 |
|
|
|
|
|
|
| **SPA** | Single-Page Application | 单页应用。只加载一次,后续切换不刷新页面。 |
|
|
|
|
|
|
| **路由** | Routing | 管理页面之间切换的规则和过程。 |
|
|
|
|
|
|
| **SSR** | Server-Side Rendering | 服务端渲染。服务器生成 HTML 后发给浏览器。 |
|
|
|
|
|
|
| **SSG** | Static Site Generation | 静态站点生成。构建时预渲染页面为静态 HTML。 |
|
|
|
|
|
|
| **Webpack** | - | 传统打包工具,先打包后服务。 |
|
|
|
|
|
|
| **Vite** | - | 现代构建工具,按需编译,速度极快。 |
|
|
|
|
|
|
| **响应式** | Responsive Design | 页面自动适配不同屏幕尺寸的设计。 |
|
|
|
|
|
|
| **媒体查询** | Media Query | CSS 的条件判断,根据屏幕宽度应用不同样式。 |
|
|
|
|
|
|
| **命令式** | Imperative | 告诉程序"怎么做"。 |
|
|
|
|
|
|
| **声明式** | Declarative | 告诉程序"要什么"。 |
|
|
|
|
|
|
| **数据驱动** | Data-Driven | 只修改数据,界面自动更新。 |
|
|
|
|
|
|
| **Tree Shaking** | - | 摇树优化。自动移除未使用的代码,减小包体积。 |
|
|
|
|
|
|
| **代码分割** | Code Splitting | 把代码分成多个小块,按需加载。 |
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
---
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
## 总结
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
前端技术的演进,本质上是**从"手工"到"工业化"的进化**:
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- **2000s**: 手工时代,简单直接
|
|
|
|
|
|
- **2010s**: 工具化时代,开始有框架
|
|
|
|
|
|
- **2020s**: 工业化时代,组件化 + 工程化
|
|
|
|
|
|
- **现在**: 智能化时代,AI 辅助开发
|
2026-01-18 12:21:49 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
理解这个演进,你就能:
|
2026-01-18 10:24:35 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- 知道为什么要有 Vue/React
|
|
|
|
|
|
- 理解"数据驱动"的价值
|
|
|
|
|
|
- 明白工程化的必要性
|
|
|
|
|
|
- 快速上手新技术
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
**下一步建议**:
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
- 如果你想快速上手,学习 **Vue 3** (推荐) 或 **React**
|
|
|
|
|
|
- 如果你想深入理解,学习 **Vite** 构建流程
|
|
|
|
|
|
- 如果你想提升代码质量,学习 **TypeScript**
|
2026-02-05 01:33:28 +08:00
|
|
|
|
|
2026-02-14 12:14:07 +08:00
|
|
|
|
祝你学习愉快!
|