簡體   English   中英

始終打開 puppeteer 瀏覽器作為全局實例與為每個請求使用新的瀏覽器實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM