perf: skip unfurl prefetch when no new interaction URLs (manifest cache)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+24
-1
@@ -1457,10 +1457,28 @@ export default function (eleventyConfig) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Manifest skip: only prefetch URLs not seen in previous builds.
|
||||||
|
// prefetchUrl() already caches responses on disk; re-calling it for known URLs
|
||||||
|
// is pure overhead. Writing [...urls] (not [...seen, ...newUrls]) intentionally
|
||||||
|
// prunes URLs from soft-deleted posts, preventing unbounded manifest growth.
|
||||||
|
const manifestPath = resolve(__dirname, ".cache", "unfurl-manifest.json");
|
||||||
|
let seen = new Set();
|
||||||
|
try {
|
||||||
|
seen = new Set(JSON.parse(readFileSync(manifestPath, "utf-8")));
|
||||||
|
} catch { /* first build or corrupted manifest — full prefetch */ }
|
||||||
|
|
||||||
|
const newUrls = [...urls].filter(u => !seen.has(u));
|
||||||
|
|
||||||
|
if (newUrls.length === 0) {
|
||||||
|
console.log("[unfurl] No new URLs — skipping prefetch");
|
||||||
|
console.timeEnd("[unfurl] prefetch");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Free parsed markdown content before starting network-heavy prefetch
|
// Free parsed markdown content before starting network-heavy prefetch
|
||||||
if (typeof global.gc === "function") global.gc();
|
if (typeof global.gc === "function") global.gc();
|
||||||
|
|
||||||
const urlArray = [...urls];
|
const urlArray = newUrls;
|
||||||
const UNFURL_BATCH = 50;
|
const UNFURL_BATCH = 50;
|
||||||
const totalBatches = Math.ceil(urlArray.length / UNFURL_BATCH);
|
const totalBatches = Math.ceil(urlArray.length / UNFURL_BATCH);
|
||||||
console.log(`[unfurl] Pre-fetching ${urlArray.length} interaction URLs (${totalBatches} batches of ${UNFURL_BATCH})...`);
|
console.log(`[unfurl] Pre-fetching ${urlArray.length} interaction URLs (${totalBatches} batches of ${UNFURL_BATCH})...`);
|
||||||
@@ -1477,6 +1495,11 @@ export default function (eleventyConfig) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log(`[unfurl] Pre-fetch complete.`);
|
console.log(`[unfurl] Pre-fetch complete.`);
|
||||||
|
|
||||||
|
// Update manifest with full current URL set
|
||||||
|
mkdirSync(resolve(__dirname, ".cache"), { recursive: true });
|
||||||
|
writeFileSync(manifestPath, JSON.stringify([...urls]));
|
||||||
|
|
||||||
console.timeEnd("[unfurl] prefetch");
|
console.timeEnd("[unfurl] prefetch");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user