Tested 2023-01-25 00:03:06 using Chrome 97.0.4692.20 (runtime settings).
Metric | Value |
---|---|
Page metrics | |
Performance Score | 85 |
Total Page Transfer Size | 895.0 KB |
Requests | 20 |
Timing metrics | |
TTFB [median] | 311 ms |
First Paint [median] | 628 ms |
Fully Loaded [median] | 1.562 s |
Google Web Vitals | |
TTFB [median] | 311 ms |
First Contentful Paint (FCP) [median] | 628 ms |
Largest Contentful Paint (LCP) [median] | 628 ms |
Cumulative Layout Shift (CLS) [median] | 0.00 |
CPU metrics | |
CPU long tasks [median] | 1 |
CPU longest task duration | 61 ms |
CPU last long task happens at | 566 ms |
Visual Metrics | |
First Visual Change [median] | 670 ms |
Speed Index [median] | 678 ms |
Visual Complete 85% [median] | 670 ms |
Visual Complete 99% [median] | 670 ms |
Last Visual Change [median] | 1.514 s |
Metric | min | median | mean | max |
---|---|---|---|---|
Visual Metrics | ||||
FirstVisualChange | 645 ms | 670 ms | 667 ms | 686 ms |
LastVisualChange | 1.452 s | 1.514 s | 1.503 s | 1.542 s |
SpeedIndex | 653 ms | 678 ms | 675 ms | 694 ms |
VisualReadiness | 807 ms | 828 ms | 836 ms | 872 ms |
VisualComplete85 | 645 ms | 670 ms | 667 ms | 686 ms |
VisualComplete95 | 645 ms | 670 ms | 667 ms | 686 ms |
VisualComplete99 | 645 ms | 670 ms | 667 ms | 686 ms |
RUM Metrics | ||||
TTFB | 307 ms | 311 ms | 310 ms | 312 ms |
LCP | 615 ms | 628 ms | 626 ms | 635 ms |
FCP | 615 ms | 628 ms | 626 ms | 635 ms |
firstPaint | 615 ms | 628 ms | 626 ms | 635 ms |
loadEventEnd | 1.383 s | 1.428 s | 1.416 s | 1.436 s |
CLS | 0 | 0 | 0 | 0 |
User Timing | ||||
ClientPref | 322 ms | 334 ms | 332 ms | 338 ms |
mwStartup | 1.198 s | 1.248 s | 1.231 s | 1.248 s |
CPU | ||||
Total Blocking Time | 0 ms | 0 ms | 0 ms | 0 ms |
Max Potential FID | 0 ms | 0 ms | 0 ms | 0 ms |
CPU long tasks | 1 | 1 | 1 | 1 |
CPU last long task happens at | 554 ms | 566 ms | 566 ms | 579 ms |
Run 2 SpeedIndex median
Use--filmstrip.showAll
to show all filmstrips.
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.
Title | Advice | Score | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Avoid slowing down the critical rendering path (avoidRenderBlocking) | The page has 2 blocking requests and 0 in body parser blocking (0 JavaScript and 2 CSS). There are 1 potentially render blocking requests. You need to verify if it is render blocking: http://host.docker.internal:8080/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022 | 99 | ||||||||||||||||||||||||
Description: The critical rendering path is what the browser needs to do to start rendering the page. Every file requested inside of the head element will postpone the rendering of the page, because the browser need to do the request. Avoid loading JavaScript synchronously inside of the head (you should not need JavaScript to render the page), request files from the same domain as the main document (to avoid DNS lookups) and inline CSS for really fast rendering and a short rendering path. | ||||||||||||||||||||||||||
Offenders: | ||||||||||||||||||||||||||
Don't scale images in the browser (avoidScalingImages) | The page has 2 images that are scaled more than 100 pixels. It would be better if those images are sent so the browser don't need to scale them. | 80 | ||||||||||||||||||||||||
Description: It's easy to scale images in the browser and make sure they look good in different devices, however that is bad for performance! Scaling images in the browser takes extra CPU time and will hurt performance on mobile. And the user will download extra kilobytes (sometimes megabytes) of data that could be avoided. Don't do that, make sure you create multiple version of the same image server-side and serve the appropriate one. | ||||||||||||||||||||||||||
Offenders: | ||||||||||||||||||||||||||
Inline CSS for faster first render (inlineCss) | The page has both inline styles as well as it is requesting 2 CSS files inside of the head. Let's only inline CSS for really fast render. | 90 | ||||||||||||||||||||||||
Description: In the early days of the Internet, inlining CSS was one of the ugliest things you can do. That has changed if you want your page to start rendering fast for your user. Always inline the critical CSS when you use HTTP/1 and HTTP/2 (avoid doing CSS requests that block rendering) and lazy load and cache the rest of the CSS. It is a little more complicated when using HTTP/2. Does your server support HTTP push? Then maybe that can help. Do you have a lot of users on a slow connection and are serving large chunks of HTML? Then it could be better to use the inline technique, becasue some servers always prioritize HTML content over CSS so the user needs to download the HTML first, before the CSS is downloaded. | ||||||||||||||||||||||||||
Offenders: | ||||||||||||||||||||||||||
Avoid CPU Long Tasks (longTasks) | The page has 1 CPU long task with the total of 61 ms. The total blocking time is 0 ms and 1 long task before first contentful paint with total time of 61 ms. However the CPU Long Task is depending on the computer/phones actual CPU speed, so you should measure this on the same type of the device that your user is using. Use Geckoprofiler for Firefox or Chromes tracelog to debug your long tasks. | 80 | ||||||||||||||||||||||||
Description: Long CPU tasks locks the thread. To the user this is commonly visible as a "locked up" page where the browser is unable to respond to user input; this is a major source of bad user experience on the web today. However the CPU Long Task is depending on the computer/phones actual CPU speed, so you should measure this on the same type of the device that your user is using. To debug you should use the Chrome timeline log and drag/drop it into devtools or use Firefox Geckoprofiler. | ||||||||||||||||||||||||||
Offenders: | ||||||||||||||||||||||||||
Avoid extra requests by setting cache headers (cacheHeaders) | The page has 4 requests that are missing a cache time. Configure a cache time so the browser doesn't need to download them every time. It will save 890 B the next access. | 60 | ||||||||||||||||||||||||
Description: The easiest way to make your page fast is to avoid doing requests to the server. Setting a cache header on your server response will tell the browser that it doesn't need to download the asset again during the configured cache time! Always try to set a cache time if the content doesn't change for every request. | ||||||||||||||||||||||||||
Offenders: | ||||||||||||||||||||||||||
Long cache headers is good (cacheHeadersLong) | The page has 3 requests that have a shorter cache time than 30 days (but still a cache time). | 97 | ||||||||||||||||||||||||
Description: Setting a cache header is good. Setting a long cache header (at least 30 days) is even better beacause then it will stay long in the browser cache. But what do you do if that asset change? Rename it and the browser will pick up the new version. | ||||||||||||||||||||||||||
Offenders: | ||||||||||||||||||||||||||
Always compress text content (compressAssets) | The page has 7 requests that are served uncompressed. You could save a lot of bytes by sending them compressed instead. | 30 | ||||||||||||||||||||||||
Description: 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:
| ||||||||||||||||||||||||||
Total JavaScript size shouldn't be too big (javascriptSize) | The total JavaScript transfer size is 706.1 kB. This is quite large. | 0 | ||||||||||||||||||||||||
Description: A lot of JavaScript often means you are downloading more than you need. How complex is the page and what can the user do on the page? Do you use multiple JavaScript frameworks? | ||||||||||||||||||||||||||
Offenders:
| ||||||||||||||||||||||||||
Make each CSS response small (optimalCssSize) | http://host.docker.internal:8080/load.php?lang=en&modules=ext.relatedArticles.styles%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cmediawiki.ui.button%2Cicon%7Cskins.vector.icons%2Cstyles&only=styles&skin=vector-2022 size is 85.5 kB (85461) and that is bigger than the limit of 14.5 kB. Try to make the CSS files fit into 14.5 KB. | 90 | ||||||||||||||||||||||||
Description: Make CSS responses small to fit into the magic number TCP window size of 14.5 KB. The browser can then download the CSS faster and that will make the page start rendering earlier. | ||||||||||||||||||||||||||
Offenders:
| ||||||||||||||||||||||||||
Avoid missing and error requests (responseOk) | The page has 1 error response. The page has 1 response with code 404. | 90 | ||||||||||||||||||||||||
Description: 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: |
Title | Advice | Score |
---|---|---|
Serve your content securely (https) | What!! The page is not using HTTPS. Every unencrypted HTTP request reveals information about user’s behavior, read more about it at https://https.cio.gov/everything/. You can get a totally free SSL/TLS certificate from https://letsencrypt.org/. | 0 |
Description: A page should always use HTTPS (https://https.cio.gov/everything/). You also need that for HTTP/2. You can get your free SSL/TLC certificate from https://letsencrypt.org/. | ||
Use a good Content-Security-Policy header to make sure you you avoid Cross Site Scripting (XSS) attacks. (contentSecurityPolicyHeader) | Set a Content-Security-Policy header to make sure you are not open for Cross Site Scripting (XSS) attacks. You can start with setting a Content-Security-Policy-Report-Only header, that will only report the violation, not stop the download. | 0 |
Description: Content Security Policy is delivered via a HTTP response header, and defines approved sources of content that the browser may load. It can be an effective countermeasure to Cross Site Scripting (XSS) attacks and is also widely supported and usually easily deployed. https://scotthelme.co.uk/content-security-policy-an-introduction/. | ||
Offenders: | ||
Set a permission policy header that opt out your users being tracked in Chrome by FLoC. (disableFLoCHeader) | Set a permission policy header that opt out Chrome for tracking what your users do on your site. | 0 |
Description: Googles new tracking method is called Federated Learning of Cohorts (FLoC) and it groups you based on your interests and demographics, derived from your browsing history, to enable creepy advertising and other content targeting without third-party cookies. You can avoid that by setting a Permissions-Policy header with the value of interest-cohort=(). See https://www.eff.org/deeplinks/2021/03/googles-floc-terrible-idea. | ||
Offenders: | ||
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. | 0 |
Description: 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: | ||
Avoid third party cookies that is used to track the user. (thirdPartyCookies) | The page sets 3 third party cookies. | 0 |
Description: Third party cookies are used to track the user. They are automatically blocked in Safari and Firefox. | ||
Offenders: |
Page info | |
---|---|
Title | Test - my_wiki |
Generator | MediaWiki 1.40.0-alpha |
Width | 1350 |
Height | 9942 |
DOM elements | 820 |
Avg DOM depth | 12 |
Max DOM depth | 20 |
Iframes | 0 |
Script tags | 4 |
Local storage | 523.9 KB |
Session storage | 0 b |
Network Information API | 4g |
Data collected using Wappalyzer. Use --browsertime.firefox.includeResponseBodies html
or --browsertime.chrome.includeResponseBodies html
to help Wappalyser find more information about technologies used.
Technology | Confidence | Category |
---|---|---|
MediaWiki | 100 | Wikis |
PHP 7.4.32 | 100 | Programming languages |
UNIX | 100 | Operating systems |
Bootstrap 7 | 100 | UI frameworks |
Apache 2.4.54 | 100 | Web servers |
jQuery | 100 | JavaScript libraries |
Data from run 2
Visual Metrics | |
---|---|
First Visual Change | 670 ms |
Speed Index | 678 ms |
Visual Complete 85% | 670 ms |
Visual Complete 95% | 670 ms |
Visual Complete 99% | 670 ms |
Last Visual Change | 1.542 s |
Visual Readiness | 872 ms |
Navigation Timing | |
---|---|
backEndTime | 307 ms |
domContentLoadedTime | 556 ms |
domInteractiveTime | 555 ms |
domainLookupTime | 5 ms |
frontEndTime | 1.114 s |
pageDownloadTime | 7 ms |
pageLoadTime | 1.428 s |
redirectionTime | 0 ms |
serverConnectionTime | 2 ms |
serverResponseTime | 301 ms |
Google Web Vitals | |
---|---|
Time to first byte (TTFB) | 307 ms |
First Contentful Paint (FCP) | 628 ms |
Largest Contentful Paint (LCP) | 628 ms |
Total Blocking Time (TBT) | 0 ms |
Extra timings | |
---|---|
TTFB | 307 ms |
First Paint | 628 ms |
Load Event End | 1.428 s |
Fully loaded | 1.583 s |
User Timing marks | |
---|---|
ClientPref | 322 ms |
mwStartup | 1.248 s |
When in time the page main content is rendered (collected using the Largest Contentful Paint API). Read more about Largest Contentful Paint.
Element type | P |
Element/tag | <p></p> |
Render time | 628 ms |
Load time | 0 ms |
Size (width*height) | 19140 |
DOM path | |
div:eq(0) > div > div:eq(2) > main#content > div#bodyContent > div#mw-content-text > div:eq(0) > p:eq(8)> div:eq(0) > div > div:eq(2) > main#content > div#bodyContent > div#mw-content-text > div:eq(0) > p:eq(8)> |
No layout shift detected.
There are no Server Timings.
There are no custom configured scripts.
There are no custom extra metrics from scripting.
name | value |
---|---|
AudioHandlers | 0 |
Documents | 11 |
Frames | 11 |
JSEventListeners | 96 |
LayoutObjects | 948 |
MediaKeySessions | 0 |
MediaKeys | 0 |
Nodes | 1811 |
Resources | 14 |
ContextLifecycleStateObservers | 13 |
V8PerContextDatas | 1 |
WorkerGlobalScopes | 0 |
UACSSResources | 0 |
RTCPeerConnections | 0 |
ResourceFetchers | 11 |
AdSubframes | 0 |
DetachedScriptStates | 0 |
ArrayBufferContents | 0 |
LayoutCount | 11 |
RecalcStyleCount | 16 |
LayoutDuration | 67 |
RecalcStyleDuration | 16 |
DevToolsCommandDuration | 13 |
ScriptDuration | 115 |
V8CompileDuration | 1 |
TaskDuration | 318 |
TaskOtherDuration | 107 |
ThreadTime | 0 |
ProcessTime | 1 |
JSHeapUsedSize | 4002456 |
JSHeapTotalSize | 5984256 |
FirstMeaningfulPaint | 628 |
How the page is built.
Summary | |
---|---|
HTTP version | HTTP/1.1 |
Total requests | 20 |
Total domains | 2 |
Total transfer size | 895.0 KB |
Total content size | 902.6 KB |
Responses missing compression | 9 |
Number of cookies | 3 |
Third party cookies | 3 |
Requests per response code | |
---|---|
200 | 19 |
404 | 1 |
Content | Header Size | Transfer Size | Content Size | Requests |
---|---|---|---|---|
html | 484 B | 95.5 KB | 95.5 KB | 1 |
css | 970 B | 83.5 KB | 83.5 KB | 2 |
javascript | 2.3 KB | 689.5 KB | 689.5 KB | 5 |
image | 0 b | 14.5 KB | 13.1 KB | 1 |
svg | 3.3 KB | 11.7 KB | 20.8 KB | 10 |
Total | 7.0 KB | 894.8 KB | 902.4 KB | 19 |
Domain | Total download time | Transfer Size | Content Size | Requests |
---|---|---|---|---|
host.docker.internal | 2.134 s | 871.2 KB | 871.0 KB | 17 |
en.wikipedia.org | 391 ms | 23.8 KB | 31.5 KB | 3 |
type | min | median | max |
---|---|---|---|
Expires | 0 seconds | 4 weeks | 1 year |
Last modified | 8 minutes | 14 weeks | 32 weeks |
Included requests done after load event end.
Content | Transfer Size | Requests |
---|---|---|
html | 0 b | 0 |
css | 0 b | 0 |
javascript | 91.9 KB | 2 |
image | 0 b | 0 |
font | 0 b | 0 |
Total | 92.1 KB | 3 |
Includes requests done after DOM content loaded.
Content | Transfer Size | Requests |
---|---|---|
html | 0 b | 0 |
css | 0 b | 0 |
javascript | 650.4 KB | 4 |
image | 0 b | 0 |
font | 0 b | 0 |
svg | 963 B | 2 |
Total | 651.6 KB | 7 |
Render blocking information directly from Chrome.
Blocking | In body parser blocking | Potentially blocking |
---|---|---|
2 | 0 | 1 |
URL | Type |
---|---|
http://host.docker.i...nal:8080/load.php | non_blocking |
http://host.docker.i...nal:8080/load.php | blocking |
http://host.docker.i...nal:8080/load.php | non_blocking |
http://host.docker.i...nal:8080/load.php | non_blocking |
http://host.docker.i...nal:8080/load.php | potentially_blocking |
http://host.docker.i...nal:8080/load.php | non_blocking |
http://host.docker.i...nal:8080/load.php | blocking |
Third party requests categorised by Third party web.
Category | Requests |
---|
Category | Number of tools |
---|
Here's a list of domains that didn't match any tool in Third party web. If you are sure they are third party domains, please do a PR to that project. You can also fine tune the list using --firstParty
.
en.wikipedia.org |
Cookie name | Domain |
---|---|
WMF-Last-Access | .wikipedia.org |
Calculated using .*docker.* (use --firstParty
to configure).
Content | Header Size | Transfer Size | Content Size | Requests |
---|---|---|---|---|
html | 484 B | 95.5 KB | 95.5 KB | 1 |
css | 970 B | 83.5 KB | 83.5 KB | 2 |
javascript | 2.3 KB | 689.5 KB | 689.5 KB | 5 |
image | 0 b | 0 b | 0 b | 0 |
font | 0 b | 0 b | 0 b | 0 |
svg | 3.3 KB | 2.4 KB | 2.4 KB | 8 |
Total | 7.3 KB | 871.2 KB | 871.0 KB | 17 |
Content | Header Size | Transfer Size | Content Size | Requests |
---|---|---|---|---|
html | 0 b | 0 b | 0 b | 0 |
css | 0 b | 0 b | 0 b | 0 |
javascript | 0 b | 0 b | 0 b | 0 |
image | 0 b | 14.5 KB | 13.1 KB | 1 |
font | 0 b | 0 b | 0 b | 0 |
svg | 0 b | 9.3 KB | 18.4 KB | 2 |
Total | N/A | 23.8 KB | 31.5 KB | 3 |