前端算法场景
1. 虚拟 DOM Diff
核心思想:
- 同层比较
- key 优化复用
- 最小化 DOM 操作
本质:树结构 + 双指针 + 贪心策略
2. 防抖与节流
防抖(Debounce)
function debounce(fn, delay) {
let timer;
return function () {
clearTimeout(timer);
timer = setTimeout(fn, delay);
};
}
节流(Throttle)
function throttle(fn, delay) {
let last = 0;
return function () {
const now = Date.now();
if (now - last > delay) {
fn();
last = now;
}
};
}
3. LRU 缓存
核心结构
- Map + 双向链表
思想
- 最近使用 → 移到头部
- 淘汰尾部
前端应用
- 请求缓存
- 图片缓存
- 组件缓存(keep-alive)
4. 大数据处理
问题
- 卡顿(主线程阻塞)
- 内存溢出
解决方案
- 分片处理(chunk)
- Web Worker
- requestIdleCallback
5. 树结构处理
常见场景
- 菜单树
- 权限树
- 组织架构
核心操作
- DFS / BFS
- 扁平化
- 树转数组
function flatten(tree) {
return tree.reduce((res, node) => {
return res.concat(node, flatten(node.children || []));
}, []);
}
总结
前端算法核心能力
- 数据结构选型能力
- 时间复杂度意识
- 空间换时间思维
- 工程场景抽象能力