node.js - 如何测试单个脚本对网站的性能影响?
问题描述
我试图了解添加到网页的附加脚本的影响。
我的第一次尝试是使用 lighthouse,并尝试在添加脚本之前和之后计算指标:
const fs = require('fs');
const playwright = require('playwright');
const lighthouse = require('lighthouse');
const args = require('minimist')(process.argv.slice(2));
const BROWSER_CONTEXT_DIR = 'browserContextDir';
async function main(inject) {
const context = await playwright.chromium.launchPersistentContext(BROWSER_CONTEXT_DIR, {
args: [`--remote-debugging-port=8041`],
headless: false,
});
if (inject){
await context.addInitScript({
path: 'script.js'
})
}
const lhOptions = {
port: 8041,
onlyCategories: ['performance']
};
const result = await lighthouse(args.url, lhOptions);
fs.writeFileSync('lhreport.json', JSON.stringify(result.lhr.audits, null, 2));
await context.close();
fs.rmdirSync(BROWSER_CONTEXT_DIR, { recursive: true });
return {
speed: result.lhr.audits['speed-index'],
cpu: result.lhr.audits['first-cpu-idle'],
blocking: result.lhr.audits['total-blocking-time']
}
}
虽然这有效,但每次运行灯塔的结果差异太大。似乎正确的方法是单独执行此操作,而不是通过注入实时站点。
我可以采取哪些方法来衡量第三方脚本对 CPU、内存和站点速度的影响?
解决方案
您可以使用WebPageTest运行测试,一次阻止一个第三方脚本并重新运行测试。您可以指定要阻止的脚本/sAdvanced Settings > Block
Harry Roberts (csswizardry)有一个精彩的演讲,准确地描述了该做什么。特别是,在 16' 左右描述了使用 WebPageTest 进行的分析。
推荐阅读
- mysql - MySQL经常崩溃
- java - Hibernate - 如何删除关联表中的冗余列
- java - Eclipse sts IDE中有没有办法从文件中批量加载许多环境变量
- r - 当时间序列在行而不是列中时绘图 - 使用 R
- scala - Scala Logging: is LazyLogging blocking or non-blocking?
- java - Selenium driver.findElement 找到元素,sendKeys 工作,然后在移动到新字段时为空
- python - 用于清理数据集的 Pandas 布尔语句
- python - 如何压缩矩阵以避免内存错误?
- spring-boot - 带有 Spring Boot 的 CORS - 将 GET 请求限制到某些域
- java - 将 2 个 Java 变量简化为一个