diff --git a/browserPool.js b/browserPool.js index e813834..d068889 100644 --- a/browserPool.js +++ b/browserPool.js @@ -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');