Rename variables for clarity and update browser pool management

This commit is contained in:
ImBenji
2025-12-31 18:34:14 +00:00
parent f876b01529
commit 78a598bf7f

View File

@@ -5,7 +5,7 @@ const VIEWPORT_WIDTH = 3240;
const VIEWPORT_HEIGHT = 3240; const VIEWPORT_HEIGHT = 3240;
let browsers = []; let browsers = [];
let availablePages = []; let availableBrowsers = [];
let initPromise = null; let initPromise = null;
@@ -22,42 +22,42 @@ async function initPool() {
}); });
browsers.push(browser); browsers.push(browser);
availableBrowsers.push(browser);
const page = await browser.newPage();
await page.setViewport({
width: VIEWPORT_WIDTH,
height: VIEWPORT_HEIGHT
});
availablePages.push(page);
} }
console.log(`Browser pool ready with ${POOL_SIZE} pages`); console.log(`Browser pool ready with ${POOL_SIZE} browsers`);
})(); })();
return initPromise; return initPromise;
} }
async function acquirePage() { async function acquireBrowser() {
await initPool(); await initPool();
// wait for available page // wait for available browser
while (availablePages.length === 0) { while (availableBrowsers.length === 0) {
await new Promise(resolve => setTimeout(resolve, 50)); await new Promise(resolve => setTimeout(resolve, 50));
} }
return availablePages.pop(); return availableBrowsers.pop();
} }
function releasePage(page) { function releaseBrowser(browser) {
availablePages.push(page); availableBrowsers.push(browser);
} }
// renders html and returns screenshot as buffer // renders html and returns screenshot as buffer
async function renderHtml(html, waitTime = 1000) { async function renderHtml(html, waitTime = 1000) {
const page = await acquirePage(); const browser = await acquireBrowser();
let page = null;
try { try {
page = await browser.newPage();
await page.setViewport({
width: VIEWPORT_WIDTH,
height: VIEWPORT_HEIGHT
});
await page.setContent(html, { waitUntil: 'networkidle0' }); await page.setContent(html, { waitUntil: 'networkidle0' });
// wait for any animations or laoding // wait for any animations or laoding
@@ -70,7 +70,8 @@ async function renderHtml(html, waitTime = 1000) {
return screenshot; return screenshot;
} finally { } finally {
releasePage(page); if (page) await page.close();
releaseBrowser(browser);
} }
} }
@@ -83,7 +84,7 @@ async function shutdownPool() {
} }
browsers = []; browsers = [];
availablePages = []; availableBrowsers = [];
initPromise = null; initPromise = null;
console.log('Browser pool shut down'); console.log('Browser pool shut down');