Run 2 summary

https://query.wikidata.org/querybuilder/

Tested 2026-09-20 10:18:49 using Chrome 152.0.7977.64 (runtime settings)

SummaryWaterfallMetricsRenderingCoachPageXrayCPU

Summary

Google Web Vitals

395 msTTFB
464 msLargest Contentful Paint
0.000Cumulative Layout Shift

Loading

464 msFirst Paint
703 msFully Loaded

Page weight & requests

14.1 KBTotal transfer size
20.2 KBTotal content size
3Requests

Visual progress

466 msFirst Visual Change
469 msSpeed Index
466 msVisual Complete 85%
633 msVisual Complete 99%
633 msLast Visual Change
Screenshot
Run 2 · after page complete

Waterfall

First paintFCPLCPDOMContentLoadedDOM interactiveLoadRender-blockingRedirectError

Rendering

Run 2
0.000 s
0s0.5s
Download video

Filmstrip

4 frames

Use --filmstrip.showAll to show all filmstrips.

Frame at 0 ms
0 ms
0 %
Frame at 500 ms
500 ms
98 %
Frame at 600 ms
600 ms
98 %
Frame at 700 ms
700 ms
100 %

Click a frame to seek the video to that moment. The dot marks frames where the page changed visually.

Visual instability

2.46 % of pixels ever changed · 0 % changed 5+ times
Heatmap of how often each pixel changed while the page loaded

The whole recording in one image: every pixel is tinted by how often it changed. Amber changed once, deep red changed ten or more times. The scale is fixed, so heatmaps from different runs compare directly.

Flat amber is a page that painted once and stayed put. Red speckle in the shape of the text means the same pixels repainted over and over, usually invisible rendering noise that inflates Last Visual Change and Speed Index. A solid red block is a genuinely restless area, like an ad or a carousel.

Frames

How smoothly Chrome delivered frames to the screen during the test. Dropped counts only frames Chrome flags as affecting smoothness. On mostly-static pages the longest gap includes idle time where there was simply nothing to draw.

Frames shown5
Partial0
Dropped0
Effective FPS6.6
Longest gap450 msat 9 ms

Why was rendering delayed?

Rendering was not meaningfully delayed. First paint landed at 464 ms on a 395 ms first byte.

Style recalculation

measured by Chrome during this run

Style the browser had to recalculate before it could paint: many elements or a lot of time spent here points at expensive CSS on the critical rendering path. The recalculation count and the largest single one tell the two problems apart: one massive style change touching most of the page (few recalculations, the largest close to the total) needs different medicine than thousands of tiny ones (many recalculations, each tiny).

Style recalculation is not holding up your paint. 1 ms of restyling before the page painted, 0.2 % of the time to First Contentful Paint. Nothing here needs attention.

Before first & largest contentful paint (same paint, 464 ms)

Recalculations3
Elements26
Total time0.794 ms
Largest recalculation26 elements · 0.739 ms

The recalculation work before first paint is 0.2 % of the time to First Contentful Paint.

Style invalidations

Why the browser had to recalculate style and layout: every DOM/style change invalidates some set of nodes, and the same class or attribute churning over and over is the pattern to hunt. Counts, not milliseconds: the time is in the style recalculation numbers above.

Most of this is the page being built. Only 0 style recalculations and 0 layout invalidations happened after first paint; the rest is the first render. Not much to chase here.

Style recalculations30 after first paint
Layout invalidations360 after first paint

Invalidation reasons

split at first paint

Before first paint: building the page

The page being constructed and styled for the first render. Expected work, shown for scale.

ReasonStyle recalculationsLayout
A node was inserted into the page2
PlatformColorChange1
An element entered layout32
An element left layout3
Scrollbar changed1

Coach

The coach helps you find performance problems on your web page using web performance best practice rules. And gives you advice on privacy and best practices. Tested using Coach-core version 9.2.1.

Performance advice

96
1 error2 warnings2 info
infoAdd decoding="async" to non-critical imagesdecodingAsync

The page has 1 image (out of 1) without a decoding hint. Add decoding="async" to non-critical images so the browser can decode them off the main thread.

Setting decoding="async" on an <img> tells the browser it can decode the image off the main thread, which keeps the page responsive to user interactions while images are being processed. The default ("auto") leaves the choice to the browser. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#decoding

Offenders
warn(0)Serve images in modern formats (AVIF, WebP)modernImageFormats

