当前位置: 首页 > news >正文

品牌网站建设4a小蝌蚪青岛 机械 中企动力提供网站建设

品牌网站建设4a小蝌蚪,青岛 机械 中企动力提供网站建设,投资项目网,网站上传空间下一步用 zlib 来实现 gzip 压缩 服务端优化都是:压缩 缓存 前端可以通过 webpack 插件进行压缩 gzip 根据替换来实现的,重复率越高,压缩后的结果越小 const zlib require("zlib"); const fs require("fs"); const path …

用 zlib 来实现 gzip 压缩

服务端优化都是:压缩 + 缓存

前端可以通过 webpack 插件进行压缩
gzip 根据替换来实现的,重复率越高,压缩后的结果越小

const zlib = require("zlib");
const fs = require("fs");
const path = require("path");

方式一:读取文件压缩,如果文件大的话都读取到内存中,耗内存

zlib.gzip(fs.readFileSync(path.resolve(__dirname, "./65/1.txt")), (err, data) => {fs.writeFileSync(path.resolve(__dirname, "./65/2.txt.gz"), data);
});

方式二:用转化流(可读可写)的方式,服务端的文件 => 压缩 => 客户端

fs.createReadStream(path.resolve(__dirname, "./65/1.txt")).pipe(zlib.createGzip()).pipe(fs.createWriteStream(path.resolve(__dirname, "./65/2.txt.gz")));

新建 1.txt 文件用来测试压缩,里面写的都是1,大概有个 10k 的样子,两种方式执行之后都会生成压缩文件 2.txt.gz,如下

在这里插入图片描述

代码实现 http-server 里的 gzip 压缩

下面实现 http-server 里的 gzip 压缩

实现思路就是根据请求头 header [accept-encoding] 里是否包含 gzip 来判断浏览器是否支持 gzip 压缩,如果支持就创建转化流处理。

在上一节的 server.js 里面添加代码如下

// 核心模块
const http = require("http");
const path = require("path");
const url = require("url");
const fs = require("fs").promises;
const { createReadStream, createWriteStream, readFileSync } = require("fs");// 第三方模块
const ejs = require("ejs"); // 服务端读取目录进行渲染
const mime = require("mime");
const chalk = require("chalk");
const debug = require("debug")("server");
// 根据环境变量来进行打印 process.env.EDBUG
debug("hello kaimo-http-server");// 同步读取模板
const template = readFileSync(path.resolve(__dirname, "template.ejs"), "utf-8");class Server {constructor(config) {this.host = config.host;this.port = config.port;this.directory = config.directory;this.template = template;}async handleRequest(req, res) {let { pathname } = url.parse(req.url);// 需要对 pathname 进行一次转义,避免访问中文名称文件找不到问题console.log(pathname);pathname = decodeURIComponent(pathname);console.log(pathname);// 通过路径找到这个文件返回let filePath = path.join(this.directory, pathname);console.log(filePath);try {// 用流读取文件let statObj = await fs.stat(filePath);// 判断是否是文件if (statObj.isFile()) {this.sendFile(req, res, filePath, statObj);} else {// 文件夹的话就先尝试找找 index.htmllet concatFilePath = path.join(filePath, "index.html");try {let statObj = await fs.stat(concatFilePath);this.sendFile(req, res, concatFilePath, statObj);} catch (e) {// index.html 不存在就列出目录this.showList(req, res, filePath, statObj, pathname);}}} catch (e) {this.sendError(req, res, e);}}// 列出目录async showList(req, res, filePath, statObj, pathname) {// 读取目录包含的信息let dirs = await fs.readdir(filePath);console.log(dirs, "-------------dirs----------");try {let parseObj = dirs.map((item) => ({dir: item,href: path.join(pathname, item) // url路径拼接自己的路径}));// 渲染列表:这里采用异步渲染let templateStr = await ejs.render(this.template, { dirs: parseObj }, { async: true });console.log(templateStr, "-------------templateStr----------");res.setHeader("Content-type", "text/html;charset=utf-8");res.end(templateStr);} catch (e) {this.sendError(req, res, e);}}gzip(req, res, filePath, statObj) {if (req.headers["accept-encoding"] && req.headers["accept-encoding"].includes("gzip")) {// 给响应头添加内容编码类型头,告诉浏览器内容是什么编码类型res.setHeader("Content-Encoding", "gzip");// 创建转化流return require("zlib").createGzip();} else {return false;}}// 读取文件返回sendFile(req, res, filePath, statObj) {// 设置类型res.setHeader("Content-type", mime.getType(filePath) + ";charset=utf-8");// 读取文件进行响应// 先判断浏览器是否支持 gzip 压缩let gzip = this.gzip(req, res, filePath, statObj);if (gzip) {createReadStream(filePath).pipe(gzip).pipe(res);} else {createReadStream(filePath).pipe(res);}}// 专门处理错误信息sendError(req, res, e) {debug(e);res.statusCode = 404;res.end("Not Found");}start() {const server = http.createServer(this.handleRequest.bind(this));server.listen(this.port, this.host, () => {console.log(chalk.yellow(`Starting up kaimo-http-server, serving ./${this.directory.split("\\").pop()}\r\n`));console.log(chalk.green(`       http://${this.host}:${this.port}`));});}
}module.exports = Server;

我们启动服务,去访问 http://localhost:3000/1.txt

kaimo-http-server

跟没有压缩的对比如下:

在这里插入图片描述

http://www.15wanjia.com/news/163351.html

相关文章:

  • 广东品牌网站建设服务机构普通电脑怎么做网站服务器
  • 单页淘宝客网站哈尔滨做网站搭建的
  • 网站关键词多少个最好网站建站方案书
  • 江苏商城网站建设服务最近国内新闻
  • 天津市住房城乡建设部网站网站推广怎么发外链
  • 安保企业网站模板炫酷的企业网站
  • 简单的做海报的网站2017网站开发前景
  • 网站cn域名注册一个公司能备案几个网站
  • 网站制作公司 信科网络手机如何强制下载网页视频
  • 北风淘淘网站开发软件开发阶段包括哪几个阶段
  • 蓝色科技网站建设内蒙古赤峰市信息网官网
  • 深圳html5网站制作左侧导航网站
  • 免费网站推广入口淘宝客网站做京东
  • 网站开发域名注册seo教育培训机构
  • 厦门市建设区网站首页韩雪冬模板网站
  • 百度头条怎么做网站可信赖的邵阳网站建设
  • 福建建设信息网站如何编写一份网站开发需求文档
  • ps软件网站有哪些功能做a视频 免费网站
  • 泰安建设局网站如何在百度上找网站
  • 国内搜索网站云服务器有哪些平台
  • 对电子商务网站建设与管理的心得不动户激活 e路护航安全组件
  • 昆山市有没有做网站设计的直播视频素材
  • 交友营销型网站成品网站源码在线看
  • 做网站发房源综合语录青岛网站关键词
  • 网银网站模板遵义湘江投资建设有限责任公司门户网站
  • 合肥做网站做推广公司注册网上核名app软件是什么
  • 高新快速建设网站电话网站建设举措
  • 顺的网站建设服务免备案做网站可以盈利吗
  • 杭州网络问政平台泰州seo排名扣费
  • 网站动态好还是静态好国内看网站 优帮云