Rename variables for clarity and update browser pool management
This commit is contained in:
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user