Using Chrome with `--headless` switch to measure user page load times
This seems to be ok-ish. Taking a screenshot shows the page seems to be loaded and getting similar results between the first and subsequent requests, so I'm assuming caching is indeed disabled.
time chromium \ --headless \ --disk-cache-dir=/dev/null \ --disable-gpu \ --download-whole-document \ --deterministic-fetch \ https://www.stackoverflow.com
Notes
- this doesn't warm up the DNS entries on the initial request, so it'd probably be best to discard the first result
- the
--disable-gpu
flag isn't necessary, but there is a reported error with the current build - opening up a remote debugging port could probably be useful to remove references to 3rd party sources that skew results or to have more control over what's considered a fully loaded page, say wait for some scripts to fetch additional resources, but it's a bit way over my head
I'm the author of Navalia, which is a higher abstraction over headless Chrome for node/TypeScript. You could easily do this with something like:
const Navalia = require('navalia')const navalia = new Navalia({ numInstances: 1, verbose: true,})navalia.startup()navalia.register(async chrome => { const start = Date.now() await chrome.navigate('http://www.cnn.com/') console.log(`Total time to load page ${Date.now() - start}ms`)})
If there are more features you would like, then feel free to make a ticket. One of the goals is abstracting away the pain of the Chrome switches + the CDP protocol.