部署以及HTTP优化
正在加载今日诗词....
2022-08-10

部署上线以及服务端的优化

**前端部署:https://cli.vuejs.org/zh/guide/deployment.html **

  • 原理就是:将构建生成的产物直接拷贝到任何的静态文件服务器当中。

**后端部署: https://eggjs.org/zh-cn/core/deployment.html **

  • 几乎没有构建过程:除非你用了 typescript 等需要编译的语言。
  • 方案一:直接将本地的源代码打个压缩包拷贝到目标服务器,然后启动服务器。
  • 方案二:在服务器中直接 pull 源代码,install,然后启动服务器。

Nginx 作为服务器软件,它的优点:

  • 特别适合前后端分离的项目
  • 保证安全
  • 非常快
  • 支持负载均衡

Nginx 下载地址:http://nginx.org/en/download.html

HTTP 缓存详解

使用 gzip 实现静态文件的压缩 Gzip是一种压缩文件格式并且也是一个在类 Unix 上的一种文件压缩的软件 文档地址:http://nginx.org/en/docs/http/ngx_http_gzip_module.html

nginx gzip 的设置

# 开启gzip
gzip on;

# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;

# gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 1;

# 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
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 application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;

# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;

# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";

# 设置压缩所需要的缓冲区大小     
gzip_buffers 32 4k;

更高效的压缩算法 Brotli

Google软件工程师在2015年9月发布了包含通用无损数据压缩的算法,特别侧重于HTTP压缩。其中的编码器被部分改写以提高压缩比,编码器和解码器都提高了速度,流式API已被改进,增加更多压缩质量级别。

压缩比对照表https://quixdb.github.io/squash-benchmark/#ratio-vs-compression图片描述

图片描述使用前提

NGINX 对应的模块:https://github.com/google/ngx_brotli

nginx 开启静态压缩提升效率

动态压缩: 服务器在返回任何的静态文件之前,由服务器对每个请求压缩在进行输出。

静态压缩:服务器直接使用现成的扩展名为 .gz 的预压缩文件,直接进行输出。

两个步骤

  • 生成压缩文件。
  • 在 nginx 开启支持静态压缩的模块。

使用 webpack 插件在打包的时候生成 gzip 文件

文档地址:https://github.com/webpack-contrib/compression-webpack-plugin zlib 文档地址:https://nodejs.org/api/zlib.html

nginx 开启支持静态压缩的模块 模块地址:http://nginx.org/en/docs/http/ngx_http_gzip_static_module.html

HTTP 协议对于传输的优化

HTTP 是建立在 TCP 协议之上,所以HTTP 协议的瓶颈及其优化技巧都是基于 TCP 协议本身的特性,例如 tcp 建立连接的 3 次握手和断开连接的 4 次挥手以及每次建立连接带来的延迟时间。所以减少这些重新握手和至关重要。

KeepAlive 属性

图片描述

KeepAlive 的优点

  • TCP连接更少,这样就会节约TCP连接在建立、释放过程中,主机和路由器上的CPU和内存开销。
  • 网络拥塞也减少了,拿到响应的延时也减少了

使用 HTTP/2 提升性能

2010年 SPDY https://baike.baidu.com/item/SPDY 演化到 2015年 HTTP/2 https://developer.mozilla.org/zh-CN/docs/Glossary/HTTP_2

兼容性

主要特性

1 二进制协议图片描述

2 多路复用

在 HTTP/2 中引入了多路复用的技术。多路复用很好的解决了浏览器限制同一个域名下的请求数量的问题,同时也接更容易实现全速传输,毕竟新开一个 TCP 连接都需要慢慢提升传输速度。

同个域名只需要占用一个 TCP 连接,使用一个连接并行发送多个请求和响应,消除了因多个 TCP 连接而带来的延时和内存消耗。图片描述3 Header 压缩

HTTP/2 在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键-值对,对于相同的数据,不再通过每次请求和响应发送。 图片描述

见证时间

之前:DOMContentLoaded 4.26s 之后:2.33s

Copyright © 2022 @filway

  • ☀️
  • 🌑