当需要的时候在做优化、考虑可维护性。
一、性能优化
1. 减少不必要的计算
- 使用缓存(memoization):对计算结果进行缓存,如 Vue 中的计算属性。
- 防抖与节流(debounce/throttle):减少高频事件(如 scroll、resize、input)的执行频率。
- 延迟加载 (lazy loading):按需加载组件、模块或资源。
2. 数据结构与算法
- 合理使用 Map / Set 替代普通对象和数组查找。
- 尽量避免 O(n²) 操作(例如循环嵌套)。
- 对列表操作使用不可变更新的同时,注意避免不必要的深拷贝。
例如:大量的数据需要匹配到对于的值,可以考虑将数组格式改成 Map 或 对象 的形式,避免循环查找
3. 异步与并发优化
- 使用
Promise.allSettled()
/Promise.all()
同步多个异步任务。 - 对 I/O 密集型任务使用 Worker Threads / Web Workers 分离线程。
例如:大文件切片上传使用 Web Workers 计算 hash
二、构建优化
1. Tree Shaking
- 确保代码是 ESM 模块格式(import/export),让构建工具(Vite、Webpack、Rollup)能自动移除未使用的代码。
2. 代码分割 (Code Splitting)
- 将大包拆成多个按需加载的 chunk。
- React 中可用
React.lazy()
和Suspense
。
3. 压缩与混淆
- 使用 Terser / esbuild / SWC 压缩。
- CSS 使用 PostCSS、cssnano 压缩。
4. 构建工具优化
- 使用 esbuild / SWC / Vite 替代传统 Babel+Webpack,构建速度可提升 5~10 倍。
- 缓存编译结果(Webpack 5 的 persistent cache、Vite 的 cache)。
三、代码质量与类型优化
1. TypeScript 优化
- 启用严格模式(
"strict": true
)。 - 启用
"noUnusedLocals"
,"noUnusedParameters"
,"noImplicitAny"
,"strictNullChecks"
。 - 在类型复杂时,使用 类型推导、泛型约束,减少 any 滥用。
2. Lint & 格式化
- ESLint + Prettier 保持一致的编码规范。
- 使用
eslint-plugin-import
优化 import 顺序与依赖。
3. 重构与模块化
- 拆分大型模块,保持每个文件单一职责。
- 使用 barrel 文件(
index.ts
)统一导出模块。
四、运行时与内存优化
1. 减少对象频繁创建与销毁
- 使用对象池、重用临时变量。
- 避免频繁拼接字符串,使用模板字符串或数组 join。
2. 内存管理
- 及时释放不再使用的引用(如 DOM 节点、缓存)。
- Node.js 环境下,监控内存泄漏(如用
clinic.js
,node --inspect
)。
3. 网络优化
- 启用 HTTP/2 或 HTTP/3。
- 使用 gzip / brotli 压缩。
- 利用 CDN 与缓存头(
Cache-Control
、ETag
)。
五、架构与设计优化
1. 模块化与解耦
- 遵循 SOLID 原则。
- 使用依赖注入(DI)降低耦合。
- 提前定义 domain 层、service 层与 UI 层的职责。
2. 状态管理优化
- 对全局状态使用如 Zustand、Recoil、Redux Toolkit 等高性能状态库。
- 避免全量渲染:React 中使用
memo
、useCallback
。
3. SSR / SSG 优化
- 对 SEO 和首屏性能关键的项目采用 SSR(Next.js / Nuxt)。
- 使用
getStaticProps
、ISR
(增量静态生成)优化首屏。
六、调试与监控优化
- 使用 source map 辅助调试(生产环境可上传至 Sentry)。
- 集成性能监控工具(如 Lighthouse、Web Vitals、Sentry、Datadog)。
- Node.js 端可用
clinic.js
或0x
分析性能瓶颈。
七、JS 动画优化
- 避免大量 js 动画
- 尽量使用 css 动画
- 尽量使用 canvas 动画
- 合理使用 requestAnimationFrame 动画代替 setTimeout、setInterval
- requestAnimationFrame 确保在正确的时候进行渲染
项目开发中最常见如下
- 防抖、节流
- 缓存
- 异步优化
- 按需加载
- 移除冗余依赖、代码分割
- 减少内存泄漏、优化循环
不是自己开发的内容能跑不建议动,对于自己零好处,容易背锅。非改不可自求多福!