前端学习32 相关面试题6

1. 性能优化

前端性能优化主要可以从资源加载、页面渲染、运行时效率和用户体验四个维度入手。在实际开发中,主要采用以下策略:

  • 资源加载优化

使用 gzip/brotli 压缩资源,减少文件体积。

启用浏览器缓存(强缓存、协商缓存)提升复用率。

图片懒加载、压缩、使用 WebP 格式等。

合理使用 CDN 加速资源分发。

对第三方库采用按需引入或使用轻量替代方案。

  • 代码层优化

路由懒加载、组件按需加载,减少初始包体积。

使用 Tree Shaking + ES Module 去除无用代码。

利用 Vite 或 Webpack 做打包优化(例如 splitChunks 拆包策略)。

使用 defer / async 加载脚本,避免阻塞解析。

  • 页面渲染优化

首屏加载使用骨架屏、预渲染(如 SSR、预加载)优化体验。

合理使用虚拟列表、IntersectionObserver 优化长列表渲染。

减少 DOM 操作、避免频繁重排重绘。

  • 运行时优化

使用防抖/节流控制高频事件,如 scroll、resize。

合理拆分组件,避免重复渲染。

使用缓存或计算属性避免重复计算。

  • Vue 特有优化

使用 v-show 替代 v-if 控制频繁切换的 DOM。

合理使用 key,提升 diff 效率。

利用 keep-alive 缓存组件状态。

相应性能指标:

  • LCP(Largest Contentful Paint) 最大内容元素加载完成时间。
  • FCP(First Contentful Paint) 页面首个文本或图像内容渲染的时间
  • FP(First Paint) 页面首次像素渲染的时间。
  • TTI(Time to Interactive) 页面从开始加载到可以响应用户点击操作的时间。

2.浅拷贝、深拷贝方案

浅拷贝

  • Object.assign()
const obj = { a: 1, b: { c: 2 } }
const copy = Object.assign({}, obj)

  • 展开运算符(...)
const obj = { a: 1, b: { c: 2 } }
const copy = { ...obj }

  • 数组的concat()方法
const arr = [1, 2, [3, 4]]
const copy = [].concat(arr)

深拷贝

  • JSON.parse(JSON.stringify(obj))
const original = { a: 1, b: { c: 2 } }
const copy = JSON.parse(JSON.stringify(original))

  • 手写递归深拷贝
function deepClone(obj) {
  if (obj === null || typeof obj !== 'object') return obj

  const copy = Array.isArray(obj) ? [] : {}
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      copy[key] = deepClone(obj[key])
    }
  }
  return copy
}

全部评论
点赞 回复 分享
发布于 06-02 23:16 陕西

相关推荐

06-01 18:36
已编辑
南昌大学 前端工程师
## 时长 70 分钟 北京合思招聘系统### 1.自我介绍环节### 2.做题环节(20 分钟左右)有 22 道选择(html,css,js,数据结构),一道算法题:字符串去重,我和面试官简单说了一下思路(new Set),然后他让我随便写一点交卷了### 3.项目,场景和八股环节(这个环节持续太长了,有些我实在是忘了)1.你是如何做到首屏优化的2.讲讲 CI/CD 是如何实现的3.项目中有使用过 webpack 和 vite 吗4.webpack 和 vite 有什么区别5.有没有使用过什么状态管理工具6.项目使用了什么缓存机制这里我展开讲讲。关于缓存数据,蜀黍使用了缓存头(Cache-Control)和 localStorge。项目中使用了 Promise.all 来进行并发请求,同时从服务器和本地缓存请求数据7.怎么获取的缓存数据localStorge,状态码 3048.缓存的过期时间9.NextJS 中如何设置代码在客户端运行10.NextJS 如何设置服务端运行(好像是这个问法)11.useEffect 中如何进行数据请求(丝滑切换至场景题)12.如果不同 useEffect 中相互依赖过多怎么办(反问面试官,竟然是退化至使用类式组件)13.如果我想让我的 useRef 使用外部的 props 应该怎么办(forwardRef)14.当我的父组件将一个可能会经常变化的 props 传递给子组件时,应该怎么办(useMemo)15.我想全局管理 props,并且防止出现 props drill 的问题,应该怎么办(useContext)16.我想使用 useRef 来实现一个可以返回窗口顶部的功能,应该怎么实现,使用哪些 API17.我想将一个二维数组转换为一维数组怎么办18.如果我的二维数组中不完全都是数组怎么办(instanceof、Array.isArray)19.实现 add(1)(2) === 3 (函数柯里化)20.如何实现 string 和 number 之间的相互转换21.如何改变 this 的指向22.你有没有用过什么 ES6 的新特性23.Promise 打印顺序```javascriptconst promise = new Promise((resolve, reject) => {  console.log(1)  resolve()  console.log(2)})promise.then(() => {  console.log(3)})console.log(4)```24.有没有使用过 typeof25.flex 布局中如何实现水平垂直居中26.如何消除 float 带来的影响27.给定一个完整的 URL,如何获取其查询参数28.React 19 和 React 18 有什么区别29.项目中是否有采用什么对静态资源的优化可能还有,但是暂时想不起来了## 时长 15 分钟 洋葱学园1.对于一个列表,我们通常会给其添加一个 key,可以不添加吗,如果不添加是否有什么问题?2.对于一个 H5 页面加载过慢,如何优化3.将 URL 输入搜索栏,浏览器会做什么4.如何实现进入视窗才进行懒加载5.如何在一个 JS 文件中白屏时返回 Loading 组件(我直接说了 React 和 NextJS 中如何实现哈哈)6.移动端适配7.如何处理重复的请求(本人说了 axios cancelToken、防抖和节流解决这个问题)我确实记得应该还有,但是想不起来(
点赞 评论 收藏
分享
评论
2
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务