[object Object]

← back to AsSeenInMovies

asseeninmovies: gzip compression middleware (threshold 1KB) — JSON-LD-heavy HTML pages drop dramatically over the wire. /movies 37KB uncompressed → gzip. Smoke 52/52.

5aadd3a148aa04263a9b7733560dfd0bbe91f1fc · 2026-05-12 21:09:54 -0700 · SteveStudio2

Files touched

Diff

commit 5aadd3a148aa04263a9b7733560dfd0bbe91f1fc
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date:   Tue May 12 21:09:54 2026 -0700

    asseeninmovies: gzip compression middleware (threshold 1KB) — JSON-LD-heavy HTML pages drop dramatically over the wire. /movies 37KB uncompressed → gzip. Smoke 52/52.
---
 package-lock.json | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
 package.json      |  1 +
 server.js         |  4 ++++
 3 files changed, 54 insertions(+)

diff --git a/package-lock.json b/package-lock.json
index 3fde1c9..662a22b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,6 +8,7 @@
       "name": "asseeninmovies",
       "version": "0.1.0",
       "dependencies": {
+        "compression": "^1.8.1",
         "dotenv": "^16.6.1",
         "express": "^4.22.2",
         "pg": "^8.20.0"
@@ -94,6 +95,45 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/compressible": {
+      "version": "2.0.18",
+      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
+      "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
+      "license": "MIT",
+      "dependencies": {
+        "mime-db": ">= 1.43.0 < 2"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/compression": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz",
+      "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==",
+      "license": "MIT",
+      "dependencies": {
+        "bytes": "3.1.2",
+        "compressible": "~2.0.18",
+        "debug": "2.6.9",
+        "negotiator": "~0.6.4",
+        "on-headers": "~1.1.0",
+        "safe-buffer": "5.2.1",
+        "vary": "~1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/compression/node_modules/negotiator": {
+      "version": "0.6.4",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
+      "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
     "node_modules/content-disposition": {
       "version": "0.5.4",
       "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
@@ -563,6 +603,15 @@
         "node": ">= 0.8"
       }
     },
+    "node_modules/on-headers": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz",
+      "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/parseurl": {
       "version": "1.3.3",
       "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
diff --git a/package.json b/package.json
index c445c9b..665a18e 100644
--- a/package.json
+++ b/package.json
@@ -15,6 +15,7 @@
     "ingest:sag-aftra": "node scrapers/sag-aftra-public.js"
   },
   "dependencies": {
+    "compression": "^1.8.1",
     "dotenv": "^16.6.1",
     "express": "^4.22.2",
     "pg": "^8.20.0"
diff --git a/server.js b/server.js
index 66fc4a5..50127be 100644
--- a/server.js
+++ b/server.js
@@ -15,6 +15,7 @@
 
 require('dotenv').config();
 const express = require('express');
+const compression = require('compression');
 const path = require('path');
 const fs = require('fs');
 const { Pool } = require('pg');
@@ -37,6 +38,9 @@ function isAdmin(req) {
 }
 
 const app = express();
+// gzip compression for all responses ≥ 1KB. Big leverage on JSON-LD-heavy
+// HTML pages — /movies and /spotted carry full ItemList payloads now.
+app.use(compression({ threshold: 1024 }));
 app.use(express.json({ limit: '2mb' }));
 app.disable('x-powered-by');
 

← 2c7ee2c asseeninmovies: <meta name='theme-color' content='#0d0c0a'>  ·  back to AsSeenInMovies  ·  asseeninmovies: trust proxy=1 + Cache-Control on sitemap.xml cd952cb →