2026年Vue前端面试准备

前言

3年前端经验,主要技术栈Vue2/Vue3,准备被裁失业,好久没刷面试经验,现在又可以重新捡起来了,顺便记录一下最近学习的面试知识点,方便了解和学习。

Vue性能优化

Vue 项目的性能优化我一般会从几个方面考虑,包括首屏加载优化、组件渲染优化、打包体积优化、网络请求优化,以及用户交互体验优化。

首屏加载优化

路由懒加载

bash 复制代码
const Home = () => import('@/views/Home.vue');

按需加载,减少首包体积
分包 / Tree Shaking

Vite / webpack:在工程化项目中,Vite / webpack会自动 Tree Shaking删除未使用代码
避免一次加载整个组件库

为什么有时候会加载整个组件库:如果使用import _ from 'lodash',引入全部就会加载组件库,import debounce from 'lodash/debounce'或者import { debounce } from 'lodash-es'按需引入就不会
CDN 加速

比如:Vue,ECharts,lodash,放 CDN,可以减少打包体积,因为像element-plus、lodash体积都很大,如果包含element-plus、lodash的项目打包出来的app.js有5M,浏览器在执行的时候

bash 复制代码
先下载 5MB
↓
再解析
↓
再执行
↓

页面才能显示如果配置CDN,通过

`
`去加载,这样打包出来的app.js只会有500k左右的大小,而且还有有缓存,不用重复加载,所以使用CDN首屏加载更快

图片优化

WebP:是 Google 推出的图片格式。同样画质,体积更小

懒加载:图片进入可视区域时才加载。<img src="a.jpg" loading="lazy">,压缩:构建时压缩,vite-plugin-imagemin,在npm run build的时候执行

bash 复制代码
import viteImagemin from 'vite-plugin-imagemin'//引入图片压缩插件

viteImagemin({
  mozjpeg: {//JPEG 图片压缩器
    quality: 70//压缩质量为70
  }
})

为什么首屏加载的时候要优化图片,现在的图片一般都很大,图片往往占页面资源的大部分。所以图片优化 = 前端性能优化核心,

渲染优化

v-if 和 v-show 区别
v-if :真正销毁 DOM适合低频切换
v-show:display:none,适合高频切换

key 的合理使用

bash 复制代码
<div v-for="item in list" :key="item.id">

作用:提高 diff 效率,避免错误复用 DOM
computed 缓存

bash 复制代码
const total = computed(() => ...)

computed:有缓存,methods:每次都会执行

组件优化

keep-alive

bash 复制代码
<keep-alive>
  <router-view />
</keep-alive>

keep-alive:缓存组件实例,避免组件反复销毁和重新创建。适用场景:列表返回详情,Tab 页面

大列表优化

**虚拟列表:**只渲染可视区域,一般都用现成的,vue-virtual-scroller、或者Element Plus自带的el-auto-resizer进行实现
实现原理:

bash 复制代码
<div class="container" @scroll="onScroll">
  <div class="phantom" :style="{ height: totalHeight + 'px' }"></div>

  <div
    class="list"
    :style="{ transform: `translateY(${offsetY}px)` }"
  >
    <div
      v-for="item in visibleData"
      :key="item.id"
      class="item"
    >
      {{ item.text }}
    </div>
  </div>
</div>
const totalHeight = list.length * itemHeight
const itemHeight = 50
const visibleCount = 10

const startIndex = Math.floor(scrollTop / itemHeight)

const visibleData = list.slice(
  startIndex,
  startIndex + visibleCount
)

const offsetY = startIndex * itemHeight

网络优化

防抖 / 节流

请求缓存

比如:localStorage、sessionStorage、Pinia 持久化
并发控制

避免Promise.all 一次几十个请求
使用接口进行分页

浏览器层优化

用transform、opacity代替left、top,因为top、left 会触发页面的重排(Reflow),而transform、opacity会触发页面的重绘,消耗性能少一些

项目里怎么讲

在项目中我们做过几个性能优化:

  1. 路由使用动态 import 做懒加载,减少首屏体积
  2. 对大列表使用虚拟滚动,避免一次渲染几千条数据
  3. 搜索框使用debounce,减少接口请求
  4. 使用 keep-alive 缓存页面状态
  5. 对一些大对象避免深度 reactive,减少响应式开销
  6. 使用 transform 优化动画,减少回流
相关推荐
AC赳赳老秦30 分钟前
CSDN 技术社区数据采集:OpenClaw 抓取公开技术热帖,生成领域技术热点周报
java·大数据·前端·数据库·python·php·openclaw
结网的兔子38 分钟前
【前端开发】Web端迁移至 uni-app 及鸿蒙扩展方案对比
前端·uni-app·harmonyos
水瓶夜之1 小时前
.NET 中的新增功能系列文章——.NET SDK中的新增功能
前端·chrome·.net
用户2873555325922 小时前
OpenResty 中 Lua 脚本实战示例(分场景讲清 Lua 解决了 Nginx 原生做不到的事)
面试
笨笨狗吞噬者2 小时前
VS Code 内置浏览器打开网页
前端
SamChan902 小时前
WebSocket实现PDF翻译进度实时推送:Go后端+React前端的完整方案
前端·websocket·pdf·c#·react·机器翻译
甲维斯2 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·人工智能
帅次2 小时前
Android 应用高级面试:Window 近1年高频追问 18 题
android·面试·职场和发展
奈斯先生Vector2 小时前
大模型 Agentic Workflow 架构解构:异构 API 调度与 Token 路由的多模态系统设计
开发语言·前端·架构·prompt·aigc·音视频
海带紫菜菠萝汤2 小时前
FFmpeg.wasm 实践:在浏览器中运行 FFmpeg 的能力边界与性能瓶颈
前端·javascript·ffmpeg·音视频·wasm