pagespeed-quest
Version:
A framework for efficient web front-end speed improvement
73 lines • 7.55 kB
JavaScript
import Path from 'path';
import { defaultConfig, desktopConfig } from 'lighthouse';
function execSpecToCommandArgs(spec) {
const args = [];
// layout
if (spec.columns !== undefined)
args.push('-u', `layout.columns=${spec.columns}`);
// recording
if (spec.viewportWidth !== undefined)
args.push('-u', `recording.viewportWidth=${spec.viewportWidth}`);
if (spec.cpuThrottling !== undefined)
args.push('-u', `recording.cpuThrottling=${spec.cpuThrottling}`);
if (spec.networkLatencyMs !== undefined)
args.push('-u', `recording.network.latencyMs=${spec.networkLatencyMs}`);
if (spec.networkThroughputMbps !== undefined) {
args.push('-u', `recording.network.uploadThroughputMbps=${spec.networkThroughputMbps}`);
args.push('-u', `recording.network.downloadThroughputMbps=${spec.networkThroughputMbps}`);
}
if (spec.timeoutMs !== undefined)
args.push('-u', `recording.timeoutMs=${spec.timeoutMs}`);
if (spec.userAgent !== undefined)
args.push('-u', `recording.headers.User-Agent=${spec.userAgent}`);
// recording.puppeteer
const chromeArgs = ['--ignore-certificate-errors'];
if (spec.proxyPort !== undefined) {
chromeArgs.push(`--proxy-server=http://localhost:${spec.proxyPort}`);
}
args.push('-u', 'recording.puppeteer.args=' + chromeArgs.join(','));
// credit
if (spec.credit)
args.push('-u', `banner.vars.credit=${spec.credit}`);
return args;
}
export async function execLoadshow(input, dependency) {
const artifactsDir = input.artifactsDir || './artifacts';
const loadshowDir = Path.join(artifactsDir, 'loadshow');
const outputPath = Path.join(artifactsDir, 'loadshow.mp4');
await dependency.mkdirp(loadshowDir);
// By form factor
const lighthouseByDevice = input.deviceType === 'desktop' ? desktopConfig : defaultConfig;
const customByDevice = input.deviceType === 'desktop' ? { columns: 2 } : { columns: 3 };
// Basic spec
const userAgent = lighthouseByDevice.settings?.emulatedUserAgent;
const spec = {
proxyPort: input.proxyPort,
columns: customByDevice.columns,
viewportWidth: lighthouseByDevice.settings?.screenEmulation?.width,
cpuThrottling: lighthouseByDevice.settings?.throttling?.cpuSlowdownMultiplier,
userAgent: typeof userAgent === 'string' ? userAgent : undefined,
timeoutMs: input.timeout,
};
// Sync network conditions with Lighthouse
if (input.syncLighthouseSpec) {
if (lighthouseByDevice.settings?.throttling?.rttMs)
spec.networkLatencyMs = lighthouseByDevice.settings?.throttling?.rttMs;
if (lighthouseByDevice.settings?.throttling?.throughputKbps)
spec.networkThroughputMbps = lighthouseByDevice.settings?.throttling?.throughputKbps / 1024;
}
// No throttling
if (input.noThrottling) {
spec.networkLatencyMs = 0;
spec.networkThroughputMbps = 999999;
}
// Credit
spec.credit = input.credit;
const args = [];
args.push('record');
args.push('-a', loadshowDir);
args.push(...execSpecToCommandArgs(spec));
args.push(input.url, outputPath);
await dependency.executeLoadshow(args);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZHNob3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbG9hZHNob3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBRXZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBMkJ6RCxTQUFTLHFCQUFxQixDQUFDLElBQXNCO0lBQ25ELE1BQU0sSUFBSSxHQUFhLEVBQUUsQ0FBQTtJQUV6QixTQUFTO0lBQ1QsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVM7UUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxrQkFBa0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFFakYsWUFBWTtJQUNaLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTO1FBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsMkJBQTJCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBO0lBQ3RHLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTO1FBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsMkJBQTJCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBO0lBQ3RHLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLFNBQVM7UUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSwrQkFBK0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQTtJQUNoSCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxTQUFTLEVBQUU7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsMENBQTBDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUE7UUFDdkYsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsNENBQTRDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUE7S0FD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