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