提问人:virender nehra 提问时间:11/17/2023 更新时间:11/17/2023 访问量:22
我需要节点.js压缩模块吗?
Do I need node.js compression module?
问:
带压缩功能的 Node Js 服务器
const express = require('express');
const compression = require('compression');
const app = express();
app.use(compression());
app.get("/compress", (req, res) => {
const text = `Lorem Ipsum is simply dummy text of the ...`;
res.json({text: text.repeat(10)});
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
它在 google chome 上显示压缩前后的大小相同。
我不确定我是否需要压缩模块。
答:
2赞
Edward
11/17/2023
#1
我运行了你的代码并测试了一些东西,这是我的发现。
- 使用压缩时,您的响应为 701 字节。每个后续的 once 是 179 字节。这是由于浏览器缓存,无论初始加载后是否压缩,都会创建缓存,并且在一段时间内仅使用该缓存。
- 这就是它变得有趣的地方,没有压缩响应大小是 678 字节,所以压缩实际上增加了更多的大小。这是由于压缩添加了额外的标头。它需要额外的标头来让浏览器知道此数据已被压缩,浏览器需要解压缩它。如果查看这两种情况的响应标头,对于启用压缩,这是 Vary: Accept-Coding 的额外标头。我的猜测是,由于数据已经很小,压缩库决定不使用任何压缩算法,或者算法本身决定不更改任何内容,因为在某些情况下,额外的压缩开销是不值得的。
- 为了证实我的猜测,我运行了其他测试,其中我使用了 text.repeat(100),这是我看到真实结果的地方。压缩后的数据大小为 407 字节,没有压缩时为 4.5 kbs,因此压缩有效,并且产生了巨大的差异(大约小了 10 倍)。同样在初始加载后,再次应用浏览器缓存,压缩和非压缩响应的大小均为 180 字节。
总之,应用压缩是最有用和好主意的。响应数据量小时效果可能不可见,但响应数据量越大,差异就越大(这取决于很多东西,比如你使用哪种压缩算法以及你拥有什么类型的数据,库实际上允许你配置一些东西)。同样在浏览器的情况下,在应用初始加载缓存后,无论是否压缩,大小都会相似。
评论