You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改代码实现PostgreSQL结果中URL的同步Lighthouse测试

解决方案

要让Lighthouse测试串行执行(完成一个再跑下一个),需要修改两处核心逻辑:

1. 修正Chrome启动参数的错误配置

原代码中launchChromeAndRunLighthouse函数的flags处理不符合chromeLauncher.launch的参数规范,会导致运行异常。需要把Chrome启动参数放到配置对象的args字段中。

2. 把并发循环改成串行异步循环

原循环会一次性发起所有Lighthouse测试调用,导致并发。需要在循环中使用await等待每个测试完成后再执行下一个。

修改后的完整代码

var objectsFromPg = lighthouse.getRecordsFromPg();

// 将回调改为async函数,支持内部使用await
objectsFromPg.then(async pgResults => {
    // 使用for...of循环配合await实现串行执行
    for (const row of pgResults.rows) {
        await lighthouse.launchChromeAndRunLighthouse(row.url);
    }
})

launchChromeAndRunLighthouse: async function(url, flags = {}, config = null){
    console.log("running lighthouse test for ", url);
    // 修正Chrome启动参数格式:使用配置对象,args字段传启动参数
    const chromeConfig = {
        args: [
            '--headless',
            '--allow-running-insecure-content',
            '--enable-automation'
        ]
    };
        
    const chrome = await chromeLauncher.launch(chromeConfig);
    // 给Lighthouse的flags添加端口配置
    const lighthouseFlags = {
        ...flags,
        port: chrome.port
    };
    const results = await lighthouse(url, lighthouseFlags, config);
    await chrome.kill();
    return results;
}

关键修改说明

  • 串行循环:把原来的普通for循环换成for...of,并在调用launchChromeAndRunLighthouse前加await,这样每次都会等待当前测试完全结束(包括Chrome进程关闭)后,才会启动下一个URL的测试。
  • 修正Chrome启动配置:原代码直接把数组传给chromeLauncher.launch是错误的,改为传递包含args字段的配置对象,同时分离Chrome启动配置和Lighthouse的flags,避免变量混淆。
  • 简化异步逻辑:把原代码中嵌套的.then改成await写法,让代码更易读,同时确保每一步异步操作都按顺序完成。

内容的提问来源于stack exchange,提问作者Gerg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 01:39:40