Compression 用于 JavaScript (Node.js):完整指南与示例
\n\n1. 什么是 Compression 以及为什么需要它
\nNode.js 的 compression 库是一个用于 Express 框架(以及其他兼容框架)的中间件,它能够自动使用 Gzip、Deflate 或 Brotli 算法压缩服务器的 HTTP 响应。它是优化 Node.js Web 应用程序性能的事实标准,因为它可以显著减小服务器与客户端之间传输的数据量(如 HTML、CSS、JavaScript、JSON、图像等)。
\n\n为什么需要它?在现代 Web 开发中,页面加载速度对用户体验和 SEO 至关重要。数据压缩可以将流量减少 3 到 10 倍(取决于内容类型)。例如,一个 100 KB 的 HTML 文件经过 Gzip 压缩后可能只有 10 到 15 KB。这对于流量受限的移动用户以及返回大型 JSON 对象的 API 尤其重要。如果不使用 compression,服务器将发送“原始”数据,这会增加加载时间和网络负载。
\n\n该库完全自动化了整个过程:它检查客户端请求中的 Accept-Encoding 头部,选择合适的压缩算法(通常是 gzip 或 brotli,如果支持),压缩响应并添加相应的头部(Content-Encoding、Vary)。开发者只需在 Express 的请求处理链中接入该中间件即可。这使得 compression 成为任何 Node.js 生产环境应用程序中不可或缺的工具。
2. 安装
\n该库通过 npm(Node 包管理器)安装。请确保您已安装 Node.js(版本 12 或更高)。在项目根目录下执行以下命令:
\nnpm install compression\n如果您使用 yarn:
\nyarn add compression\n安装后,该库即可在您的代码中导入使用。
\n\n3. 快速入门 — 最小工作示例
\n开始使用 compression 的最简单方法是将其作为中间件接入 Express。以下是一个最小服务器示例,它会压缩所有响应:
\nconst express = require('express');\nconst compression = require('compression');\nconst app = express();\nconst port = 3000;\n\n// 接入压缩中间件\napp.use(compression());\n\n// 普通路由\napp.get('/', (req, res) => {\n // 发送一个较大的响应(将字符串重复 1000 次)\n const bigData = 'Hello, World! '.repeat(1000);\n res.send(bigData);\n});\n\napp.listen(port, () => {\n console.log(`服务器运行在 http://localhost:${port}`);\n});\n启动后(node app.js),在浏览器中打开 http://localhost:3000。在开发者工具(Network 标签页)中,您将看到响应已被压缩(头部 Content-Encoding: gzip)。响应大小将比原始大小小很多倍。
4. 主要方法/函数/类
\ncompression 库提供了一个主要函数——中间件,它通过选项对象进行配置。以下是使用它的 8 个关键方面。
\n\n4.1. compression([options]) — 创建中间件
\n签名: compression(options?: CompressionOptions): RequestHandler
功能: 创建并返回一个用于 Express 的中间件函数。接受一个可选的配置对象。
\n示例:
\nconst compression = require('compression');\nconst app = require('express')();\n\n// 无选项(默认行为)\napp.use(compression());\n\n// 带选项\napp.use(compression({\n level: 6, // 压缩级别 (0-9)\n threshold: 1024, // 不压缩小于 1 KB 的响应\n filter