]> git.ardis.lu - ardislu.dev/commitdiff
Implement stale-while-revalidate caching on edge
authorArdis Lu <ardisglu@gmail.com>
Mon, 10 Jun 2024 06:09:58 +0000 (23:09 -0700)
committerArdis Lu <ardisglu@gmail.com>
Mon, 10 Jun 2024 06:09:58 +0000 (23:09 -0700)
functions/api.js

index 572a11634a37a93a307776173c211da486f897b5..a9c4e616c2ada44286cdbbe5a6c8978bab0abc7f 100644 (file)
@@ -1,6 +1,6 @@
 import { getGoogleAuthToken } from './auth.js';
 
-export async function onRequestGet({ request, env }) {
+export async function onRequestGet({ request, env, waitUntil }) {
   const url = new URL(request.url);
   const queryUrl = new URL(decodeURIComponent(url.search.substring(1)));
 
@@ -10,6 +10,15 @@ export async function onRequestGet({ request, env }) {
   }
 
   const token = await getGoogleAuthToken(env.EMAIL, env.PRIVATE_KEY, 'https://www.googleapis.com/auth/spreadsheets.readonly https://www.googleapis.com/auth/documents.readonly');
-
-  return fetch(queryUrl, { headers: { Authorization: `Bearer ${token}` } });
+  const responsePromise = fetch(queryUrl, { headers: { Authorization: `Bearer ${token}` } });
+  const cachedResponse = await caches.default.match(queryUrl);
+  if (cachedResponse) {
+    waitUntil(responsePromise.then(response => caches.default.put(queryUrl, response)));
+    return cachedResponse;
+  }
+  else {
+    const response = await responsePromise;
+    waitUntil(caches.default.put(queryUrl, response.clone()));
+    return response;
+  }
 }
This page took 0.038218 seconds and 4 git commands to generate.