Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

apollo-cache-persist-compressed

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

apollo-cache-persist-compressed

🗜️ Compressed cache persistence for Apollo Client

  • 1.0.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

apollo3-cache-persist-compressed Current npm package version. Monthly downloads Current CircleCI build status. apollo-cache-persist-compressed is released under the MIT license.

Exposes wrappers built on top of apollo3-cache-persist, but leverages compression via GZip (powered by fflate) to reduce the size of the stored cache.

Currently, the only wrapper exposed is CompressedLocalForageWrapper, which is a drop-in replacement for LocalForageWrapper from apollo3-cache-persist, but persists the cache in a compressed format. localForage supports all sorts of JavaScript objects, including binary data (Uint8Array), so it's a good choice for persisting compressed data as binary, which saves us from having to convert the compressed binary to a base64 string.

Compressing strings, especially Apollo Client's cache is quite efficient because a cache (even a normalized one) will have a lot of repeated tokens, which can be compressed quite well. The GZip compression is powered by fflate.

Compresses a cache of 1 MB into 60 KB in 22ms 🔥 (Tested on an M1 Pro).

By default, apollo3-cache-persist only persists a stringified version of the cache up to 1,048,576 characters (1 MB), which can be quickly reached with a cache of a few hundred entities. This library allows you to compress the cache before persisting it, which can save a lot of space while ensuring you can leverage the full power of Apollo Client's cache rather than purging the cache every few interactions.

Usage

[!WARNING] apollo3-cache-persist-compressed is meant to be used on top of apollo3-cache-persist, make sure to install both!

npm install --save apollo3-cache-persist apollo3-cache-persist-compressed

or

yarn add apollo3-cache-persist apollo3-cache-persist-compressed

Finally, use CompressedLocalForageWrapper as a drop-in replacement for LocalForageWrapper:

[!CAUTION] The compressed storage doesn't support migrating from a string-based cache. Therefore, it's really important to version your localForage via the name config!

[!IMPORTANT] Ensure the serialize option on persistCache isn't turned off, as the compression expects to receive a serialized version of the cache to compress it as a string. serialize defaults to true.

import { InMemoryCache } from '@apollo/client/core';
import { persistCache } from 'apollo3-cache-persist';
import { CompressedLocalForageWrapper } from 'apollo3-cache-persist-compressed';
import localforage from 'localforage';

const cache = new InMemoryCache({...});

localforage.config({
  driver: localforage.INDEXEDDB,
  name: 'apollo-cache-v2',
});

// await before instantiating ApolloClient, else queries might run before the cache is persisted
await persistCache({
  cache,
  storage: new CompressedLocalForageWrapper(localforage),
  serialize: true,
});

// Continue setting up Apollo as usual.

const client = new ApolloClient({
  cache,
  ...
});

License

merge-drivers is MIT licensed.

FAQs

Package last updated on 29 May 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc