Caches: Caches.match
Arguably, the biggest part of service workers is being able to fetch data off of a user’s machine, rather than making trips across the network. There’s a variety of reasons reaching over the network isn’t ideal – lack of connection, intermittent connection, speed of the network. Fortunately service workers help with all of these things.
In this post, we’ll look at caches.match
– the function to fetch data from a service worker.
There are two matching methods within the Cache API – caches.match
and cache.matchAll
.
While caches.match
requires at least one parameter, cache.matchAll
has no required parameters. First, let’s dig into cache.matchAll
.
cache.matchAll
can only be run on a single cache. It has two optional parameters – request and options.
(async function() {
var cache = await caches.open(cacheName);
var rez = await cache.matchAll(request);
}())
If the cache contained a key-value pair matching that request, the associated response would be returned. If there were no match, rez
will be undefined.
The steps look like this:
1. Check that the request exists as a key in the list
2. If it does, add it to a response list
3. Return list of responses
Source: Service worker spec
You can call cache.matchAll
without a request, and it will return all the responses in the specified cache.
So what’s the difference between caches.match
and cache.matchAll
?
caches.match
must be run with a request parameter. Additionally it’ll check over each and every cache in the app. It might look like this:
(async function() {
var rez = await caches.match(request);
}())
Unfortunately checking over each cache can result in it being a little slow, especially if there are multiple caches created for an app. It can be better to specify a cache and search it specifically, or even only have only a single cache. That would look really similar to our code up above with matchAll
.
(async function() {
var cache = await caches.open(cacheName);
var rez = await cache.match(request);
}())