The page ships 1 image (out of 1) in JPEG/PNG/GIF without a modern alternative. Wrap them in a <picture> with a <source type="image/avif"> or "image/webp" before the legacy <img>, or serve modern formats from your image pipeline directly. AVIF and WebP usually deliver 25–50% smaller files at the same quality.

AVIF and WebP routinely deliver 25–50% smaller files than JPEG and PNG at the same perceived quality, and every browser version still under support understands at least one of them. Ship modern formats either through a <picture> element with <source type="image/avif"> / "image/webp" entries in front of the legacy <img>, or directly from a content-negotiating image pipeline that returns AVIF / WebP when the client accepts it. https://web.dev/articles/serve-images-webp

Offenders
warn(90)Always compress text contentcompressAssets

The page has 1 request that are served uncompressed. You could save a lot of bytes by sending them compressed instead.

In the early days of the Internet there were browsers that didn't support compressing (gzipping) text content. They do now. Make sure you compress HTML, JSON, JavaScript, CSS and SVG. It will save bytes for the user; making the page load faster and use less bandwith.

Offenders
URLTransferContent
https://query.wikidata.org/querybuilder/2.9 KB2.3 KB
error(90)Avoid missing and error requestsresponseOk

The page has 1 error response. The page has 1 response with code 403.

Your page should never request assets that return a 400 or 500 error. These requests are never cached. If that happens something is broken. Please fix it.

Offenders
infoLong cache headers is goodcacheHeadersLong

The page has 1 request that have a shorter cache time than one year (but still a cache time).

Setting a cache header is good. Setting a long cache header (a year) is even better because the asset will stay in the browser cache across visits. For content-hashed URLs (e.g. app.4af2.css) you can safely use Cache-Control: max-age=31536000, immutable. For unversioned URLs that may change, use a revalidating strategy instead.

Offenders

Best practice advice

72
2 warnings3 info
infoMeta descriptionmetaDescription

The page is missing a meta description.

Use a page description to make the page more relevant to search engines.

warn(0)Set a sensible viewport meta tagviewport

The page is missing a viewport meta tag. Add <meta name="viewport" content="width=device-width, initial-scale=1"> so the browser lays the page out at the device width.

The viewport meta tag tells the browser how to lay out the page on small screens. Without it (or without width=device-width) the page is rendered at a desktop fallback width and scaled down, which makes text unreadable on mobile. Disabling zoom (user-scalable=no, maximum-scale<=1) is also an accessibility regression. https://developer.mozilla.org/en-US/docs/Web/HTML/Viewport_meta_tag

warn(50)Avoid too many third party requeststhirdParty

The page do 33% requests to third party domains (1 requests and 4.5 kB). First party is 2 requests and 10 kB. The regex .*wikidata.* was used to calculate first/third party requests.

Do not load most of your content from third party URLs.

infoAvoid unnecessary headersunnecessaryHeaders

There are 1 response that sets both a max-age and expires header. There are 3 responses that sets a server header.

Do not send headers that you don't need. We look for p3p, cache-control and max-age, pragma, server and x-frame-options headers. Have a look at Andrew Betts - Headers for Hackers talk as a guide https://www.youtube.com/watch?v=k92ZbrY815c or read https://www.fastly.com/blog/headers-we-dont-want.

Offenders
infoDo not send too long headerslongHeaders

https://query.wikidata.org/favicon.ico has a header content-security-policy-report-only that is 872 characters long.

Do not send response headers that are too long.

Offenders

Privacy advice

73
7 warnings2 info
warn(0)Declare a referrer policy on the documentreferrerPolicy

No <meta name="referrer"> tag was found on the page. Set a Referrer-Policy response header (preferred) or add a meta tag, for example <meta name="referrer" content="strict-origin-when-cross-origin">.

Without an explicit referrer policy the browser falls back to the user-agent default and may leak the full URL of the previous page (including query strings) to every cross-origin request. Set a Referrer-Policy response header (preferred) or a <meta name="referrer"> tag in the document. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy

warn(0)Use a strict Content-Security-Policy header to mitigate cross-site scripting (XSS) attacks.contentSecurityPolicyHeader

Set a Content-Security-Policy header to mitigate cross-site scripting attacks. You can start with a Content-Security-Policy-Report-Only header, which only reports violations rather than blocking them.

A Content-Security-Policy response header tells the browser which sources of script, style, and other content are allowed. The most effective form is a strict CSP using nonces or hashes together with strict-dynamic; the worst is a missing header, with unsafe-inline and unsafe-eval close behind. https://web.dev/articles/strict-csp

