Files
test-repo/docs/zh-cn/appendix/frontend-evolution.md
T
sanbuphy ebe2bf6109 feat: enhance demo components with consistent styling and info boxes
- Add standardized header and info box components to all demo files
- Improve visual consistency with theme colors and spacing
- Add max-height and overflow-y for better content containment
- Update package.json build script with --force flag
- Add .gitignore entries for REFACTORING files
- Fix table formatting in audio-intro.md
2026-02-14 12:14:07 +08:00

14 KiB

前端开发演进史:从"贴海报"到"搭乐高"

::: tip 🎯 核心问题 为什么网页越来越复杂?前端技术为什么要不断演进? 这个问题会带你理解从简单网页到现代 Web 应用的技术演变之路。 :::


1. 为什么要关注前端演进史?

1.1 从"电子海报"到"桌面应用"

想象一下你在街上看到的海报:

  • 有内容(文字、图片)
  • 有设计(颜色、排版)
  • 但你跟它说话,它不会回应
  • 你点击某个地方,不会发生什么

最早的网页就是这样的"电子海报":只能看、不能改、内容固定。

现代网页完全不同了。它们像桌面应用(VS Code、Figma):

  • 可以编辑文档、画图、玩游戏
  • 实时响应你的每个操作
  • 甚至可以离线工作

这种转变的核心原因: 网页的功能越来越复杂,需要更高效的技术和开发方式。

1.2 一个生活的比喻:盖房子

前端技术的演进,就像盖房子方式的进化:

时代 🏠 盖房比喻 实际特点 优缺点
2000s 贴海报 静态网页,写好 HTML 就行 简单 不能互动
2010s 请工人手动装修 jQuery 时代,手动操作每个元素 能互动 代码乱、难维护
2020s 用乐高搭房子 Vue/React 时代,组件化开发 高效、可维护 学习曲线

::: tip 💡 从表格中你能看到什么?

阶段一 → 阶段二: 从"不能动"到"能动"。这是质的飞跃——网页开始有交互,但代价是代码变得混乱。

阶段二 → 阶段三: 从"能用"到"好用"。组件化让代码像积木一样可复用,大幅提升开发效率。

核心思想: 技术演进不是"为了新而新",而是为了解决上一个阶段的痛点。 :::


2. 第一阶段:静态网页与"切图"(2000s)

2.1 这个时代是什么样的?

开发方式:

  • 写几个 HTML 文件
  • 内嵌一些 CSS 和 JavaScript
  • 直接把文件拖到浏览器就能看效果
  • 上传文件夹到服务器就完成部署

特点:

  • 优点: 简单直接,没有学习成本,写完就能跑
  • 缺点: 无法实现复杂交互,代码一多就乱

::: details 查看当时的项目结构

project/
├── index.html
├── login.html
├── css/
│   ├── bootstrap.css
│   └── custom.css
├── js/
│   ├── jquery.js
│   └── app.js
└── images/

遇到的问题:

  1. 全局变量污染: 所有变量都在全局命名空间,容易互相覆盖
  2. 依赖管理混乱: 必须按正确顺序加载 JS 文件,否则会报错
  3. 代码难以复用: 想复用某个功能,只能复制粘贴 :::

2.2 "切图"是什么?

你可能听说过"切图"这个词。它是早期前端的主要工作:

什么是切图?

设计师用 Photoshop 设计好页面 → 前端把设计切成小图片 → 用 HTML 把图片拼成页面

为什么这么慢?

网页上的每张小图片,浏览器都要发一次网络请求。请求越多,加载越慢。

::: tip 💡 雪碧图(Sprite)

为了减少请求数,出现了"雪碧图"技术:把很多小图合成一张大图。

优点是请求数变少,缺点是制作和维护都很麻烦。

这个阶段的教训:请求太多是性能大敌。 :::


3. 第二阶段:jQuery 时代 - "手动搬砖"(2010s)

3.1 为什么需要 jQuery?

随着网页变复杂,原生 JavaScript 的问题暴露出来:

  • API 繁琐: 简单的操作也要写很多代码
  • 浏览器兼容: 不同浏览器的 API 不一样,要写很多兼容代码
  • 选择器弱: 找元素很麻烦

