Page MenuHomePhabricator

Consider performance improvements for headless VE
Closed, ResolvedPublic

Description

We want to reduce the resources used by headless VE.

Headless VE does not care about any rendering, so there are surely opportunities to optimise there:

  • Ensuring Special:EditCheckHeadless is completely blanks, and loads no CSS/images/content HTML
  • Disabling CSS and images in general
  • Disabling other Chrome features via flags

Related Objects

StatusSubtypeAssignedTask
OpenNone
OpenNone
OpenNone
Openppelberg
Openppelberg
OpenNone
ResolvedEsanders
Opendchan
OpenGGoncalves-WMF
Openppelberg
Openppelberg
OpenNone
OpenNone
Openppelberg
ResolvedOttomata
Openmedelius
DeclinedNone
Openbmartinezcalvo
ResolvedBUG REPORTmedelius
DuplicateNone
OpenNone
Resolvedcjming
OpenNone
OpenNone
OpenEsanders
OpenEsanders
ResolvedEsanders
OpenNone
Opendchan
Resolvedmpopov
OpenNone

Event Timeline

Gemini suggests:

'--disable-gpu',               // Disables GPU hardware acceleration
'--disable-software-rasterizer',// Prevents CPU from trying to mimic a GPU
'--disable-dev-shm-usage',     // Prevents resource crunch in Docker container /dev/shm
'--no-sandbox',                // Usually necessary in Linux server environments
// Disable Blink Features & Extensions:
'--disable-extensions',
'--disable-component-extensions-with-background-pages',
'--disable-background-networking',
'--disable-sync',
'--metrics-recording-only',
'--disable-default-apps',
'--mute-audio',
'--no-first-run'

Block unnecessary network resources

await page.setRequestInterception(true);
page.on('request', (req) => {
  const resourceType = req.resourceType();
  if (['image', 'stylesheet', 'font', 'media'].includes(resourceType)) {
    req.abort();
  } else {
    req.continue();
  }
});

I'm also now looking into using lightpanda.io. Early experiments are showing a 80-90% drop in CPU/memory usage which is very promising.

Aklapper renamed this task from Consider performance improvements fo headless VE to Consider performance improvements for headless VE.Jul 10 2026, 3:47 PM

Change #1309738 had a related patch set uploaded (by Esanders; author: Esanders):

[mediawiki/extensions/VisualEditor@master] EditCheckHeadless: Minimize resources loaded on special page

https://gerrit.wikimedia.org/r/1309738

Change #1309739 had a related patch set uploaded (by Esanders; author: Esanders):

[mediawiki/extensions/VisualEditor@master] EditCheckHeadless: Log cpu/memory usage

https://gerrit.wikimedia.org/r/1309739

Change #1309740 had a related patch set uploaded (by Esanders; author: Esanders):

[mediawiki/extensions/VisualEditor@master] EditCheckHeadless: Disable unnecessary Chrome features

https://gerrit.wikimedia.org/r/1309740

Change #1309741 had a related patch set uploaded (by Esanders; author: Esanders):

[mediawiki/extensions/VisualEditor@master] EditCheckHeadless: Use Lightpanda

https://gerrit.wikimedia.org/r/1309741

I'm also now looking into using lightpanda.io. Early experiments are showing a 80-90% drop in CPU/memory usage which is very promising.

Lightpanda does look interesting, but I think it comes with some new concerns as well:

  1. Lightpanda is not packaged in debian, so we would need to stay up on security issues ourselves, and possibly package it ourselves, i.e. it will entail a larger maintenance burden
  2. We would be much less confident in its security architecture compared to chrome, what is the risk of ingesting user controlled wikitext?
  3. Lightpanda is just a little over three years old, which is quite new for a browser engine. It has a much smaller ecosystem, making it harder to find help and debug issues.
  4. One selling point of deploying on headless Chrome was that the codebase would not need to be adapted to run server side, but Lightpanda is a different browser engine. How much ongoing work will there be to ensure code works in this new browser?
  5. Serviceops discussed running headless chrome as a service, that other services consume, e.g. Proton, but Lightpanda I presume would not fill the requirements for other applications?

Change #1309739 merged by jenkins-bot:

[mediawiki/extensions/VisualEditor@master] EditCheckHeadless: Log cpu/memory usage

https://gerrit.wikimedia.org/r/1309739

Change #1309741 merged by jenkins-bot:

[mediawiki/extensions/VisualEditor@master] EditCheckHeadless: Switch to Puppeteer and add Lightpanda as an engine

https://gerrit.wikimedia.org/r/1309741

Change #1309738 merged by jenkins-bot:

[mediawiki/extensions/VisualEditor@master] EditCheckHeadless: Minimize resources loaded on special page

https://gerrit.wikimedia.org/r/1309738

Change #1309740 merged by jenkins-bot:

[mediawiki/extensions/VisualEditor@master] EditCheckHeadless: Disable unnecessary Chrome features

https://gerrit.wikimedia.org/r/1309740