Offenders
infoSet a Cross-Origin-Embedder-Policy header so cross-origin subresources opt in to being embedded.crossOriginEmbedderPolicyHeader

Set a Cross-Origin-Embedder-Policy header (typically require-corp or credentialless) on the document response to control cross-origin embedding.

Cross-Origin-Embedder-Policy (COEP) makes the page refuse to load cross-origin subresources unless they explicitly opt in via CORP or CORS. Together with Cross-Origin-Opener-Policy it puts the page in a cross-origin isolated context, which mitigates cross-window side-channel attacks (Spectre) and unlocks high-resolution timers and SharedArrayBuffer. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy

Offenders
warn(0)Set a Cross-Origin-Opener-Policy header to isolate the page from cross-origin windows.crossOriginOpenerPolicyHeader

Set a Cross-Origin-Opener-Policy header (typically same-origin) on the document response to isolate the page from cross-origin windows.

Cross-Origin-Opener-Policy (COOP) lets a page sever its window-group ties to cross-origin documents that opened it or that it opens. Together with Cross-Origin-Embedder-Policy it puts the page in a cross-origin isolated context, which mitigates cross-window side-channel attacks (Spectre) and unlocks high-resolution timers and SharedArrayBuffer. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy

Offenders
infoSet a Cross-Origin-Resource-Policy header to limit who may embed the page.crossOriginResourcePolicyHeader

Set a Cross-Origin-Resource-Policy header (same-origin, same-site or cross-origin) on the document response to limit who may embed it.

Cross-Origin-Resource-Policy (CORP) is a per-response opt-in that tells the browser which origins are allowed to embed the resource. It blocks cross-origin or cross-site no-cors embedding (img, script, iframe, etc.) and is one of the building blocks of cross-origin isolation. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Resource-Policy

Offenders
warn(0)Set a Permissions-Policy header to control which browser features the page can use.permissionsPolicyHeader

Set a Permissions-Policy header to control which browser features the page can use.

The Permissions-Policy response header (the successor to Feature-Policy) lets a site explicitly opt in or out of powerful browser features such as camera, microphone, geolocation, payment and clipboard. Setting a strict policy reduces the attack surface and limits what embedded third parties can do. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Permissions-Policy

Offenders
warn(0)Set a referrer-policy header to make sure you do not leak user information.referrerPolicyHeader

Set a referrer-policy header to make sure you do not leak user information.

Referrer Policy is a new header that allows a site to control how much information the browser includes with navigations away from a document and should be set by all sites. https://scotthelme.co.uk/a-new-security-header-referrer-policy/.

Offenders
warn(0)Set X-Content-Type-Options: nosniff to stop the browser from MIME-sniffing the response.xContentTypeOptionsHeader

Set X-Content-Type-Options: nosniff on the document response to prevent MIME-sniffing.

X-Content-Type-Options: nosniff prevents browsers from interpreting files as a different MIME type than what is declared in the Content-Type header. This blocks a class of cross-site scripting and content-type confusion attacks and should be set on every response. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options

Offenders
warn(90)Avoid third party cookies that is used to track the user.thirdPartyCookies

The page sets 1 third party cookie.

Third party cookies are used to track the user. They are automatically blocked in Safari and Firefox.

Offenders
  • .wikimedia.org NetworkProbeLimit=0.001

Page info

A snapshot of what the browser actually built for this page: the document, how big and deep the DOM tree is and what it kept in storage. Big, deep trees are slower to style and lay out, so the counts Chrome warns about carry a flag.

Page info

Document

What the page says it is and how large it rendered.

TitleWikimedia ErrorThe document title, shown in the browser tab and used by search results.
Layout viewport1919 × 992 pxThe width the page laid out at, and the full height of the rendered document.

DOM structure

How much markup the browser has to build, style and lay out.

DOM elements25Total HTML elements. Fewer means less for the browser to style, lay out and paint.
Avg DOM depth4How deeply elements are nested on average.
Max DOM depth6The deepest nesting on the page. Deep branches cost more style recalculation.
Iframes0No embedded documents on this page.
Script tags0Number of script elements. More scripts usually means more main-thread work.

Storage and connection

What the page stored on the client, and the network it was tested on.

Local storage0 bData the page saved in localStorage, kept across visits.
Session storage0 bData kept in sessionStorage for this tab session only.
Connection type4GWhat the Network Information API reported for the test connection.

