让 puppeteer 浏览器作为全局实例始终打开与为每个请求使用新的浏览器实例
having puppeteer browser as global instance open at all time vs using new browser instance for each request
我的数据库中有一些网址,我需要检查这些地址,并相应地在数据库中更新它们……我需要一遍又一遍地这样做
这是我的代码的简化版本,我有两个函数
1 - init
-> 从 db 读取地址行,将地址传递给第二个函数以检查并更新 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();
我觉得为每个地址打开和关闭浏览器非常 time/resource 消耗,所以我想也许我可以一直打开一个全局浏览器,只打开和关闭浏览器中的选项卡,甚至可能使用相同的选项卡...类似
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 的经验非常有限,我希望能从对 long 运行 puppeteer app
有更多经验和知识的人那里得到一些意见
确实,打开和关闭浏览器性能很重。如果您的脚本是 运行 在服务器上,您可以首先打开浏览器并每隔 X 小时在 check_adress
函数上执行一次 cron 作业 (@package node-cron)。
您可以通过以下方式关闭当前页面,而不是关闭浏览器:
await page.close();
我的数据库中有一些网址,我需要检查这些地址,并相应地在数据库中更新它们……我需要一遍又一遍地这样做
这是我的代码的简化版本,我有两个函数
1 - init
-> 从 db 读取地址行,将地址传递给第二个函数以检查并更新 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();
我觉得为每个地址打开和关闭浏览器非常 time/resource 消耗,所以我想也许我可以一直打开一个全局浏览器,只打开和关闭浏览器中的选项卡,甚至可能使用相同的选项卡...类似
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 的经验非常有限,我希望能从对 long 运行 puppeteer app
有更多经验和知识的人那里得到一些意见确实,打开和关闭浏览器性能很重。如果您的脚本是 运行 在服务器上,您可以首先打开浏览器并每隔 X 小时在 check_adress
函数上执行一次 cron 作业 (@package node-cron)。
您可以通过以下方式关闭当前页面,而不是关闭浏览器:
await page.close();