Caches: Caches.match
Thanks so much for reading! If you want to learn everything you need to know about service workers, head over to serviceworkerbook.com and order my book, “Let’s Take This Offline”! Be sure to use caches-match
for 10% off!
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);
}())
Thanks so much for reading! If you liked this post, you should head on over to serviceworkerbook.com and buy my book! Be sure to use caches-match
for 10% off!