13 — 前端工程化

核心规律:组件化复用,构建优化加载 一句话:前端工程化是让复杂变简单的系统方法


一、核心规律

1.1 前端工程化全景

flowchart LR
    subgraph 开发["💻 开发阶段"]
        D1["代码编写"]
        D2["组件开发"]
        D3["状态管理"]
    end
    
    subgraph 构建["🔨 构建阶段"]
        B1["打包压缩"]
        B2["Tree Shaking"]
        B3["代码分割"]
    end
    
    subgraph 优化["⚡ 优化阶段"]
        O1["懒加载"]
        O2["CDN加速"]
        O3["缓存策略"]
    end
    
    subgraph 部署["🚀 部署阶段"]
        DE1["静态托管"]
        DE2["SSR/SSG"]
    end
    
    D1 & D2 & D3 --> B1 & B2 & B3
    B1 & B2 & B3 --> O1 & O2 & O3
    O1 & O2 & O3 --> DE1 & DE2
    
    style D1 fill:#e3f2fd
    style B1 fill:#fff3e0
    style O1 fill:#e8f5e9
    style DE1 fill:#f3e5f5

1.2 关键指标

指标含义健康值
FCP首次内容绘制< 1.8s
LCP最大内容绘制< 2.5s
FID首次输入延迟< 100ms
CLS累积布局偏移< 0.1
TTI可交互时间< 3.8s

二、JavaScript核心

2.1 执行机制

flowchart LR
    subgraph 调用栈["📚 调用栈 Call Stack"]
        S1["同步代码顺序执行"]
    end
    
    subgraph 任务队列["📋 任务队列"]
        T1["宏任务:setTimeout/setInterval"]
        T2["微任务:Promise.then/MutationObserver"]
    end
    
    S1 -->|"遇到异步"| T1 & T2
    T2 -->|"优先"| S1
    T1 -->|"下一轮"| S1
    
    style S1 fill:#e3f2fd
    style T2 fill:#e8f5e9
    style T1 fill:#fff3e0

2.2 闭包与原型链

// 闭包:函数记住并访问其作用域
function createCounter() {
    let count = 0;
    return {
        increment: () => ++count,
        getCount: () => count,
    };
}
 
// 原型链:对象继承
class Animal {
    speak() { return '...'; }
}
class Dog extends Animal {
    speak() { return '汪!'; }
}

三、CSS核心

3.1 盒模型

标准盒模型(W3C):width = content
IE盒模型(怪异):width = content + padding + border

box-sizing: content-box  ← 标准
box-sizing: border-box   ← 推荐(元素总宽不变)

3.2 布局方案

方案适用场景特点
Flexbox一维布局(行/列)弹性、对齐方便
Grid二维布局(行+列)复杂网格布局
Float旧项目兼容浮动清除麻烦
Position定位元素absolute/fixed/sticky

四、Vue.js核心

4.1 响应式原理

flowchart LR
    A["data 数据"] --> B["Proxy(Vue3)<br/>Object.defineProperty(Vue2)"]
    B --> C["Dep 依赖收集"]
    C --> D["Watcher 观察者"]
    D --> E["render 重新渲染"]
    
    style B fill:#fff3e0
    style E fill:#e8f5e9

4.2 生命周期

flowchart LR
    M1["beforeCreate"] --> M2["created<br/>↑ 可访问data/methods"]
    M2 --> M3["beforeMount"] --> M4["mounted<br/>↑ DOM已挂载"]
    M4 --> M5["beforeUpdate"] --> M6["updated"]
    M6 --> M7["beforeUnmount"] --> M8["unmounted<br/>↑ 组件销毁"]
    
    style M2 fill:#e3f2fd
    style M4 fill:#e8f5e9
    style M8 fill:#ffebee

五、前端性能优化

5.1 加载优化

□ 代码分割(Route-level lazy loading)
□ Tree Shaking(移除未使用代码)
□ 图片优化(WebP + 懒加载 + 响应式)
□ CDN加速静态资源
□ HTTP/2多路复用

5.2 渲染优化

□ 减少Reflow/Repaint(批量DOM操作)
□ 虚拟列表(长列表只渲染可见区域)
□ Web Worker(耗时计算移出主线程)
□ requestAnimationFrame(动画帧同步)

六、前后端协作

6.1 API设计规范

RESTful设计原则:
├── 资源用名词,动作用HTTP方法
├── URL不含动词:GET /users/123
├── 版本控制:/api/v1/users
├── 统一响应格式:{ code, message, data }
└── 分页统一:?page=1&per_page=20

6.2 跨域解决方案

方案实现适用场景
CORS后端设置响应头生产环境
反向代理Nginx proxy_pass开发环境
JSONP仅GET请求旧浏览器兼容

七、本章总结

核心规律:前端工程化的本质是将复杂性问题转化为可管理的模块。组件化解决复用,构建解决性能,工程化解决协作。

关键记忆点

  • ✅ JavaScript异步机制:调用栈→微任务→宏任务
  • ✅ Vue3响应式基于Proxy,Vue2基于Object.defineProperty
  • ✅ 性能优化:代码分割 + 懒加载 + CDN + 缓存
  • ✅ 前后端协作:API契约先行,Mock数据并行开发

延伸阅读