【面试题】面试官问你前端性能优化时,他想问什么?

news2024/11/20 15:35:05

一直以来,前端性能优化都是面试过程中考察的热点题目。

相关的技术博客也层不出穷,我们总是能找到很多这样的文章,

从一个应用的各个层面开始分析,优化的种种手段,取得的种种效果。

往往篇幅越长,讲得越细,越受欢迎。

但在面试的时候,问这类问题时,候选人经常答得不尽人意,大部分人会把自己能想起来的优化措施,给背一遍。

背得越多越好,对于候选人自己说,内心也发虚,背完之后面试官毫无表情,因为这并不是他们想要的答案。

我们不妨从面试官的角度来思考。

 前端面试题库 (面试必备)            推荐:★★★★★

地址:前端面试题库

 表妹一键制作自己的五星红旗国庆头像,超好看

面试官想考察什么?

  • 这个很容易考察候选人技术的宽度和广度。
    • 可以从网络层面,打包层面,渲染层面问你对前端知识边界的了解。
    • 也可以就一个方面深入考察,比如http2,tcp的队头阻塞问题,webpack分包策略等等。
  • 考察一个人做事的能力和思考的方式。
    • 如果真的做过,那么是如何实施的,怎么和其他部门配合的,遇到了哪些问题,怎么解决的。
    • 如果没做过,那么会怎么来计划,推进这件事情。
  • 不至于让候选人无话可说。
    • 面试过程中很容易陷入一种,面试官问不出问题,候选人答不出问题的尴尬境地,这种性能优化的问题就可以让双方都有话可说。

当然,面试是门玄学,实际在面试过程中,根据面试官的状态,技术问题的侧重点也是不一样的。

那么作为候选人来说,如何回答,才能脱颖而出呢?

候选人如何回答?

首先第一个疑问就是,做过没做过呗?

如实回答即可,做过就讲自己做的过程,没做过就讲自己准备怎么做。

大的原则就是:稍带广度,突出深度。

两种情况我们需要分类讨论。

如果做过

或者你要假装自己做过。

明确范围

那就要明确你要进行前端优化的场景范围,或者说是要优化的应用是哪个种类。

  • 一个toC的纯H5,在浏览器和微信里使用
  • 一个toB的系统,或者说内部使用的运营系统
  • 嵌入app内使用的Hybrid
  • 公司官网
  • 跨端应用,小程序等等

以上每种类别优化的方式都是要根据场景采用的措施和手段是不一样的。

在回答的过程中,要明确这个基础。

比如说,对于一个离线加载的h5,应当从网络层面突出强调离线加载的好处,而不是说资源体积上的优化。

明确目标

性能优化需要目标,这个目标肯定是一个量化数据。

这就考察到了候选人对前端页面性能数据的掌握。

比如常问题目,你们在优化过程中,是如何制定目标,或者说如何排查阻塞问题的?

这个问题其实是在问你们如何采集页面数据。

性能数据采集分为两种
  • 实验室性能数据采集
    • google的lightHouse 帮助我们分析页面的六大属性
    • First contentful paint 首次内容绘制 (FCP)
    • Largest contentful paint 最大内容绘制 (LCP)
    • First input delay 首次输入延迟 (FID)
    • Time to Interactive 可交互时间 (TTI)
    • Total blocking time 总阻塞时间 (TBT)
    • Cumulative layout shift 累积布局偏移 (CLS)

    • 谷歌浏览器的性能面板,做具体链路阻塞的分析。
  • 线上真实数据采集
    • 线上接入入web-vitals做用户的数据收集
    • 接入sentry等一些三方SDK做性能数据的收集

确定方案

在分析整个前端页面性能优化的链路过程中,我们需要找到一个阻塞点,或者说切入点。

以一个app中webview中嵌套h5的场景来说

我们需要找到从用户点击跳转开始,到展现的过程中,经历了哪几个阶段,哪个阶段耗时多久,成为了阻塞页面的主要问题,然后针对问题再说实施了哪些优化。

