[英]having puppeteer browser as global instance open at all time vs using new browser instance for each request
我的數據庫中有一些 web 地址,我需要檢查這些地址以獲取某些內容並相應地在數據庫中更新它們......我需要一遍又一遍地這樣做
這是我的代碼的簡化版本,我有兩個功能
1 - init
-> 從 db 讀取地址行,將地址傳遞給第二個 function 以檢查並更新 db 中該地址的結果
2 - check_address
-> 在瀏覽器中檢查該地址並返回結果
這是我的代碼的簡化版本
async function init()
{
try
{
let address = 'select * from addressess order by updated_at asc limit 1';
let result = await check_address(address);
await address.update({result : result });
}
catch(e){}
setTimeout( ()=> init() , 5000 );
}
async function check_address( address )
{
var browser = await puppeteer.launch();
let result = await 'open a tab , go to the address and cehck';
// close the browser
return result ;
}
init();
我覺得為每個地址打開和關閉瀏覽器非常耗費時間/資源,所以我想也許我可以一直打開一個全局瀏覽器,然后在瀏覽器中打開和關閉選項卡,或者甚至使用同一個選項卡...就像是
let globalBrowser = false ;
async function check_address( address )
{
if(!globalBrowser)
{
globalBrowser = await puppeteer.launch();
globalBrowser._process.once('close', () => {
globalBrowser = false;
});
}
let result = await 'open a tab , go to the address and cehck';
return result ;
}
但我不確定是否可以一直打開瀏覽器,或者這個流程通常是個好主意
我在 puppeteer 方面的經驗非常有限,我希望得到對長期運行 puppeteer 應用程序有更多經驗和知識的人的一些意見
確實,打開和關閉瀏覽器的性能很重。 如果您的腳本在服務器上運行,您可以最初打開瀏覽器並每隔 X 小時在check_adress
function 上執行一次 cron 作業(@package node-cron )。
您可以簡單地通過以下方式關閉當前頁面頁面,而不是關閉瀏覽器:
await page.close();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.