From ebbdfe3f6378516112f4b6e004bbd6ccf13af685 Mon Sep 17 00:00:00 2001 From: Jef LeCompte Date: Sat, 19 Sep 2020 18:13:20 -0400 Subject: [PATCH] perf: browser abstraction (#68) (#81) Signed-off-by: Jef LeCompte --- src/index.ts | 6 +++++- src/store/lookup.ts | 8 ++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/index.ts b/src/index.ts index 57c4d4e..d5c6447 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,18 +3,22 @@ import {Stores} from './store/model'; import {Logger} from './logger'; import {sendNotification} from './notification'; import {lookup} from './store'; +import puppeteer from 'puppeteer'; /** * Starts the bot. */ async function main() { const results = []; + const browser = await puppeteer.launch(); + for (const store of Stores) { Logger.debug(store.links); - results.push(lookup(store)); + results.push(lookup(browser, store)); } await Promise.all(results); + await browser.close(); Logger.info('↗ trying stores again'); setTimeout(main, Config.rateLimitTimeout); diff --git a/src/store/lookup.ts b/src/store/lookup.ts index 3d85f2c..1459aaf 100644 --- a/src/store/lookup.ts +++ b/src/store/lookup.ts @@ -24,16 +24,16 @@ function filterBrand(brand: string) { * a `Store`. It's important that we ignore `no-await-in-loop` here * because we don't want to get rate limited within the same store. * + * @param browser Current browser in use. * @param store Vendor of graphics cards. */ -export async function lookup(store: Store) { +export async function lookup(browser: puppeteer.Browser, store: Store) { /* eslint-disable no-await-in-loop */ for (const link of store.links) { if (!filterBrand(link.brand)) { continue; } - const browser = await puppeteer.launch(); const page = await browser.newPage(); page.setDefaultNavigationTimeout(Config.page.navigationTimeout); await page.setUserAgent(Config.page.userAgent); @@ -48,7 +48,7 @@ export async function lookup(store: Store) { await page.goto(link.url, {waitUntil: 'networkidle0'}); } catch { Logger.error(`✖ [${store.name}] ${graphicsCard} skipping; timed out`); - await browser.close(); + await page.close(); continue; } @@ -79,7 +79,7 @@ export async function lookup(store: Store) { sendNotification(givenUrl); } - await browser.close(); + await page.close(); } /* eslint-enable no-await-in-loop */ }