fix: add memory management to prevent heap overflow during large site builds

- Add periodic cache clearing every 50 pages during pMap processing
- Reduce build concurrency to max 10 to manage memory usage
- Add optional garbage collection calls when available
- Include progress logging for memory cleanup operations

Fixes #4833
pull/4955/head
LevTheSWag 5 days ago
parent fae8c3b89d
commit d207c977d9

@ -136,6 +136,11 @@ export async function build(
const usedIcons = new Set<string>() const usedIcons = new Set<string>()
// Memory management: track processed pages for periodic cleanup
let processedCount = 0
const totalPages = ['404.md', ...siteConfig.pages].length
const cleanupInterval = 50
await pMap( await pMap(
['404.md', ...siteConfig.pages], ['404.md', ...siteConfig.pages],
async (page) => { async (page) => {
@ -152,8 +157,22 @@ export async function build(
additionalHeadTags, additionalHeadTags,
usedIcons usedIcons
) )
// Memory management: periodic cache clearing and garbage collection
processedCount++
if (processedCount % cleanupInterval === 0) {
siteConfig.logger.info(
`Processed ${processedCount}/${totalPages} pages, clearing cache to manage memory...`
)
clearCache()
// Optional garbage collection hint
if (global.gc) {
global.gc()
}
}
}, },
{ concurrency: siteConfig.buildConcurrency } { concurrency: Math.min(10, siteConfig.buildConcurrency || 10) }
) )
const icons = require('@iconify-json/simple-icons/icons.json') const icons = require('@iconify-json/simple-icons/icons.json')

Loading…
Cancel
Save