比如下面这个问题,用户反馈APP内打开H5页面白屏时间过长,你应该怎么处理?

我们不能回答是用户网络不好吧。

针对这个问题,也有优化方式:

  1. 针对 WebView 初始化: 当客户端刚启动时,可以先提前初始化一个全局的 WebView 待用并隐藏
  2. 针对向后端发送接口请求:在客户端初始化 WebView 的同时,直接由 Native 开始网络请求数据,当页面初始化完成后,向 Native 获取其代理请求的数据。
  3. 针对加载的 js 动态拼接 html(单页面应用):可采用多页面打包, 服务端渲染,以及构建时预渲染等方式。
  4. 针对加载页面资源的大小:可采用懒加载等方式,将需要较大资源的部分分离出来,等整体页面渲染完成后再异步请求分离出来的资源,以提升整体页面加载速度。

当然我只是举个例子,在回答的过程中还是要突出重点,

如果对网络掌握较好,就说网络层面优化,

如果对打包工具熟悉,就说体积层面优化,

如果对浏览器熟悉,就说渲染层面的优化,

如果你对三方面都熟悉,那么应该不会看这篇文章。

如果没做过

如果没做过,但肯定了解过吧。

如果不了解,看完这篇文章吧。

主要从三个方面回答

传输

  • 使用CDN,对静态资源进行缓存。
    • 那么CDN回源和预热是什么回事?
    • 使用CDN和不使用CDN有什么区别?
    • 如何判断当前资源命中了CDN?
    • 你们项目中如何使用CDN的。
  • 使用http2,多路复用的特性,头部压缩,请求优先级
    • http2 是怎么解决http1.1的头部阻塞问题的?
    • http2 彻底解决了队头阻塞问题了吗?他还有哪些问题?
    • nginx如何配置使之生效
    • http3 有了解吗?
  • 充分利用浏览器缓存策略
    • 强缓存和协商缓存的区别
    • nginx中应该如何配置缓存字段
    • 分包加载,如何避免一行代码修改导致整个 bundle 的缓存失效

体积

  • 开启gzip压缩,对文本资源处理
    • 除了gzip压缩,还有哪些压缩方案
    • 如何配置gzip压缩
  • 压缩JS资源
    • 如何压缩js资源,有哪些库。
    • 压缩后的代码和未压缩之前有什么区别
    • sourcemap线上环境,测试环境,本地环境有什么区别
  • 图片大小的优化
    • 使用webp格式替换原有的png/jepg
  • 三方库的按需加载,按需打包
    • 编译代码中,如何支持tree-shaking?
    • 没有按需打包之前,有什么问题?

渲染

要说渲染呢,就要理解渲染过程,我们的前端代码如何在浏览器中展示出来的。

  • 从html解析成DOM树
  • 从CSS解析成CSS树
  • 结合DOM树木和CSS树,合并渲染树
  • 根据渲染树,确定DOM 树的位置布局信息
  • 然后再将每个节点渲染在浏览器中

所以需要减少渲染的次数,也就是我们所说的重绘,重排

加快html和css 的解析速度。

其实这能展开说的点就很多了,需要结合具体场景去分析。

  • 对关键资源的预加载,对非关键资源的延后加载
    • preload 和 prefecth 的使用区别
    • async 和 defer 的使用区别
    • dns-prefetch 对域名做预解析的作用
  • 请求的缓存,避免短期内切换页面反复请求接口
    • 缓存在哪里,你知道有哪些缓存方式,应该使用哪种缓存方式
  • 防抖和节流,减少渲染次数。
    • 解释一下防抖节流的使用场景
    • 要不,来手写个防抖函数

最后

其实我在文章中,也没有说任何题目的答案。

只是提供了一条思路,顺着性能优化这条思路,我们可以去学习计算机网路方面的知识,浏览器缓存方面,nginx配置方面,webpack的分包策略,页面解析渲染方面,图片优化方面,离线加载方面的知识。

