From a5e799b16e24cd56f9f98e65d6887600349c1837 Mon Sep 17 00:00:00 2001 From: Andrew Jones Date: Tue, 9 May 2023 22:18:01 -0400 Subject: [PATCH] Use parallel fetches for sitemap requests and remove duplicate /search url (#1004) Co-authored-by: Andrew Jones Co-authored-by: Lee Robinson --- app/sitemap.ts | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/app/sitemap.ts b/app/sitemap.ts index 1a0fd8232..d8cdfd2ea 100644 --- a/app/sitemap.ts +++ b/app/sitemap.ts @@ -6,28 +6,35 @@ const baseUrl = process.env.NEXT_PUBLIC_VERCEL_URL : 'http://localhost:3000'; export default async function sitemap(): Promise>> { - const routesMap = ['', '/search'].map((route) => ({ + const routesMap = [''].map((route) => ({ url: `${baseUrl}${route}`, lastModified: new Date().toISOString() })); - const collections = await getCollections(); - const collectionsMap = collections.map((collection) => ({ - url: `${baseUrl}${collection.path}`, - lastModified: collection.updatedAt - })); + const collectionsPromise = getCollections().then((collections) => + collections.map((collection) => ({ + url: `${baseUrl}${collection.path}`, + lastModified: collection.updatedAt + })) + ); - const products = await getProducts({}); - const productsMap = products.map((product) => ({ - url: `${baseUrl}/product/${product.handle}`, - lastModified: product.updatedAt - })); + const productsPromise = getProducts({}).then((products) => + products.map((product) => ({ + url: `${baseUrl}/product/${product.handle}`, + lastModified: product.updatedAt + })) + ); - const pages = await getPages(); - const pagesMap = pages.map((page) => ({ - url: `${baseUrl}/${page.handle}`, - lastModified: page.updatedAt - })); + const pagesPromise = getPages().then((pages) => + pages.map((page) => ({ + url: `${baseUrl}/${page.handle}`, + lastModified: page.updatedAt + })) + ); - return [...routesMap, ...collectionsMap, ...productsMap, ...pagesMap]; + const fetchedRoutes = ( + await Promise.all([collectionsPromise, productsPromise, pagesPromise]) + ).flat(); + + return [...routesMap, ...fetchedRoutes]; }