压缩
引入zlib插件
const express = require("express");
const zlib = require("zlib");
搭建服务器响应文件
const express = require("express");
const zlib = require("zlib");
// 可以改造异步方法,返回promise对象
const {
promisify
} = require("util");
const {
resolve
} = require("path");
const fs = require("fs");
const {
response
} = require("express");
//注册一个服务
const app = express();
app.get("/", (request, response) => {
const filePath = resolve(__dirname, "./public/index.html")
const rs = fs.createReadStream(filePath)
response.set("Content-Type", "text/html;charset=utf-8")
rs.pipe(response);
})
app.get("/js/index.js", (request, response) => {
console.log(1)
const filePath = resolve(__dirname, "./public/js/index.js");
const rs = fs.createReadStream(filePath);
response.set("Content-Type", "application/javascript;charset=utf-8")
rs.pipe(response);
})
//启动服务
app.listen(3000, (err) => {
if (err) {
console.log("服务启动错误" + err);
return;
}
console.log("服务器启动成功 http://127.0.0.1:3000");
})
压缩
app.get("/js/index.js", (request, response) => {
const filePath = resolve(__dirname, "./public/js/index.js");
const rs = fs.createReadStream(filePath);
//设置强制缓存 http1.1
response.set("cache-control", "max-age=10");
//设置强制缓存 http1.0
response.set("expires", new Date(Date.now() + 1000 * 3600).toGMTString())
//写在前面.不然retunrn之后代码不执行了
response.set("Content-Type", "application/javascript;charset=utf-8")
// 获取请求头 获取客户端支持的压缩格式
const acceptEncoding = request.headers["accept-encoding"];
console.log(acceptEncoding)
// gzip, deflate, br
if (acceptEncoding.includes("gzip")) {
// 创建一个新的gzip压缩格式 并把流式读取的文件写入
const fileGzip = rs.pipe(zlib.createGzip());
// 在响应头中添加一个压缩格式
response.set("Content-Encoding", "gzip");
// 响应压缩后的文件
fileGzip.pipe(response);
return;
}
//支持br压缩
if (acceptEncoding.includes("br")) {
//创建一个新的gzip压缩格式 并把流式读取的文件写入
const fileBr = rs.pipe(zlib.createBrotliCompress());
//在响应头中添加 一个压缩格式
res.set("Content-Encoding", "br");
//响应压缩后的文件
fileBr.pipe(res);
return;
}
//支持deflate压缩
if (acceptEncoding.includes("deflate")) {
//创建一个新的gzip压缩格式 并把流式读取的文件写入
const fileDeflate = rs.pipe(zlib.createDeflate());
//在响应头中添加 一个压缩格式
res.set("Content-Encoding", "deflate");
//响应压缩后的文件
fileDeflate.pipe(res);
return;
}
rs.pipe(response);
})