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;
|
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');
|
||||||
|
|||||||
Reference in New Issue
Block a user