这道题想要答得出彩,应当还是找到一两个方面深入研究。

 前端面试题库 (面试必备)            推荐:★★★★★

地址:前端面试题库

 表妹一键制作自己的五星红旗国庆头像,超好看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1031753.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 远程连接1130问题

通过后台进入mysql 1,切换到mysql库 2.查询user表信息 3.更新你想远程登录的用户的host信息,我这里想用root进行远程登录,所以修改如下 4.刷新权限 5.大功告成 快来和博主打成一片吧^_^

使用人工智能聊天机器人时要注意这些!(配提问技巧)

这两年ChatGPT可谓是火遍了互联网,在微博等社交平台上能看到很多网友晒出了与ChatGPT对话的截图,精准、恰当的回答让网友们都倍感新鲜。但是有很多人把人工智能聊天机器人当成玩具,有很多经典犯错回答,不少网友戏称是“人工智障”…

如何优雅的退出线程(condition_variable )

C多线程并发编程入门&#xff08;目录&#xff09; 使用条件变量来实现在析构函数中再次向线程发出一次notify&#xff0c;之后join 线程&#xff0c;等等线程安全退出。 #pragma once #include <iostream> #include <fstream> #include <string> #include …

PerformanceOne一站式性能测试平台

PerformanceOne&#xff08;简称&#xff1a;P-One&#xff09;是泽众软件自主研发的一套一站式性能测试平台软件产品。 该产品采用 B/S 架构开发&#xff0c;实现了集管理、设计、压测、监控以及分析于一体的全方位性能测试解决方案。可有效提升性能测试技术能力&#xff0c;…

拥抱数字化时代SOP电子作业指导书系统助力企业差异化竞争

在如今的竞争激烈的市场环境中&#xff0c;企业要想在同等条件下脱颖而出&#xff0c;差异化竞争成为了关键。然而&#xff0c;与硬件相比&#xff0c;软件的差异化更具有决定性的作用。而软件的差异化往往体现在细节上&#xff0c;而不是大的战略方面。而如何将这些细节进行量…

深入理解C#中委托的使用及不同类型委托的应用示例

在C#中&#xff0c;委托是一种强大而灵活的机制&#xff0c;可以引用一个或多个方法&#xff0c;并允许以类似函数指针的方式进行调用。委托在事件处理、回调函数和多线程编程等场景中非常有用。本文将深入探讨C#中委托的使用&#xff0c;并介绍不同类型委托的应用示例。 目录…

怎么解决IT运维管理痛点?运维工单系统如何提高企业运营效率?

随着企业信息化的飞速发展&#xff0c;IT系统的规模和复杂性也在迅速增长。然而&#xff0c;传统的IT运维管理方式往往难以满足现代企业的需求&#xff0c;存在着许多痛点。   首先&#xff0c;传统的运维管理方式效率低下&#xff0c;缺乏有效的IT资产管理和监控手段&#x…

高效畅通的iOS平台S5配置指南

在iOS平台上&#xff0c;使用S5代理ip访问互联网是一种非常有用的技巧。无论是为了保证隐私安全&#xff0c;还是解决网络限制问题&#xff0c;S5代理ip都能为您提供更快、更稳定的互联网访问体验。本文将为您详细介绍如何在iOS平台上配置和使用S5代理ip&#xff0c;让您的网络…

jarvisoj_level3_x64

jarvisoj_level3_x64 Arch: amd64-64-little RELRO: No RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000)64位&#xff0c;只开了nx ssize_t vulnerable_function() {char buf[128]; // [rsp0h] [rbp-80h] BYREFwrite(1, "Inp…

铁路设备屡遭破坏!RFID电子锁实现铁路防护网破坏实时报警管理

铁路防护网是铁路运输中保障安全的重要组成部分&#xff0c;然而&#xff0c;铁路设备被破坏的情况时有发生&#xff0c;给铁路运输带来了严重的安全隐患和经济损失。 一、铁路防护网面临的挑战 铁路防护网作为铁路运输的重要保障措施&#xff0c;时刻面临着破坏行为的威胁。…

