DoneJS StealJS jQuery++ FuncUnit DocumentJS
5.33.3
6.0.0 4.3.0 3.14.1 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-bind
      • can-compute
      • can-debug
      • can-define
      • can-define/list/list
      • can-define/map/map
      • can-define-backup
      • can-define-stream
      • can-define-stream-kefir
      • can-event-queue
      • can-kefir
      • can-list
      • can-map
      • can-map-compat
      • can-map-define
      • can-observable-array
      • can-observable-object
      • can-observation
      • can-observation-recorder
      • can-observe
      • can-simple-map
      • can-simple-observable
      • can-stream
      • can-stream-kefir
      • can-value
    • Views
      • can-attribute-observable
      • can-component
      • can-stache
      • can-stache-bindings
      • can-stache-converters
      • can-stache-element
      • can-stache-route-helpers
      • can-view-autorender
      • can-view-callbacks
      • can-view-import
      • can-view-live
      • can-view-model
      • can-view-nodelist
      • can-view-parser
      • can-view-scope
      • can-view-target
      • steal-stache
    • Data Modeling
      • can-connect
        • behaviors
          • ./base/
          • ./cache-requests/
            • queryLogic
              • getDiff
              • unionMembers
            • data interface
              • getListData
          • ./can/constructor-hydrate/
          • ./can/map/
          • ./can/ref/
          • ./can/session/
          • ./can-local-store
          • ./can-memory-store
          • ./constructor/callbacks-once/
          • ./constructor/
          • ./constructor/store/
          • ./data/callbacks/
          • ./data/callbacks-cache/
          • ./data/combine-requests/
          • ./data/parse/
          • ./data/url/
          • ./data/worker/
          • ./fall-through-cache/
          • ./real-time/
        • modules
          • ./can/tag/
          • ./helpers/map-deep-merge
          • ./helpers/weak-reference-map
        • data types
          • DataInterface
          • Instance
          • InstanceInterface
          • List
          • ListData
        • deprecated
          • ./can/base-map/
          • ./can/merge/
          • ./can/super-map/
          • ./data/localstorage-cache/
          • ./data/memory-cache/
      • can-connect-feathers
      • can-connect-ndjson
      • can-connect-tag
      • can-fixture
      • can-fixture-socket
      • can-local-store
      • can-memory-store
      • can-ndjson-stream
      • can-query-logic
      • can-realtime-rest-model
      • can-rest-model
      • can-set-legacy
      • can-super-model
    • Routing
      • can-deparam
      • can-param
      • can-route
      • can-route-hash
      • can-route-mock
      • can-route-pushstate
    • JS Utilities
      • can-assign
      • can-define-lazy-value
      • can-diff
      • can-globals
      • can-join-uris
      • can-key
      • can-key-tree
      • can-make-map
      • can-parse-uri
      • can-queues
      • can-string
      • can-string-to-any
      • can-zone-storage
    • DOM Utilities
      • can-ajax
      • can-attribute-encoder
      • can-child-nodes
      • can-control
      • can-dom-data
      • can-dom-events
      • can-dom-mutate
      • can-event-dom-enter
      • can-event-dom-radiochange
      • can-fragment
    • Data Validation
      • can-define-validate-validatejs
      • can-type
      • can-validate
      • can-validate-interface
      • can-validate-legacy
      • can-validate-validatejs
    • Typed Data
      • can-cid
      • can-construct
      • can-construct-super
      • can-data-types
      • can-namespace
      • can-reflect
      • can-reflect-dependencies
      • 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 queryLogic 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 memoryStore = require("can-memory-store");
var dataUrl = require("can-connect/data/url/url");
var cacheRequests = require("can-connect/cache-requests/cache-requests");
var queryLogic = require("can-query-logic");

var todoQueryLogic = new QueryLogic({});

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

Now if today's todos are loaded:

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

And later, a subset of those todos are loaded:

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

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

QueryLogic Usage

cache-requests will "fill-in" the cacheConnection using queryLogic.

For example, if you requested paginated data like:

todoConnection.getListData({filter: {status: "critical"}})

And then later requested:

todoConnection.getListData({})

cache-requests will only request {filter: {status: ["low","medium"]}}, merging that response with the data already present in the cache.

That configuration looks like:

var memoryStore = require("can-memory-store");
var dataUrl = require("can-connect/data/url/url");
var cacheRequests = require("can-connect/cache-requests/cache-requests");
var queryLogic = require("can-query-logic");

var todoQueryLogic = new QueryLogic({
  keys: {
    status: QueryLogic.makeEnum(["low","medium","critical"])
  }
});

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

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

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

On this page

Get help

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