部署上线以及服务端的优化
**前端部署: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 缓存详解
- Expires https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Expires
- Expires 响应头包含日期/时间, 即在此时候之后,响应过期
- 使用 nginx 添加对应的响应头:expires 指令
- 文档地址:http://nginx.org/en/docs/http/ngx_http_headers_module.html
- Cache-Control:通用消息头字段,被用于在http请求和响应中,通过指定指令来实现缓存机制。
- 文档地址:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cache-Control
- Etag : ETagHTTP响应头是资源的特定版本的标识符。这可以让缓存更高效,并节省带宽,因为如果内容没有改变,Web服务器不需要发送完整的响应。
- 文档地址:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/ETag
- Last-Modified:是一个响应首部,其中包含源头服务器认定的资源做出修改的日期及时间。
- 文档地址:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Last-Modified
- nginx 配置 Etag:http://nginx.org/en/docs/http/ngx_http_core_module.html#etag
- 304 Not Modified :https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status/304
使用 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
使用前提
- 浏览器支持:https://caniuse.com/brotli
- HTTPS 协议
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
兼容性
- 需要浏览器支持 - https://caniuse.com/http2
- 需要 HTTPS 协议支持
主要特性
1 二进制协议
2 多路复用
在 HTTP/2 中引入了多路复用的技术。多路复用很好的解决了浏览器限制同一个域名下的请求数量的问题,同时也接更容易实现全速传输,毕竟新开一个 TCP 连接都需要慢慢提升传输速度。
同个域名只需要占用一个 TCP 连接,使用一个连接并行发送多个请求和响应,消除了因多个 TCP 连接而带来的延时和内存消耗。
3 Header 压缩
HTTP/2 在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键-值对,对于相同的数据,不再通过每次请求和响应发送。 
见证时间
之前:DOMContentLoaded 4.26s 之后:2.33s
Copyright © 2022 @filway