Technologies used to build the page

Data collected using Coach-core version 9.2.1. With updated code from Webappanalyzer 2026-05-04. Use --browsertime.firefox.includeResponseBodies html or --browsertime.chrome.includeResponseBodies html to help Wappalyzer find more information about technologies used.

Detected technologies

3 technologies

Visual Metrics

Visual milestones

all times from navigation start
Speed Index0.47 show quickly the page looked done
First Visual Change0.47 sfirst paint reaches the screen
Last Visual Change0.63 sscreen stops changing · 0.17 s after first
nothing painted yet
≥95% rendered
First Visual Change · Visual Complete 85% · Visual Complete 95%0.47 s
Visual Complete 99% · Last Visual Change0.63 s
Visual Readiness0.17 s· first to last change
00.2 s0.4 s0.6 s
Visual progress
Visual progress at 0 s0.0s
Visual progress at 0.5 s0.5s
Visual progress at 0.6 s0.6s
Visual progress at 0.7 s0.7s
FCP0.46s
LCP0.46s
VC850.47s
0.0s0.1s0.3s0.4s0.6s0.7s

Google Web Vitals

Largest Contentful Paint

When the page main content is rendered, collected via the Largest Contentful Paint API. Read more about Largest Contentful Paint.

464 msLCP render time

Phase breakdown

  • TTFB395 ms
  • Resource load delay0 ms
  • Resource load duration0 ms
  • Element render delay69 ms

Element

Element type
<p>
Size (w × h)
68484
Load time
0 ms
Style recalculation before LCP
3 recalculations touching 26 elements (0.794 ms) — the largest touched 26 elements (0.739 ms)

DOM path

body > div:eq(1) > p:eq(1)
LCP

The LCP element is highlighted in the screenshot. If nothing is highlighted the element was removed before the screenshot or the LCP API couldn't find it.

Cumulative Layout Shift

How much the page's content shifts as it loads, collected via the Cumulative Layout Shift API.

0.000cumulative layout shift score

No layout shifts were detected on this page.

Browser Metrics

Navigation Timing
Extra timings

Server timings

Timing data the server chose to expose through Server-Timing response headers on the main document — typically backend time, cache status or experiment flags.

Server timings

3 entries
NameDurationDescription
cache0 msint-front
host0 mscp3070
co_id0 ms174707560

Custom metrics collected through JavaScript

There are no custom configured scripts.

Extra metrics collected using scripting

There are no custom extra metrics from scripting.

Chrome internal metrics (CDP)33
Audio handlers0
Audio worklet processors0
Documents6
Frames7
JS event listeners0
Layout objects43
Media key sessions0
Media keys0
Nodes81
Resources2
Context lifecycle state observers20
V8 per context datas3
Worker global scopes0
Uacss resources0
Rtc peer connections0
Resource fetchers6
Ad subframes0
Detached script states2
Array buffer contents0
Layout count1
Recalc style count3
Layout duration7
Recalc style duration1
Dev tools command duration12
Script duration0
V8 compile duration0
Task duration38
Task other duration18
Thread time0
Process time1
JS heap used size1935788
JS heap total size2883584
First meaningful paint462
Visual Elements3
LargestImagewmf-logo.png
Display time633 ms
Position (x, y)640, 164
Size (w × h)135 × 101
HTML snippet
<img id="logo" src="https://www.wikimedia.org/static/images/wmf-logo.png" srcset="https://www.wikimedia.org/static/images/wmf-logo-2x.png 2x" alt="Wikimedia" width="135" height="101">
LargestImage preview
Heading
Display time466 ms
Position (x, y)805, 182
Size (w × h)475 × 29
HTML snippet
<h1></h1>
LargestContentfulPaint
Display time466 ms
Position (x, y)0, 657
Size (w × h)1919 × 58
HTML snippet
<p class="text-muted"></p>

PageXray

How the page is built.

HTTP versionHTTP/2.0
Total requests3
Total domains2
Transfer size14.1 KB
Content size20.2 KB
Missing compression1
Cookies21 third-party
Console errors1see the console log ↓

Main document

status 403 · 0 redirects

https://query.wikidata.org/querybuilder/

