DoneJS StealJS jQuery++ FuncUnit DocumentJS
3.14.1
5.0.0 4.3.0 2.3.35
  • About
  • Guides
  • API Docs
  • Community
  • Contributing
  • Bitovi
    • Bitovi.com
    • Blog
    • Design
    • Development
    • Training
    • Open Source
    • About
    • Contact Us
  • About
  • Guides
  • API Docs
    • Observables
      • can-compute
      • can-define
      • can-define/list/list
      • can-define/map/map
      • can-define-stream
      • can-define-stream-kefir
      • can-event
      • can-event/async/async
      • can-event/batch/batch
      • can-event/lifecycle/lifecycle
      • can-kefir
      • can-list
      • can-map
      • can-map-backup
      • can-map-define
      • can-observation
      • can-observe
      • can-simple-map
      • can-simple-observable
      • can-stream
      • can-stream-kefir
    • Data Modeling
      • can-connect
        • behaviors
          • ./base/
          • ./cache-requests/
            • data interface
              • getListData
            • algebra
              • getDiff
              • getUnion
          • ./can/constructor-hydrate/
          • ./can/map/
          • ./can/merge/
          • ./can/ref/
          • ./constructor/callbacks-once/
          • ./constructor/
          • ./constructor/store/
          • ./data/callbacks/
          • ./data/callbacks-cache/
          • ./data/combine-requests/
          • ./data/localstorage-cache/
          • ./data/memory-cache/
          • ./data/parse/
          • ./data/url/
          • ./data/worker/
          • ./fall-through-cache/
          • ./real-time/
        • modules
          • ./can/base-map/
          • ./can/model/
          • ./can/super-map/
          • ./can/tag/
          • ./helpers/map-deep-merge
          • ./helpers/weak-reference-map
        • data types
          • DataInterface
          • Instance
          • InstanceInterface
          • List
          • ListData
      • can-connect-cloneable
      • can-connect-feathers
      • can-connect-ndjson
      • can-connect-signalr
      • can-fixture
      • can-fixture-socket
      • can-ndjson-stream
      • can-set
    • Views
      • can-component
      • can-ejs
      • can-element
      • can-react-component
      • can-stache
      • can-stache/helpers/route
      • can-stache-bindings
      • can-stache-converters
      • can-view-autorender
      • can-view-callbacks
      • can-view-href
      • can-view-import
      • can-view-live
      • can-view-model
      • can-view-nodelist
      • can-view-parser
      • can-view-scope
      • can-view-target
      • react-view-model
      • react-view-model/component
      • steal-stache
    • Routing
      • can-deparam
      • can-param
      • can-route
      • can-route-pushstate
    • JS Utilities
      • can-assign
      • can-define-lazy-value
      • can-globals
      • can-key-tree
      • can-make-map
      • can-parse-uri
      • can-string
      • can-string-to-any
      • can-util
      • can-zone
      • can-zone-storage
    • DOM Utilities
      • can-ajax
      • can-attribute-encoder
      • can-control
      • can-dom-events
      • can-event-dom-enter
      • can-event-dom-radiochange
      • can-jquery
    • Data Validation
      • can-define-validate-validatejs
      • can-validate
      • can-validate-interface
      • can-validate-legacy
      • can-validate-validatejs
    • Typed Data
      • can-cid
      • can-construct
      • can-construct-super
      • can-namespace
      • can-reflect
      • can-reflect-promise
      • can-types
    • Polyfills
      • can-symbol
      • can-vdom
    • Core
    • Infrastructure
      • can-global
      • can-test-helpers
    • Ecosystem
    • Legacy
  • Community
  • Contributing
  • GitHub
  • Twitter
  • Chat
  • Forum
  • News
Bitovi

cache-requests

  • Edit on GitHub

Cache response data and use it to prevent unnecessary future requests or make future requests smaller.

cacheRequests( baseConnection )

Provide an implementation of getListData that uses set logic to determine what data is already in the cache and what data needs to be loaded from the base connection.

It then gets data from the cache and the base connection (if needed), merges it, and returns it. Any data returned from the base connection is added to the cache.

Parameters

  1. baseConnection {Object}:

    can-connect connection object that is having the cache-requests behavior added on to it. Should already contain the behaviors that provide the DataInterface (e.g data/url). If the connect helper is used to build the connection, the behaviors will automatically be ordered as required.

Returns

{Object}:

A can-connect connection containing the methods provided by cache-requests.

Use

Use cache-requests in combination with a cache like memory-cache or localstorage-cache. For example, to make it so response data is cached in memory:

var memoryCache = require("can-connect/data/memory-cache/");
var dataUrl = require("can-connect/data/url/");
var cacheRequests = require("can-connect/cache-requests/");

var cacheConnection = connect([memoryCache], {});
var todoConnection = connect([dataUrl, cacheRequests],{
  cacheConnection: cacheConnection,
  url: "/todos"
});

Now if today's todos are loaded:

todoConnection.getListData({due: "today"});

And later, a subset of those todos are loaded:

todoConnection.getListData({due: "today", status: "critical"});

The subset will be created from the original request's data.

Algebra Usage

cache-requests can also "fill in" the data the cache is missing if you provide it the necessary set algebra.

For example, if you requested paginated data like:

todoConnection.getListData({start: 1, end: 10})

And then later requested:

todoConnection.getListData({start: 1, end: 20})

... with the appropriate algebra configuration, cache-requests will only request {start: 11, end: 20}, merging that response with the data already present in the cache.

That configuration looks like:

var algebra = new set.Algebra( set.props.rangeInclusive("start","end") );

var cacheConnection = connect([memoryCache], {algebra: algebra});
var todoConnection = connect([dataUrl, cacheRequests], {
  cacheConnection: cacheConnection,
  url: "/todos",
  algebra: algebra
})

Note: cacheConnection shares the same algebra configuration as the primary connection.

CanJS is part of DoneJS. Created and maintained by the core DoneJS team and Bitovi. Currently 3.14.1.

On this page

Get help

  • Chat with us
  • File an issue
  • Ask questions
  • Read latest news