jQuery 诞生了。它让 JavaScript 变得简单:

// 原生 JavaScript (繁琐)
const element = document.getElementById('title')

// jQuery (简洁)
const element = $('#title')

3.2 jQuery 的思路:亲手改页面

jQuery 的核心思路是命令式: 你告诉浏览器"怎么做"。

// 找到标题元素
$('#title').text('新标题')

// 找到按钮并禁用
$('#submit-btn').attr('disabled', true)

// 找到列表并添加一项
$('ul').append('<li>新项目</li>')

问题: 你需要记住页面上有哪些元素,每次数据变化都要手动更新所有相关元素。

::: warning ⚠️ jQuery 的痛点

想象你在做一个购物车:

// 用户点击"添加到购物车"
function addToCart() {
  cartCount++ // 数据变化

  // 你要手动更新所有相关地方
  $('#cart-count').text(cartCount) // 右上角小红点
  $('#cart-page-count').text(cartCount) // 购物车页面
  $('#checkout-price').text(calculatePrice()) // 结算按钮

  // 如果漏了一个地方,页面就不一致了!
}

这就是"手动搬砖"的代价: 容易出错,难以维护。 :::

3.3 移动端普及:响应式设计的出现

这个阶段还有一个重要变化:手机和平板开始流行

网页必须适配不同屏幕。这需要响应式布局: 同一套 HTML/CSS,自动根据屏幕宽度变换布局。

响应式布局的核心: 媒体查询 (Media Query)

/* 电脑屏幕(大于 640px) */
@media (min-width: 640px) {
  .container {
    display: flex;
  }
}

/* 手机屏幕(小于 640px) */
@media (max-width: 640px) {
  .container {
    display: block;
  }
}

::: tip 💡 响应式就像"智能相框"

想象你在不同房间看同一张照片:

  • 大客厅(电脑屏幕),照片可以摆大一些,旁边还能放其他装饰品
  • 小卧室(手机屏幕),照片需要缩小,其他装饰品要收起来

响应式布局就是"智能相框",它会自动根据房间大小调整展示方式。 :::


4. 第三阶段:从"手动搬砖"到"数据驱动"(Vue/React)

4.1 为什么需要新框架?

jQuery 时代的问题积累到一定程度:

  • 代码一多就乱: 到处都是 DOM 操作,难以维护
  • 容易出 bug: 漏更新一个地方,页面就不一致
  • 协作困难: 多人修改同一个文件,容易冲突

Vue / React 的核心思路:只改数据,页面自动更新

4.2 Vue/React 的思路:声明式 UI

jQuery (命令式):

// 你要告诉浏览器每一步怎么做
$('#title').text('新标题')
$('#title').css('color', 'red')
$('#title').show()

Vue (声明式):

// 你只需告诉浏览器"要显示什么"
data() {
  return {
    title: "新标题",
    color: "red",
    visible: true
  }
}

::: tip 💡 命令式 vs 声明式

就像画一幅画:

  • 命令式: 你告诉画家"拿起笔,蘸红颜料,在坐标(10,10)画一个圈"
  • 声明式: 你直接给画家一张照片,"给我画成这样"

Vue/React 就是"声明式": 你描述"页面长什么样",框架负责"怎么把它画出来"。 :::

4.3 组件化:像搭乐高一样写页面

Vue / React 最强大的特性是组件化: 把页面拆成一个个独立的"积木"。

想象一下你在搭乐高:

  • 你不需要"从头开始雕刻每一块积木"(从头写 HTML/CSS)
  • 你只需要"按说明书把积木拼在一起"(把组件组合起来)
  • 每个积木都是独立的,你可以在不同的套装里重复使用

组件的好处:

  • 复用: 写一个"商品卡片"组件,可以用 100 次
  • 封装: 组件内部的状态不影响别人
  • 维护: 修改一个组件,所有用到它的地方都会更新

4.4 SPA:单页应用的诞生

Vue / React 时代还有一个重要变化:从 MPA 到 SPA

MPA (Multi-Page Application):

  • 点一个链接 → 整页刷新 → 显示新页面
  • 就像翻书: 每翻一页都要把旧书合上、去书架拿新书

SPA (Single-Page Application):

  • 点一个链接 → 只刷新内容区域 → 页面不刷新
  • 就像同一本书里换章节: 只擦掉旧内容、写上新内容

