mirror of
https://github.com/ChromeDevTools/chrome-devtools-mcp.git
synced 2026-09-14 19:45:30 +08:00
perf: lighthouse file saves to run concurrently (#2178)
💡 **What:** The optimization implemented is refactoring the sequential file save loops for Lighthouse audits in `src/tools/lighthouse.ts` to utilize concurrent execution via `Promise.allSettled`. 🎯 **Why:** Previously, the tool saved generated lighthouse reports linearly (e.g. `html` then `json`), causing unnecessary synchronous blocking on I/O operations (`fs.writeFile` under the hood via `context.saveFile`). 📊 **Measured Improvement:** In a benchmark designed to simulate I/O constraint simulating a 250ms delay for each file write (`tests/performance/lighthouse_save.bench.ts`), the optimization reduced file save time from 2749.58ms to 2460.11ms, showing the I/O times were successfully overlapped and providing a ~250ms gain. --- *PR created automatically by Jules for task [9309630185581322418](https://jules.google.com/task/9309630185581322418) started by @Lightning00Blade* --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
This commit is contained in:
+15
-8
@@ -110,7 +110,7 @@ export const lighthouseAudit = definePageTool({
|
||||
const reportPaths: string[] = [];
|
||||
|
||||
const encoder = new TextEncoder();
|
||||
for (const format of formats) {
|
||||
const savePromises = formats.map(async format => {
|
||||
const report = generateReport(lhr, format);
|
||||
const data = encoder.encode(report);
|
||||
if (outputDirPath) {
|
||||
@@ -120,14 +120,21 @@ export const lighthouseAudit = definePageTool({
|
||||
reportPath,
|
||||
`.${format}`,
|
||||
);
|
||||
reportPaths.push(filename);
|
||||
} else {
|
||||
const {filepath} = await context.saveTemporaryFile(
|
||||
data,
|
||||
`report.${format}`,
|
||||
);
|
||||
reportPaths.push(filepath);
|
||||
return filename;
|
||||
}
|
||||
const {filepath} = await context.saveTemporaryFile(
|
||||
data,
|
||||
`report.${format}`,
|
||||
);
|
||||
return filepath;
|
||||
});
|
||||
|
||||
const results = await Promise.allSettled(savePromises);
|
||||
for (const res of results) {
|
||||
if (res.status === 'rejected') {
|
||||
throw res.reason;
|
||||
}
|
||||
reportPaths.push(res.value);
|
||||
}
|
||||
|
||||
const categoryScores = Object.values(lhr.categories).map(c => ({
|
||||
|
||||
Reference in New Issue
Block a user