Keep native Chromium loading and prevent stale browser cache entries

This commit is contained in:
Jonathan Sykes
2026-10-08 09:43:51 +08:00
parent c4a512bea6
commit 57edb410c3
11 changed files with 179 additions and 23 deletions

View File

@@ -354,3 +354,6 @@ when diagnosing historical regressions.
Phase 6 counts its fetch-owned app.js response in initial JS/CSS bytes. Since the
bootstrap consumes that response asynchronously, DOMContentLoaded no longer means
app execution is complete; compare the existing actual boot-done landmark.
`--scenario warm,offline,update-js,update-css,update-feature` runs a regression
sweep without repeating an already-completed cold acceptance run.

View File

@@ -709,6 +709,8 @@ async function main() {
if (options.browser === 'all' || options.browser === 'chromium') browsers.push(pw.chromium);
if (options.browser === 'all' || options.browser === 'webkit') browsers.push(pw.webkit);
const requestedScenarios=new Set(options.scenario.split(','));
const wants=name=>requestedScenarios.has('all')||requestedScenarios.has(name);
const profiles = [];
if (options.profile === 'all' || options.profile === 'lte') profiles.push('lte');
if (options.profile === 'all' || options.profile === 'lossy') profiles.push('lossy');
@@ -773,7 +775,7 @@ async function main() {
console.log(`Proxy listening on port ${proxy.port} (mode: ${proxyProfile})`);
// 1. Cold Scenario
if (options.scenario === 'all' || options.scenario === 'cold') {
if (wants('cold')) {
console.log(` [Scenario: Cold Load] running ${options.runs} iterations...`);
const coldRuns = [];
for (let r = 0; r < options.runs; r++) {
@@ -781,7 +783,7 @@ async function main() {
const res = await runColdScenario({ browserType: bType, server, proxy, profile: prof });
if(options.assertCold)assertColdAssets(res.requests);
coldRuns.push(res);
console.log(`done (${res.wireBytes} bytes, ${res.requestCount} reqs, boot=${res.bootDone}ms)`);
console.log(`done (${res.wireBytes} bytes, ${res.requestCount} reqs, fcp=${res.fcp}ms, boot=${res.bootDone}ms)`);
}
results.browsers[bName][prof].cold = {
@@ -807,7 +809,7 @@ async function main() {
}
// 2. Warm Scenario
if (options.scenario === 'all' || options.scenario === 'warm') {
if (wants('warm')) {
console.log(` [Scenario: Warm Load] running ${options.runs} iterations...`);
const warmRuns = [];
for (let r = 0; r < options.runs; r++) {
@@ -829,7 +831,7 @@ async function main() {
}
// 3. Offline Scenario
if (options.scenario === 'all' || options.scenario === 'offline') {
if (wants('offline')) {
console.log(` [Scenario: Offline Reload] running ${options.runs} iterations...`);
const offRuns = [];
for (let r = 0; r < options.runs; r++) {
@@ -851,7 +853,7 @@ async function main() {
}
// 4. Update N -> N+1 (JS)
if (options.scenario === 'all' || options.scenario === 'update-js') {
if (wants('update-js')) {
console.log(` [Scenario: Update N->N+1 (1-line app.js)] running ${options.runs} iterations...`);
const updJsRuns = [];
for (let r = 0; r < options.runs; r++) {
@@ -878,7 +880,7 @@ async function main() {
}
// 5. Update N -> N+1 (CSS)
if (options.scenario === 'all' || options.scenario === 'update-css') {
if (wants('update-css')) {
console.log(` [Scenario: Update N->N+1 (1-line theme-glass.css)] running ${options.runs} iterations...`);
const updCssRuns = [];
for (let r = 0; r < options.runs; r++) {
@@ -906,7 +908,7 @@ async function main() {
};
}
if ((options.scenario === 'all' || options.scenario === 'update-feature') && existsSync(path.join(treeBase,'presenter.js'))) {
if ((wants('update-feature')) && existsSync(path.join(treeBase,'presenter.js'))) {
console.log(` [Scenario: Update split-out presenter, including idle cache fill] running ${options.runs} iterations...`);
const runs=[];
for(let r=0;r<options.runs;r++) {

View File

@@ -2,7 +2,7 @@
"results": [
{
"browser": "chromium",
"sourceBuildTag": "41a7ba2c29a3",
"sourceBuildTag": "562f4031bcb7",
"classicSharedDefaults": true,
"cssOrderPreserved": true,
"settingsSearch": true,
@@ -28,7 +28,7 @@
},
{
"browser": "webkit",
"sourceBuildTag": "41a7ba2c29a3",
"sourceBuildTag": "562f4031bcb7",
"classicSharedDefaults": true,
"cssOrderPreserved": true,
"settingsSearch": true,
@@ -56,7 +56,7 @@
"disconnected": true
},
{
"message": "/127.0.0.1:36117/api/version.",
"message": "/127.0.0.1:33967/api/version.",
"disconnected": true
},
{
@@ -64,7 +64,7 @@
"disconnected": true
},
{
"message": "/127.0.0.1:36117/api/recommendations?fp=163577c02a53bc40.",
"message": "/127.0.0.1:33967/api/recommendations?fp=163577c02a53bc40.",
"disconnected": true
},
{
@@ -72,7 +72,7 @@
"disconnected": true
},
{
"message": "/127.0.0.1:36117/api/version.",
"message": "/127.0.0.1:33967/api/version.",
"disconnected": true
},
{
@@ -80,7 +80,7 @@
"disconnected": true
},
{
"message": "/127.0.0.1:36117/api/recommendations?fp=163577c02a53bc40.",
"message": "/127.0.0.1:33967/api/recommendations?fp=163577c02a53bc40.",
"disconnected": true
},
{
@@ -88,7 +88,7 @@
"disconnected": true
},
{
"message": "/127.0.0.1:36117/api/version.",
"message": "/127.0.0.1:33967/api/version.",
"disconnected": true
}
]

View File

@@ -0,0 +1,101 @@
{
"date": "2026-10-08T01:29:49.903Z",
"frontendCommit": null,
"sourceRoot": null,
"sourceCommit": "c4a512bea63da4c9c875501038727768080496c1",
"frontendBuildTag": "5fe61861d759",
"commit": "c4a512bea63da4c9c875501038727768080496c1",
"runsConfigured": 5,
"browsers": {
"chromium": {
"lte": {
"warm": {
"requestCount": {
"median": 4,
"min": 3,
"max": 5,
"values": [
5,
4,
3,
4,
3
]
},
"wireBytes": {
"median": 7869,
"min": 97,
"max": 7869,
"values": [
7869,
7869,
97,
7869,
7858
]
},
"fcp": {
"median": 140,
"min": 120,
"max": 152,
"values": [
152,
148,
120,
120,
140
]
},
"lcp": {
"median": 148,
"min": 140,
"max": 156,
"values": [
152,
148,
148,
156,
140
]
},
"domContentLoaded": {
"median": 398,
"min": 391,
"max": 406,
"values": [
404,
398,
396,
406,
391
]
},
"bootDone": {
"median": 414,
"min": 411,
"max": 420,
"values": [
418,
414,
411,
420,
412
]
},
"longTaskTotal": {
"median": 62,
"min": 57,
"max": 65,
"values": [
65,
59,
63,
57,
62
]
}
}
}
}
}
}