Course contentsShow
← Node.js
Lesson 1335 of 1,98012. Caching Strategies and Application SpeedFree lesson

Compressed Payload Caching

You will store pre-compressed response bodies to save bandwidth and CPU cycles during transmission.

In this lesson, you will learn how to optimize your response latency and reduce network overhead by storing pre-compressed response bodies directly in your cache.

The Concept

Typically, when a client requests data, your Node.js server retrieves the raw object, serializes it, and then runs a compression algorithm (like Gzip or Brotli) on the fly. Doing this for every cache miss consumes significant CPU cycles. Compressed Payload Caching shifts this burden: instead of caching the raw object, you compress the payload once before writing it to the cache. When a hit occurs, you serve the pre-compressed bytes directly, saving both serialization time and the heavy lifting of real-time compression.

Implementation Logic

When using a cache store like Redis, you can store the compressed buffer directly. You must also store the corresponding Content-Encoding (e.g., gzip) so the client knows how to decode the stream.

Here is a simplified look at how this flow works:

const zlib = require('zlib');

async function getCachedResponse(key) {
  const cachedData = await redis.getBuffer(key); // Retrieve binary data
  if (cachedData) {
    return { data: cachedData, compressed: true };
  }

  // On miss: Fetch, Compress, then Cache
  const payload = JSON.stringify(expensiveData);
  const compressed = zlib.gzipSync(payload);
  
  await redis.set(key, compressed, 'EX', 3600);
  return { data: compressed, compressed: true };
}

Why This Matters

By serving a pre-compressed Buffer, your Node.js event loop spends less time in CPU-bound compression tasks. This is particularly effective for large JSON payloads or static assets that don't change frequently. You are essentially turning a "compute-intensive" operation into a simple "network-bound" retrieval operation.

Note: Be sure to set your Content-Encoding HTTP header to gzip when sending these buffers back to the client, otherwise, the browser will attempt to render the compressed binary as plain text.

Key Takeaway: Storing pre-compressed payloads in your cache eliminates redundant CPU-heavy compression cycles, significantly reducing response times for your most frequent requests.