JS 性能优化

当需要的时候在做优化、考虑可维护性。

一、性能优化

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-ControlETag)。

五、架构与设计优化

1. 模块化与解耦

  • 遵循 SOLID 原则。
  • 使用依赖注入(DI)降低耦合。
  • 提前定义 domain 层、service 层与 UI 层的职责。

2. 状态管理优化

  • 对全局状态使用如 Zustand、Recoil、Redux Toolkit 等高性能状态库。
  • 避免全量渲染:React 中使用 memouseCallback

3. SSR / SSG 优化

  • 对 SEO 和首屏性能关键的项目采用 SSR(Next.js / Nuxt)。
  • 使用 getStaticPropsISR(增量静态生成)优化首屏。

六、调试与监控优化

  • 使用 source map 辅助调试(生产环境可上传至 Sentry)。
  • 集成性能监控工具(如 Lighthouse、Web Vitals、Sentry、Datadog)。
  • Node.js 端可用 clinic.js0x 分析性能瓶颈。

七、JS 动画优化

  • 避免大量 js 动画
  • 尽量使用 css 动画
  • 尽量使用 canvas 动画
  • 合理使用 requestAnimationFrame 动画代替 setTimeout、setInterval
    • requestAnimationFrame 确保在正确的时候进行渲染

项目开发中最常见如下

  • 防抖、节流
  • 缓存
  • 异步优化
  • 按需加载
  • 移除冗余依赖、代码分割
  • 减少内存泄漏、优化循环

不是自己开发的内容能跑不建议动,对于自己零好处,容易背锅。非改不可自求多福!

相关推荐
peachSoda75 小时前
自定义配置小程序tabbar逻辑思路
javascript·vue.js·微信小程序·小程序
hbqjzx5 小时前
记录一个自动学习的脚本开发过程
开发语言·javascript·学习
我有一棵树5 小时前
使用Flex布局实现多行多列,每个列宽度相同
前端·css·html·scss·flex
浪裡遊5 小时前
React开发模式解析:JSX语法与生命周期管理
前端·javascript·react.js·前端框架·ecmascript
fruge5 小时前
Vue 3 完全指南:响应式原理、组合式 API 与实战优化
javascript·vue.js·ecmascript
用户877244753965 小时前
Lubanno7UniverSheet:开放底层能力,让你的表格需求 “不设限”
前端
张可爱5 小时前
ES6奶茶铺版通俗笔记 🍵✨
前端
用户877244753965 小时前
Lubanno7UniverSheet:选择命令式,为了真正的跨框架通用
前端
Aoda5 小时前
从痛点到落地:PawHaven 的 Monorepo 架构设计
前端·javascript