HeaderValue
content-length2311
content-typetext/html; charset=utf-8
dateSun, 20 Sep 2026 10:18:50 GMT
nel{ "report_to": "wm_nel", "max_age": 604800, "failure_fraction": 0.05, "success_fraction": 0.0}
report-to{ "group": "wm_nel", "max_age": 604800, "endpoints": [{ "url": "https://intake-logging.wikimedia.org/v1/events?stream=w3c.reportingapi.network_error&schema_uri=/w3c/reportingapi/network_error/1.0.0" }] }
serverVarnish
server-timingcache;desc="int-front", host;desc="cp3070",co_id;desc="174707560"
strict-transport-securitymax-age=106384710; includeSubDomains; preload
x-analytics
x-cachecp3070 int
x-cache-statusint-front
x-client-ip138.201.135.103
x-request-id87833840-9f46-4054-96eb-532ae0fcc766

Response codes

200
266.7%
403
133.3%

Largest assets on the page (by transfer size)

3 assets
URLTypeTransfer SizeContent Size
https://query.wikidata.org/favicon.icofavicon6.8 KB14.7 KB
https://www.wikimedi...ages/wmf-logo.pngimage4.4 KB3.2 KB
https://query.wikidata.org/querybuilder/html2.9 KB2.3 KB

Requests and sizes per content type

2 types

Transfer size11.2 KB

  • favicon60.6%
  • image39.4%

Content size18.0 KB

  • favicon82.0%
  • image18.0%

Requests2

  • image50.0%
  • favicon50.0%
ContentHeader SizeTransfer SizeContent SizeRequests
image0 b4.4 KB3.2 KB1
favicon0 b6.8 KB14.7 KB1
Total0 b11.2 KB18.0 KB2

Data per domain

2 domains
DomainTotal download timeTransfer SizeContent SizeRequests
query.wikidata.org609 ms9.7 KB17.0 KB2
www.wikimedia.org192 ms4.4 KB3.2 KB1

Expires & last-modified statistics

typeminmedianmax
Expires0 seconds1 hour1 year
Last modified4 weeks7 weeks10 weeks

Console log

1 message

The page logs the following messages to the console.

LevelMessage
SEVEREhttps://query.wikidata.org/querybuilder/ - Failed to load resource: the server responded with a status of 403 ()

Requests loaded after onLoad event

1 request

Includes requests done after load event end.

ContentTransfer SizeRequests
html0 b0
css0 b0
javascript0 b0
image0 b0
font0 b0
favicon6.8 KB1
Total6.8 KB1

Requests loaded after onContentLoad

1 request

Includes requests done after DOM content loaded.

ContentTransfer SizeRequests
html0 b0
css0 b0
javascript0 b0
image0 b0
font0 b0
favicon6.8 KB1
Total6.8 KB1

CPU

Long tasks

Tasks ≥ 50 ms blocking the main thread, collected via the Long Task API.

✓ No long tasks observed during this run.

Where the time went

All main-thread work during the full page load, not just the share that blocked input. Calculated from the Chrome trace.

Categories

62 ms total
Other browser work (scheduling)24 ms38.7%
Running JavaScript23 ms37.1%
Style & layout8 ms12.9%
Parsing HTML & CSS4 ms6.5%
Paint & composite2 ms3.2%
Parsing & compiling JavaScript1 ms1.6%
What do these categories mean?
Parsing HTML & CSSparseHTML
Reading the HTML and CSS and building the page structure. Grows with document size — a big server-rendered page costs more here.
Style & layoutstyleLayout
Working out which CSS rules apply and where every element goes on the page. Grows with DOM size and selector complexity.
Parsing & compiling JavaScriptscriptParseCompile
Parsing and compiling JavaScript before it can run — the cost of shipping bytes of JS, even unused ones.
Running JavaScriptscriptEvaluation
Running JavaScript: event handlers, timers, promise callbacks and script execution.
Paint & compositepaintCompositeRender
Painting pixels and assembling layers into the frames you see on screen.
Garbage collectiongarbageCollection
Reclaiming memory JavaScript no longer uses. A lot of it means allocation-heavy code.
Other browser work (scheduling)other
Chrome’s own task management: per-task overhead and thousands of sub-millisecond scheduler ticks — not page work you can attribute or optimize away. On this page 24 ms of it is this per-task bookkeeping (RunTask self time in the trace).

First vs third party CPU time

Main-thread CPU time from the Chrome trace split by domain. First party is wikidata.org.

First party0 ms
Third party0 ms

Want to dig deeper? Download the Chrome trace and drag-and-drop it into Performance in DevTools.