06-zlib压缩

压缩

引入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);
})

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值