2020-01-30 前端性能优化

2020-01-31  本文已影响0人  小旎子_8327

减少资源体积

gzip

gzip 使用了 LZ77 算法与 Huffman 编码来压缩文件,重复度越高的文件可压缩的空间就越大

request headers
Accept-Encoding带上自己支持的内容编码格式列表
response headers
Content-Encoding:内容编码格式gzip 和 deflate

nginx 配置

gzip on;
gzip_min_length 1k; //不压缩临界值,大于1K的才压缩,一般不用改
gzip_comp_level 2; //压缩级别,1-10,数字越大压缩的越细,时间也越长
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; //进行压缩的文件类型
gzip_disable "MSIE [1-6]\.";//ie兼容性不好所以放弃

webpack配置
compression-webpack-plugin 这个插件可以提供功能,伸手党福利

const CompressionWebpackPlugin = require('compression-webpack-plugin');
plugins.push(   
 new CompressionWebpackPlugin({
        asset: '[path].gz[query]',// 目标文件名
        algorithm: 'gzip',// 使用gzip压缩
        test: new RegExp(
           '\\.(js|css)$' // 压缩 js 与 css        ),
        threshold: 10240,// 资源文件大于10240B=10kB时会被压缩        
        minRatio: 0.8 // 最小压缩比达到0.8时才会被压缩    
}));

源文件控制

减少资源请求

DNS

<link rel="dns-prefetch" href="//baidu.com">
<meta http-equiv="x-dns-prefetch-control" content="off">

http协议

核心 二进制分层
多路复用

当一个tcp建立连接之后,http2将多个请求重复利用这个tcp,并且分成多个stream交错传输,慢的请求或者先发送的请求不会阻塞其他请求的返回,最终根据stream的标识再重组返回,类似并发的感觉非并行。
Header 帧必须在 data 帧前面,data 帧依赖 header 帧的信息解析

乍一看好像都是复用了TCP连接,但俩这是截然不同的。
http1.x:
    它是遵循先进先出,服务端只能按顺序响应请求,所以如果前面的请求没有响应完变灰发生 队头阻塞,造成延迟,同时保持不必要的连接会影响服务器性能,同时浏览器限制了http同时并发的上限。
http2:   
   多个请求可以同时发送(不分先后),按序响应,解决1.x的一些问题。

缓存

基于智能DNS对用户的IP地址综合参考规则和数值指标的解析,将用户调度到择最快的Cache服务器

图片

区别于减少图片体积,减少图片资源请求的方案有哪些?

1.雪碧图
2.图片转base64

异步加载

预加载

preload
prefetch

笔记来源: 掘金网
链接: https://juejin.im/post/5defb2866fb9a01631780d29#heading-30

上一篇 下一篇

猜你喜欢

热点阅读