Sunday, November 17, 2024

Javascript Memoization vs Caching

Memoization and caching are closely related concepts in computer science that focus on storing results of computations to optimize performance. Although they are closely related concepts and sometimes used interchangeably.

Memoization

Memoization is an optimization technique in which the results of expensive function calls are stored (or "memoized") so they can be reused when the same inputs occur again. It's purpose is to avoid redundant computations by remembering the results of previous computations. It is usually specific to a particular function or algorithm.
  1. A specific type of caching where the result of a function call is stored based on its input arguments.
  2. The primary goal is to avoid recomputation by returning the stored result when the same inputs are used again.
  3. It's typically used in the context of pure functions (functions without side effects).
  4. Memoization is usually implemented at the function level to optimize function calls.

JavaScript Example of Memoization

function fibonacci(n, memo = {}) {
  if (n <= 1) return n;

  if (memo[n]) return memo[n]; // Return stored result

  memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo); // Store result
  return memo[n];
}

console.log(fibonacci(10)); // Computes and stores intermediate results

Caching

Caching is a general-purpose performance optimization strategy where data or results are stored temporarily to serve future requests faster. Its purpose is to reduce the cost of fetching or recomputing data by keeping frequently or recently accessed data readily available. Its scope is broader; it is not limited to individual functions. It can apply to web responses (e.g., HTTP caching), file system data and database queries.
  1. A broader concept that involves storing data for future reuse, regardless of its origin.
  2. It can apply to any type of data (e.g., HTTP responses, database queries, or computed results).
  3. It's not limited to function results or arguments.
  4. Caching is broader and can be applied at the application level, like storing API responses or assets in a browser.

Different Types of Caching:

  1. In-Memory Cache: Stores data in RAM for fast access.
  2. Disk Cache: Saves data on disk for persistence.
  3. Distributed Cache: Shared cache system across multiple servers (e.g., Redis, Memcached).

JavaScript Example of Caching

// Simple API response caching
const apiCache = new Map();

async function fetchData(url) {
  if (apiCache.has(url)) {
    console.log("Returning cached data");
    return apiCache.get(url); // Return cached data
  }

  console.log("Fetching new data");
  const response = await fetch(url);
  const data = await response.json();

  apiCache.set(url, data); // Store response in cache
  return data; 
  fetchData("https://api.example.com/data"); // First fetch stores data
  fetchData("https://api.example.com/data"); // Subsequent fetch returns cached data
}

Comparisons


Aspect

Memoization

Caching

Focus

Function results based on inputs

Any reusable data (e.g., API responses, files)

Granularity

Narrow (function-specific)

Broad (application-wide)

Purpose

Avoid recomputation

Optimize data retrieval and reuse

Implementation

Input-output mapping

Key-value storage for general data

Scope

Typically function-specific

Broader application-level


Summary

  • Memoization is a form of caching, but it's specifically for storing function results based on inputs.
  • Caching is a more general concept that applies to storing any reusable data, not just function results.

No comments:

Post a Comment

Hot Topics