win10 关闭edge跳转IE浏览器

按下windows键&#xff0c;搜索控制面板 右上角输入IE 点击IE 高级中取消下红框选择即可

mapbox鼠标滑过高亮要素

成果图 实现方法 这里借鉴了官网这个例子 https://docs.mapbox.com/mapbox-gl-js/example/hover-styles/ 这里是图层的样式配置&#xff0c;通过改变select的true和false&#xff0c;来控制渲染的颜色和宽度 paint: {line-opacity: 1,line-color: [case,[boolean, [feature-st…

算法通过村第七关-树(递归/二叉树遍历)黄金笔记|迭代遍历

文章目录 前言1. 迭代法实现前序遍历2. 迭代法实现中序遍历3. 迭代法实现后序遍历总结 前言 提示&#xff1a;在一个信息爆炸却多半无用的世界&#xff0c;清晰的见解就成了一种力量。 --尤瓦尔赫拉利《今日简史》 你是不是觉得上一关特别简单&#xff0c;代码少&#xff0c;背…

MySQL 高级语句 Part1(进阶查询语句+MySQL数据库函数+连接查询)

高级语句 第一部分 一、MySQL进阶查询语句1.1 select ----显示表格中一个或数个字段的所有数据记录1.2 distinct ----不显示重复的数据记录1.3 where ----有条件查询1.4 and or ----且 或1.5 in----显示已知的值的数据记录1.6 between----显示两个值范围内的数据记录1.7 通配符…

如何选择最适转录本序列构建过表达质粒

以构建绵羊 PPARG 基因过表达质粒为例 主要利用的数据库有 NCBI 和 Uniprot 数据库&#xff0c;首先在 NCBI 检索绵羊 PPARG 基因信息&#xff0c;可以发现绵羊 PPARG 有8个转录本&#xff0c;而人就更多了&#xff0c;有16个转录本。这时就需要明确一个概念&#xff0c;构建过…

CFCA证书 申请 流程(二)

关于CFCA证书的介绍&#xff0c;可参考上一篇文章&#xff1a;CFCA证书 申请 流程&#xff08;一&#xff09;_身价五毛的博客-CSDN博客 CFCA测试证书 申请流程 测试证书主要用于在测试环境对所需功能进行验证&#xff0c;例如HTTPS访问等。 首先&#xff0c;向CFCA的支持邮…

【论文笔记】NeRF-RPN: A general framework for object detection in NeRFs

原文链接&#xff1a;https://arxiv.org/abs/2211.11646 1. 引言 NeRF模型能直接从给定的RGB图像和相机姿态学习3D场景的NeRF表达。本文提出NeRF-RPN&#xff0c;使用从NeRF模型提取的辐射场和密度&#xff0c;直接生成边界框提案。 3. 方法 如图所示&#xff0c;本文的方法有…

TouchGFX之画布控件

TouchGFX的画布控件&#xff0c;在使用相对较小的存储空间的同时保持高性能&#xff0c;可提供平滑、抗锯齿效果良好的几何图形绘制。 TouchGFX 设计器中可用的画布控件&#xff1a; LineCircleShapeLine Progress圆形进度条 存储空间分配和使用​ 为了生成反锯齿效果良好的…

「UG/NX」BlockUI 选择小平面区域 Select Facet Region

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「UG/NX」BlockUI集合&#x1f4da;全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C」C/C程序设计「Win」Windows程序设计「DSA」数据结构与算法「File」数据文件格式 目录 控件说…

深入探究序列化与反序列化:原理、应用和最佳实践

目录 什么是对象的序列化和反序列化序列化步骤反序列化步骤案例演示Java中哪些字段不能序列化序列化与反序列化的重要性序列化与反序列化的应用场景 什么是对象的序列化和反序列化 序列化&#xff08;Serialization&#xff09;是指将对象转化为字节流的过程&#xff0c;以便于…