当前位置: 首页 > news >正文

通用构建优化(编译阶段)+ Vue 专属运行时优化 + React 专属运行时优化


一、编译 / 构建阶段(两者通用,必说)

不管 Vue 还是 React,构建优化思路完全一样:减小体积、拆分代码、加速打包

  1. 代码压缩混淆

    • JS 压缩:terser 去掉注释、console、变量混淆
    • CSS 压缩:cssnano 合并、去重
    • HTML、图片压缩,WebP/AVIF 替换
  2. 路由/组件懒加载

    • Vue:() => import('@/views/xxx')
    • React:React.lazy(() => import('./xxx'))+Suspense
  3. Tree Shaking 剔除无用代码

    • 用 ESM,避免import *
    • 配置sideEffects不误删样式
    • 第三方库按需引入(lodash-es、antd 按需)
  4. 拆包优化

    • 拆分 vendor、业务代码、第三方依赖
    • 避免单个 chunk 过大导致加载慢
  5. 开启持久化缓存

    • webpack cache / vite cache 让二次打包更快
  6. 开启 Gzip/Brotli

    • 构建生成.gz,Nginx 配置启用
  7. 小图使用 SVG / Iconify,减少网络请求


二、Vue 项目运行时性能优化(专属,面试官爱听)

核心:减少不必要渲染、降低响应式开销、优化虚拟 DOM

  1. 合理使用 v-if / v-show

    • 频繁切换用 v-show
    • 只渲染一次用 v-if
  2. 避免 v-for 与 v-if 同节点使用

    • 先过滤再渲染,减少无用遍历
  3. key 必须使用唯一值,不要用 index

    • 保证 Diff 算法高效
  4. 使用 computed 缓存计算结果

    • 避免模板中重复计算
  5. 大数据列表使用vue-virtual-scroller虚拟列表

    • 只渲染可视区域,DOM 数量骤减
  6. 组件销毁时清除副作用

    • 清除定时器、事件监听、防抖节流
    • 避免内存泄漏
  7. 使用v-memo缓存子树(Vue3)

    • 依赖不变时直接跳过渲染
  8. 大数据量使用shallowRef / shallowReactive

    • 关闭深层响应式,大幅提升性能
  9. keep-alive 合理缓存页面

    • 配合 include/exclude 避免缓存过多组件
  10. 图片懒加载、懒渲染组件

    • 使用IntersectionObserver实现

三、React 项目运行时性能优化(专属,必考)

核心:阻止不必要重渲染、减少组件 diff、缓存值与函数

  1. 使用 React.memo 缓存组件

    • 防止父组件渲染导致子组件无脑重渲染
  2. 使用 useMemo 缓存计算值

    • 避免每次渲染都重新计算
  3. 使用 useCallback 缓存函数引用

    • 传给 memo 子组件时不触发重渲染
  4. key 同样不要用 index

    • 保证列表 Diff 稳定高效
  5. 虚拟列表 react-window / react-virtualized

    • 长列表必备
  6. 合理使用 useMemo 替代 JSX 内联对象/样式

    • 避免每次渲染生成新对象导致子组件重渲染
  7. 使用 Suspense + lazy 做组件懒加载

  8. 避免在 render 中创建新函数、新对象

    • 会导致引用变化,触发重复渲染
  9. 状态下放 / 组件拆分

    • 把变化频繁的状态拆成小组件,避免大面积渲染
  10. 使用 useTransition / useDeferredValue(React18)

    • 降低非紧急更新优先级,避免阻塞渲染

四、面试最漂亮的总结句(直接背)

  • 构建阶段:压缩、拆包、tree shaking、懒加载、减小体积,让包更小加载更快。
  • Vue 运行时:利用响应式优势,减少不必要渲染,用 computed、v-memo、虚拟列表优化。
  • React 运行时:用 memo/useMemo/useCallback 阻止重复渲染,拆分组件,优化 Diff 过程。
http://www.jsqmd.com/news/614439/

相关文章:

  • All in AI:企业必须关注的7个网络安全技术发展趋势
  • 专注知识产权维权哪家专业 - 品牌企业推荐师(官方)
  • 8大网盘直链解析终极指南:免费解锁5倍下载速度的完整解决方案
  • MindSpore 环境配置完全指南嗽
  • 树莓派4B学习笔记——IO通信篇(1-Wire)
  • 语义分块提升RAG检索精度
  • gopher-os社区贡献指南:从代码提交到功能开发的完整参与流程
  • Redis持久化:从AOF到RDB,如何实现数据不丢失?澈
  • 在嘉兴有靠谱的工业纸筒加工厂吗? - 品牌企业推荐师(官方)
  • 阿里云盘Refresh Token获取工具使用指南:轻松实现云盘授权与自动化管理
  • 011 Linux环境熟悉——IMX6ULL嵌入式开发环境配置
  • 中设智控亮相第二十四届国际TnPM设备运维大会 | AI赋能设备管理一体化解决方案重磅发布 重构设备资产精益管控新生态
  • Golang bytes.Buffer怎么用_Golang Buffer教程【对比】
  • 实测好用!Qwen3-Embedding-4B一键部署教程,轻松搞定长文档向量化
  • 树莓派4B学习笔记——IO通信篇(UART)
  • FastAPI单元测试实战:别等上线被喷才后悔,TestClient用对了真香!找
  • 终极指南:如何免费解锁Cursor Pro高级功能完整教程
  • TF-IDF BM25 原理及应用
  • PDE (Processing D Editor) 三维场景编辑器 · 软件白皮书 · 基于 v..爸
  • Vue-Multiselect 安全防护终极指南:彻底防范 XSS 攻击与数据注入威胁
  • 断崖式下跌!最强AI也搞不定长期开发:代码堆得越多系统崩得越快
  • React Express JSX语法详解:如何编写高效的React组件
  • 集成AI 的 Redis 客户端 Rudist发布新版了诒
  • SEATA分布式事务——AT模式郝
  • PMSG永磁同步发电机并网仿真模型:包含多部分控制与优化特性的动态仿真研究
  • HTML怎么显示灵感便签关联项目_HTML拖拽绑定项目入口【详解】
  • 3D点云标注的高效工具:labelCloud从入门到精通的实践指南
  • YOLOE官版镜像快速部署指南:5分钟搞定开放词汇目标检测环境
  • PHP代码“带病上线”时代终结:2024最严GDPR/等保合规AI校验清单(仅限首批200名开发者获取)
  • 学术论文助手:LaTeX写作中集成Qwen3-ASR-0.6B进行语音草稿输入