3 人参与回答
天行健咨询
天行健咨询 · 精益生产管理与六西格玛管理咨询,培训机构

前端性能优化,主要分两个大方向:资源加载优化 和 代码优化。

资源加载优化

资源加载优化,大致又分为三种:

资源压缩;

延迟加载;

减少 HTTP 请求。在 HTTP/1 时代,请求效率不高,需要排队,会造成堵塞,减少 HTTP 请求还是非常有效的。但已广泛普及的 HTTP/2 后使用了多路复用,可以充分利用带宽,不用考虑这个。甚至说拆成更多的资源,有利于做更细粒度的缓存。

下面我们看看具体都有哪些方法。

使用 HTTP/2

HTTP/2 的主要改进就在于提高加载资源的速度。

它使用了头部压缩,通过特有的 HPACK 算法,让请求头做了极致的压缩。

此外使用了多路复用,让请求产生流的特性,可以同时发送多个请求,充分利用带宽;

懒加载

一些暂时不用到的资源先不急着加载,在用到的时候再加载,目的是减少请求。

懒加载有很多种,有图片懒加载,滚动到图片位置,才开始加载图片(知乎使用了这个,另外 NextJS 框架的 Image 组件也支持懒加载)。

还有 JS 模块的懒加载,像 ES6 的动态 import,这个在 Webpack 有支持。

还有组件的懒加载:

{visible && }

开启 gzip

我们可以开启 Web Server 的 gzip 压缩,对资源进行内容压缩再传输。

此外还有压缩率更好的 br 可以选择。

《前端性能优化:启用 gzip》

图片使用 WebP

WebP 是 Google 推出的拥有极其优秀压缩比的图片格式。

我们可以判断客户端是否支持 WebP,如果支持则使用 WebP 来替代 jpg,减少图片大小。

空闲时加载之后可能需要访问的资源

加载当前页面资源的时候,调低某个暂时不用到的资源的下载优先级,在空闲的时候再加载,并将其缓存起来。

当用户从当前页面跳转到另一个页面,如果该页面用到了该资源,就可以直接使用缓存了。

关于资源加载管理的讲解,可以看我的这篇文章

《管理好资源的加载,你需要了解的 preload、prefetch、preconnect 以及 DNS-prefetch》

base64 内联

一些比较小的资源,比如一个不大的图标图片,可以考虑转换成 base64 格式,内嵌到 HTML 中。这样做的目的是减少 HTTP 请求数量。

下面是 webpack 的 url-loader 配置,将小于 8192 字节的图片转换为 base64。

{

test: /.(png|jpg|gif)$/i,

use: [

{

loader: 'url-loader',

options: {

limit: 8192,

},

},

],

},

凡卜
凡卜 · 陀螺仪,倾角传感器,组合导航,惯性导航

看看大佬都是怎么回答这个问题的

胡汉三
胡汉三 · 上海沈泉泵阀公司

看看大佬都是怎么回答这个问题的