Files
SkyArtShop/backend/middleware/compression.js
Local Server c1da8eff42 webupdatev1
2026-01-04 17:52:37 -06:00

52 lines
1.4 KiB
JavaScript

/**
* Response Compression Middleware
* High-performance compression with Brotli support
*/
const compression = require("compression");
const zlib = require("zlib");
const compressionMiddleware = compression({
// Only compress responses larger than 512 bytes (lower threshold)
threshold: 512,
// Level 6 for gzip (balance between speed and ratio)
level: 6,
// Memory level
memLevel: 8,
// Use Brotli when available (better compression than gzip)
brotli: {
enabled: true,
zlib: {
[zlib.constants.BROTLI_PARAM_QUALITY]: 4, // 0-11, 4 is fast with good compression
[zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,
},
},
// Filter function - don't compress already compressed formats
filter: (req, res) => {
if (req.headers["x-no-compression"]) {
return false;
}
const contentType = res.getHeader("Content-Type");
if (!contentType) return compression.filter(req, res);
// Don't compress images, videos, or already compressed formats
const skipTypes = [
"image/",
"video/",
"application/zip",
"application/pdf",
"application/octet-stream",
"application/wasm",
"font/",
];
if (skipTypes.some((type) => contentType.includes(type))) {
return false;
}
return compression.filter(req, res);
},
});
module.exports = compressionMiddleware;