我在面试时是如何回答“前端性能优化”的

摘要:
每一位前端开发同学在面试的时候,都会有50%的几率会被问:你是如何做前端性能优化的?储备知识webpack打包服务端渲染http缓存浏览器本地缓存下面我会以第一人称的角度,配合文本排版进行回答面试官:你是如何做性能优化我:针对前端性能优化,我做过一些总结,一共有三点:第一次访问时的优化;第n次访问时的优化;让用户感觉很快,很流畅;第一次访问优化的方式有哪些?

每一位前端开发同学在面试的时候,都会有50%的几率会被问:你是如何做前端性能优化的?
下面说一说我是怎么回答的?

储备知识
  • webpack打包
  • 服务端渲染
  • http缓存
  • 浏览器本地缓存
下面我会以第一人称的角度,配合文本排版进行回答

面试官:你是如何做性能优化

我:针对前端性能优化,我做过一些总结,一共有三点:

  1. 第一次访问时的优化(把第一次的加载速度变快);
  2. 第n次访问时的优化(把已经访问过的资源缓存);
  3. 让用户感觉很快,很流畅(通过交互手段优化体验);

第一次访问优化的方式有哪些?

我:第一次访问的时我们优化的主要目的是【加快渲染的速度】、一般我们会使用webpack将资源较大的文件进行压缩或者拆分,压缩一般可以使用uglifyjs去压缩js文件,使文件体积变小;

我:如果此时文件依然很大,我们也可以使用webpack插件来拆分第三方库(不需要记住名字,知道有相关插件即可)

我: 至于图片、图标等资源同样可以在webpack中进行配置,将一定大小的文件转换成base64、或者使用阿里的字体图标库进行图标的渲染

如果想做SEO的优化,也可以采用服务端渲染的方式来加快首屏渲染的速度;

  1. 通过webpack进行资源压缩
  2. 通过webpack进行资源拆分
  3. 图片/图标资源的处理
  4. 服务端渲染

资源的压缩与拆分

1. 使用webpack插件压缩(html、js、css)资源

  • 压缩html的方式:HtmlWebpackPlugin
  • 压缩js的方式:uglifyjs-webpack-plugin
  • 压缩css的方式:optimize-css-assets-webpack-plugin
  • 除了使用插件以外也可以在服务端开启GZIP进行资源压缩

2. 如何进行资源拆分?

  • 通过webpack插件:CommonsChunkPlugin、Dllplugin 、DllReferencePlugin、SplitChunksPlugin(webpack4内置) 进行压缩
  • 路由的异步加载 import(/* webpackChunkName:${name} */ $ {path})

3. 图片/图标资源的处理

  • 通过webpack将一定大小范围内的图片处理成base64
  • 图标类的图片,可使用阿里的iconfont处理为字体图标
  • 雪碧图(比较老的方法,不建议了)

4. 服务端渲染

  • 无需等待页面加载js,直接将服务端渲染好的页面返回
  • SEO优化

第n次访问优化的方式有哪些?

我:一般情况下,访问过的页面/资源,想要在后面访问时加快访问速度,可以想到的方式是利用缓存或本地存储;

我:前端本身我们可以通过不同的业务逻辑利用localStorage或sessionStorage 就可以了

我:如何涉及到服务端,我们也可以采用http的缓存,一般有两种方式,一个是强缓存、另一个是协商缓存,强缓存的优先级高于协商缓存,我们可以通过相关key去设置缓存时间(那么多属性不一定记得住,但一定要知道有这个东西)

除了本地存储和http缓存,也可以尝试采用indexDB去做前端的数据存储

除了indexBD,Service workers也可以作为缓存方案

  • 浏览器本地缓存

  • http缓存

  • indexDB

  • Service workers

帮助大家的传送门:

localStorage的使用

sessionStorage的使用

彻底弄懂强缓存与协商缓存

http面试必会的:强制缓存和协商缓存

IndexedDB

Service worker 的概念和用法

如何让用户感觉很快

我:让用户感觉很快,顾名思义,就是并没有实际上的提升速度,而是优化了用户体验,我可以采用骨架屏、懒加载、合理loading,防抖、节流(减少不必要的请求)等方式让用户的等待变得舒服

  • 骨架屏、懒加载
  • loading优化
  • 防抖、节流
  • 等等等

以上就是我个人在面试中回答性能优化问题的是常用回答方式,通过以上的回答,也可以衍生出webpack的相关问题、http缓存的相关问题,http/https相关问题,闭包问题等

免责声明:文章转载自《我在面试时是如何回答“前端性能优化”的》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Postgresql 创建账户,修改密码JAVA 邮件发送下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

压倒程序员的最后一个面试题,iOS性能优化的面试题

点赞再看,养成习惯,欢迎大家关注我面试小专栏 :iOS中高级进阶之路有我准备的一线大厂面试资料和简历模板,欢迎Star! 这是我前面几天碰到的面试题: 如何对定位和分析项目中影响性能的地方?以及如何进行性能优化?我的答案:定位方法:instruments在iOS上进行性能分析的时候,首先考虑借助instruments这个利器分析出问题出在哪,不要凭空想象,...

前端开发编辑器(notepad++、sublime text)

1、Notepad++ 正则替换:   如<td>第三节</td>   替换成<td><input type="text" value="第三节" /></td>   可以查找:第(.)节,替换为:<input type="text" value="第(1)节" />。 2、 Note...

Asp.Net 4.0 新特性之 使用自定义OutputCache Provider

Asp.Net 4.0 新特性之 使用自定义OutputCache Provider 在Asp.Net 4.0 的web.config文件中添加了关于缓存的配置节,如下所示: <system.web> <compilation debug="true" targetFramework="4.0" /> <...

Go -- LFU类(缓存淘汰算法)(转)

1.LFU类 1.1.LFU 1.1.1.原理 LFU(LeastFrequentlyUsed)算法根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。 1.1.2.实现 LFU的每个数据块都有一个引用计数,所有数据块按照引用计数排序,具有相同引用计数的数据块则按照时间排序。 具体实现如下: 1.新加...

Vue全家桶以及常用知识点

一、介绍:VUE是什么   Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。 二、...

flashcache

Flashcache系统管理员手册 1.简介Flashcache 是为Linux操作系统开发的块设备回写缓存内核模块,使用了Device Mapper的方式实现,本文档可指导你快速掌握Flashcache管理工作。2. 系统需求 Flashcache 在Linux 2.6.18 和 2.6.20 内核上编译并测试通过。如果需要在更新的内核上使用,请发送...