SPA 的优点:

  • 体验丝滑: 页面切换快
  • 状态好管理: 输入的内容、滚动位置都在
  • 首屏可能慢: 需要先下载 JavaScript
  • SEO 要额外处理: 搜索引擎可能抓不到内容(需要 SSR/SSG)

5. 渲染策略:从 CSR 到 SSR/SSG

6. 第四阶段:工程化与构建工具(2015s-2020s)

6.1 为什么需要"工程化"?

前端项目越来越大,不能再靠"手动引入脚本"。

工程化就是用工具和规范,让开发更高效、代码更可靠、协作更顺畅。

::: tip 💡 工程化 = 从"手工作坊"到"现代化工厂"

想象一下你在家做饭 vs 开餐厅:

  • 在家做饭: 想吃什么就做什么,很自由
  • 开餐厅: 需要标准化的菜谱、规范的操作流程、统一的原材料采购

前端开发也一样:

  • 小项目: 怎么写都行
  • 大项目: 需要统一的代码规范、自动化工具、标准化流程 :::

6.2 构建工具:Webpack → Vite

Webpack (传统):

  • 工作方式:先打包,后服务
  • 启动时: 打包所有代码 → 启动服务器
  • 问题:。项目越大,启动越慢(可能要等 30 秒)

Vite (现代):

  • 工作方式:按需编译
  • 启动时: 不打包,直接启动服务器
  • 浏览器请求哪个文件,就实时编译哪个
  • 优势:。通常 1 秒内启动
对比项 Webpack Vite 提升
冷启动 30s+ <1s 快 30 倍
热更新 3-5s <100ms 快 30 倍
配置文件 几百行 几十行 大幅简化

::: tip 💡 为什么 Vite 这么快?

Webpack 就像整备家当搬家:先把所有东西打包,再出门。

Vite 就像轻装旅行:只带必需品,用到什么再买什么。

在开发环境,大多数时候你只需要修改几个文件,Vite 只编译这几个文件,当然快。 :::


7. 总结:演进的本质

前端技术的演进,本质上是在解决两个问题:

7.1 效率:从手动到自动

时代 开发方式 效率
2000s 手写 HTML/CSS/JS
2010s jQuery + 手动 DOM 操作
2020s Vue/React + 数据驱动
现在 组件化 + 工程化 + 自动化

7.2 规模:从个人到团队

时代 项目规模 协作方式
2000s 几个文件 单人就能维护
2010s 几十个文件 小团队,容易冲突
2020s 几百个文件 中团队,需要规范
现在 几千个文件 大团队,需要完整工程体系

8. 学习路线图

8.1 如果你是零基础

第 1 步: HTML/CSS/JavaScript 基础

  • 理解网页的三大基石
  • 能写出简单的静态页面

第 2 步: 学习一个框架(Vue 推荐)

  • 理解"数据驱动"的思想
  • 掌握组件化开发

第 3 步: 实战项目

  • 做一个完整的单页应用
  • 熟悉路由、状态管理、API 调用

8.2 如果你有基础

进阶方向:

  • 工程化: 学习 Vite/Webpack,理解构建流程
  • 性能优化: 学习懒加载、代码分割、缓存策略
  • TypeScript: 为代码加上类型,提升可靠性
  • 服务端渲染: 学习 Nuxt/Next.js,解决 SEO 和首屏问题

9. 名词速查表 (Glossary)

名词 英文 用人话解释
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 把代码分成多个小块,按需加载。

总结

前端技术的演进,本质上是从"手工"到"工业化"的进化:

  • 2000s: 手工时代,简单直接
  • 2010s: 工具化时代,开始有框架
  • 2020s: 工业化时代,组件化 + 工程化
  • 现在: 智能化时代,AI 辅助开发

理解这个演进,你就能:

  • 知道为什么要有 Vue/React
  • 理解"数据驱动"的价值
  • 明白工程化的必要性
  • 快速上手新技术

下一步建议:

  • 如果你想快速上手,学习 Vue 3 (推荐) 或 React
  • 如果你想深入理解,学习 Vite 构建流程
  • 如果你想提升代码质量,学习 TypeScript

祝你学习愉快!