Run 1 summary

https://dev.ramon.wasserstand.info/

Tested 2026-02-18 18:48:51 using Chrome 144.0.7559.59 (runtime settings).

SummaryWaterfall MetricsVideoFilmstrip CoachPageXrayThird partyScreenshots

Summary

MetricValue
Page metrics
Performance score84
Total page size1.9 MB
Requests16
Timing metrics
TTFB70 ms
First Paint1.224 s
Fully Loaded1.393 s
Google Web Vitals
TTFB70 ms
First Contentful Paint (FCP) 1.224 s
Largest Contentful Paint (LCP) 1.224 s
Cumulative Layout Shift (CLS) 0.00
848 ms
Total Blocking Time25 ms
Max Potential FID75 ms
CPU metrics
CPU long tasks3
CPU last long task happens at1.330 s
Visual Metrics
First Visual Change1.233 s
Speed Index1.597 s
Visual Complete 85%1.633 s
Visual Complete 99%1.733 s
Last Visual Change1.733 s
Screenshot
| Waterfall | | Download HAR | 

Waterfall

| Video | Download | 

Video

Download video
| Filmstrip | 

Filmstrip

Use--filmstrip.showAll to show all filmstrips.

0 s
0.3 sCPU Long Task duration 77 ms
0.5 sCPU Long Task duration 727 ms
1.2 sDOM Content Loaded Time 1.150 s
1.3 sFirst Contentful Paint 1.224 sLCP <IMG> 1.224 sFirst Visual Change 1.233 screate 1.247 sPage Load Time 1.279 s
1.4 sCPU Long Task duration 75 msFully Loaded 1.393 s
1.5 s
1.6 s
1.7 sVisual Complete 85% 1.633 sVisual Complete 95% 1.633 s
1.8 sLast Visual Change 1.733 sVisual Complete 99% 1.733 s
| Performance advice | Best practice advice | Privacy advice | Page info | Technologies | 

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 8.1.3.

I am the coach

Coach score

Performance advice (84)

TitleAdviceScore
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:
  • https://dev.ramon.wasserstand.info/images/ramon/logo.svg
  • https://dev.ramon.wasserstand.info/images/ramon/logo.svg
  • Inline CSS for faster first render (inlineCss)The page has both inline CSS and CSS requests even though it uses a HTTP/2-ish connection. If you have many users on slow connections, it can be better to only inline the CSS. Run your own tests and check the waterfall graph to see what happens.95
    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.
    Have a fast largest contentful paint (largestContentfulPaint) You can add fetchPriority="high" to the image to increase the load priority in Chrome.95
    Description: Largest contentful paint is one of Google Web Vitals and reports the render time of the largest image or text block visible within the viewport, relative to when the page first started loading. To be fast according to Google, it needs to render before 2.5 seconds and results over 4 seconds is poor performance.
    Avoid CPU Long Tasks (longTasks)The page has 3 CPU long tasks with the total of 879 ms. The total blocking time is 25 ms and 2 long tasks before first contentful paint with total time of 804 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.40
    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:
  • self
  • self
  • self
  • Avoid extra requests by setting cache headers (cacheHeaders)The page has 5 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 94.1 kB the next access.50
    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:
  • https://dev.ramon.wasserstand.info/api/ext/overview?json=%7B%7D
  • https://dev.ramon.wasserstand.info/api/ext/mapbox-token?json=%7B%7D
  • https://dev.ramon.wasserstand.info/images/ramon/logo.svg
  • https://dev.ramon.wasserstand.info/api/ext/overview/histdata?json=%7B%7D
  • https://dev.ramon.wasserstand.info/api/ext/overview/histdata?json=%7B%7D
  • Long cache headers is good (cacheHeadersLong)The page has 1 request that have a shorter cache time than 30 days (but still a cache time).99
    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:
  • https://fonts.googleapis.com/css?family=Open+Sans
  • Always compress text content (compressAssets)The page has 2 requests that are served uncompressed. You could save a lot of bytes by sending them compressed instead.80
    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:
    URLTransfer sizeContent size
    https://dev.ramon.wasserstand.info/images/ramon/logo.svg 84.8 KB84.6 KB
    https://dev.ramon.wasserstand.info/api/ext/overview/histdata?json=%7B%7D 69 B12.5 KB
    Total JavaScript size shouldn't be too big (javascriptSize)The total JavaScript transfer size is 1.8 MB and the uncompressed size is 4.9 MB. This is totally crazy! There is really room for improvement here. 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:
    URLTransfer sizeContent size
    https://dev.ramon.wasserstand.info/assets/polyfills-COEUuO1g.js 57.2 KB134.7 KB
    https://dev.ramon.wasserstand.info/assets/index-DCRNSGFh.js 978.3 KB2.8 MB
    https://dev.ramon.wasserstand.info/assets/vue-PEgly-nH.js 95.4 KB225.0 KB
    https://dev.ramon.wasserstand.info/assets/highcharts-11er7_Xi.js 117.6 KB293.8 KB
    https://dev.ramon.wasserstand.info/assets/prosemirror-D5ZUh3DX.js 77.6 KB207.0 KB
    https://dev.ramon.wasserstand.info/assets/milkdown-BIqRnhhl.js 402.9 KB1.1 MB
    Make each CSS response small (optimalCssSize)https://dev.ramon.wasserstand.info/assets/index-bIoJl05I.css size is 57.7 kB (57712) 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:
    URLTransfer sizeContent size
    https://dev.ramon.wasserstand.info/assets/index-bIoJl05I.css 56.4 KB251.1 KB
    Don't use private headers on static content (privateAssets)The page has 1 request with private headers. Make sure that the assets really should be private and only used by one user. Otherwise, make it cacheable for everyone.90
    Description: If you set private headers on content, that means that the content are specific for that user. Static content should be able to be cached and used by everyone. Avoid setting the cache header to private.
    Offenders:
  • https://fonts.googleapis.com/css?family=Open+Sans
  • Best practice advice (92)

    TitleAdviceScore
    Avoid too many third party requests (thirdParty)The page do 13% requests to third party domains (2 requests and 20.7 kB). First party is 14 requests and 1.9 MB. The regex .*wasserstand.* was used to calculate first/third party requests.50
    Description: Do not load most of your content from third party URLs.
    Avoid unnecessary headers (unnecessaryHeaders)There are 10 responses that sets both a max-age and expires header. There are 16 responses that sets a server header. 74
    Description: 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:
  • https://dev.ramon.wasserstand.info/
  • https://dev.ramon.wasserstand.info/assets/polyfills-COEUuO1g.js
  • https://dev.ramon.wasserstand.info/assets/polyfills-COEUuO1g.js
  • https://dev.ramon.wasserstand.info/assets/index-DCRNSGFh.js
  • https://dev.ramon.wasserstand.info/assets/index-DCRNSGFh.js
  • https://dev.ramon.wasserstand.info/assets/vue-PEgly-nH.js
  • https://dev.ramon.wasserstand.info/assets/vue-PEgly-nH.js
  • https://dev.ramon.wasserstand.info/assets/highcharts-11er7_Xi.js
  • https://dev.ramon.wasserstand.info/assets/highcharts-11er7_Xi.js
  • https://dev.ramon.wasserstand.info/assets/prosemirror-D5ZUh3DX.js
  • https://dev.ramon.wasserstand.info/assets/prosemirror-D5ZUh3DX.js
  • https://dev.ramon.wasserstand.info/assets/milkdown-BIqRnhhl.js
  • https://dev.ramon.wasserstand.info/assets/milkdown-BIqRnhhl.js
  • https://dev.ramon.wasserstand.info/assets/index-bIoJl05I.css
  • https://dev.ramon.wasserstand.info/assets/index-bIoJl05I.css
  • https://fonts.googleapis.com/css?family=Open+Sans
  • https://fonts.googleapis.com/css?family=Open+Sans
  • https://dev.ramon.wasserstand.info/api/ext/overview?json=%7B%7D
  • https://dev.ramon.wasserstand.info/api/ext/mapbox-token?json=%7B%7D
  • https://dev.ramon.wasserstand.info/images/ramon/logo.svg
  • https://fonts.gstatic.com/s/opensans/v44/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyO...gsjZ0B4gaVI.woff2
  • https://fonts.gstatic.com/s/opensans/v44/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyO...gsjZ0B4gaVI.woff2
  • https://dev.ramon.wasserstand.info/api/ext/overview/histdata?json=%7B%7D
  • https://dev.ramon.wasserstand.info/api/ext/overview/histdata?json=%7B%7D
  • https://dev.ramon.wasserstand.info/images/ramon/favicon.ico
  • https://dev.ramon.wasserstand.info/images/ramon/favicon.ico
  • Privacy advice (83)

    TitleAdviceScore
    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:
  • https://dev.ramon.wasserstand.info/
  • 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:
  • https://dev.ramon.wasserstand.info/
  • Do not share user data with third parties. (thirdPartyPrivacy)The page has 13% requests that are 3rd party (2 requests with a size of 20.7 kB). The page also have request to companies that harvest data from users and do not respect users privacy (see https://en.wikipedia.org/wiki/Surveillance_capitalism). The page do 2 survelliance requests and uses 1 survelliance tool.0
    Description: Using third party requests shares user information with that third party. Please avoid that! The project https://github.com/patrickhulce/third-party-web is used to categorize first/third party requests.
    Offenders:
  • https://fonts.googleapis.com/css?family=Open+Sans
  • https://fonts.gstatic.com/s/opensans/v44/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyO...gsjZ0B4gaVI.woff2
  • Page info

    Page info
    TitleRHB Ramon
    Width1365
    Height620
    DOM elements169
    Avg DOM depth8
    Max DOM depth15
    Iframes0
    Script tags7
    Local storage86 B
    Session storage0 b
    Network Information API4g

    Technologies used to build the page.

    Data collected using Wappalyzer version 6.10.54. With updated code from Webappanalyzer 2024-12-27. Use --browsertime.firefox.includeResponseBodies htmlor --browsertime.chrome.includeResponseBodies htmlto help Wappalyzer find more information about technologies used.

    TechnologyConfidenceCategory
    Ubuntu 100  Operating systems
    Nginx 1.18.0100  Web servers Reverse proxies
    HSTS 100  Security
    HTTP/3 100  Miscellaneous

    Data collected using Third Party Web 0.26.2

    Cdn
    Google Fonts
    Survelliance
    Google Fonts
    | Browser metrics | Visual Metrics | Largest Contentful Paint | Cumulative Layout Shift | Interaction To Next Paint | Long Aninimation Frames | Metrics from CDP | 

    Visual Metrics

    Browser Metrics

    Largest Contentful Paint

    When in time the page main content is rendered (collected using the Largest Contentful Paint API). Read more about Largest Contentful Paint.

    Element typeIMG
    Element/tag<img src="/images/ramon/logo.svg" alt="Logo" height="45">
    Render time 1.224 s
    Element render delay123 ms
    TTFB70 ms
    Resource delay1.012 s
    Resource load duration19 ms
    Load time1.183 s
    URL https://dev.ramon.wa...es/ramon/logo.svg
    Size (width*height)4995
    DOM path
    div#app > div#app > header#app__header > div#app__header__logo > a > span:eq(0) > img> div#app > div#app > header#app__header > div#app__header__logo > a > span:eq(0) > img>
    LCP

    The largest contentful paint is highlighted in the image. If no element is highlighted the element was removed before the screenshot or the LCP API couldn't find the element.

    The Largest Contentful Paint API highlighted this image as a part of the LCP.

    LCP

    Detected Cumulative Layout Shift

    No layout shift detected.

    Interaction to Next Paint

    Interaction to Next Paint (INP) is a metric that try to measure responsiveness. It's useful if you are testing user journeys. Read more about Interaction to Next Paint.

    The measured latency was 848 ms.

    Event typepointerover
    Element typeDIV
    Element class name
    Event target#app
    Load state when the event happeneddom-interactive

    Long Animation Frames

    Read more about the Long Animation Frames API here here.

    The top 10 longest animation frames entries

    Blocking duration Work durationRender durationPreLayout DurationStyle And Layout Duration
    683.6 ms741.8 ms6 ms5.3 ms0.7 ms
    https://dev.ramon.wasserstand.info/assets/index-DCRNSGFh.js

    Forced Style And Layout Duration: 63 ms

    Invoker:  https://dev.ramon.wasserstand.info/assets/index-DCRNSGFh.js
    Invoker Type: module-script
    Window attribution: self

    Blocking duration Work durationRender durationPreLayout DurationStyle And Layout Duration
    42 ms251.2 ms14.2 ms0 ms14.2 ms
    https://dev.ramon.wasserstand.info/assets/polyfills-COEUuO1g.js

    Invoker:  https://dev.ramon.wasserstand.info/assets/polyfills-COEUuO1g.js
    Invoker Type: module-script
    Window attribution: self

    Blocking duration Work durationRender durationPreLayout DurationStyle And Layout Duration
    21.7 ms21.1 ms63.7 ms63.3 ms0.4 ms
    https://dev.ramon.wasserstand.info/assets/index-DCRNSGFh.js

    Invoker:  FrameRequestCallback
    Invoker Type: user-callback
    Source Function Name:  animationDelay_
    Window attribution: self
    Source char position: 317636

    Blocking duration Work durationRender durationPreLayout DurationStyle And Layout Duration
    18.4 ms86.8 ms22.3 ms18 ms4.3 ms
    https://dev.ramon.wasserstand.info/assets/index-DCRNSGFh.js

    Invoker:  XMLHttpRequest.onreadystatechange
    Invoker Type: event-listener
    Source Function Name:  F
    Window attribution: self
    Source char position: 23546

    https://dev.ramon.wasserstand.info/assets/index-DCRNSGFh.js

    Forced Style And Layout Duration: 11 ms

    Invoker:  XMLHttpRequest.onreadystatechange
    Invoker Type: event-listener
    Source Function Name:  F
    Window attribution: self
    Source char position: 23546

    https://dev.ramon.wasserstand.info/assets/index-DCRNSGFh.js

    Invoker:  FrameRequestCallback
    Invoker Type: user-callback
    Source Function Name:  animationDelay_
    Window attribution: self
    Source char position: 317636

    Server timings

    There are no Server Timings.

    Custom metrics collected through JavaScript

    There are no custom configured scripts.

    Extra metrics collected using scripting

    There are no custom extra metrics from scripting.

    CDP Performance

    namevalue
    AudioHandlers0
    AudioWorkletProcessors0
    Documents4
    Frames3
    JSEventListeners82
    LayoutObjects363
    MediaKeySessions0
    MediaKeys0
    Nodes926
    Resources81
    ContextLifecycleStateObservers11
    V8PerContextDatas1
    WorkerGlobalScopes0
    UACSSResources0
    RTCPeerConnections0
    ResourceFetchers4
    AdSubframes0
    DetachedScriptStates2
    ArrayBufferContents12
    LayoutCount10
    RecalcStyleCount23
    LayoutDuration65
    RecalcStyleDuration37
    DevToolsCommandDuration12
    ScriptDuration772
    V8CompileDuration0
    TaskDuration1211
    TaskOtherDuration325
    ThreadTime1
    ProcessTime3
    JSHeapUsedSize11799400
    JSHeapTotalSize22786048
    FirstMeaningfulPaint1223
    | Summary  | Largest responses  | Requests and sizes per content type  | Data per domain | Expires and last modified statistics  | Requests loaded after onLoad event  | 

    PageXray

    How the page is built.

    Summary
    HTTP versionHTTP/2.0
    Total requests16
    Total domains3
    Total transfer size1.9 MB
    Total content size5.1 MB
    Responses missing compression13
    Number of cookies0
    Third party cookies0
    Requests per response code
    20016

    Largest assets on the page (by transfer size)

    Requests and sizes per content type

    ContentHeader SizeTransfer SizeContent SizeRequests
    html0 b1.4 KB3.1 KB1
    css0 b58.3 KB256.9 KB2
    javascript0 b1.7 MB4.7 MB6
    font0 b18.2 KB18.2 KB1
    json0 b7.1 KB54.1 KB4
    svg0 b84.8 KB84.6 KB1
    favicon0 b1.3 KB1.1 KB1
    Total0 b1.9 MB5.1 MB16

    Data per domain

    DomainTotal download timeTransfer SizeContent SizeRequests
    dev.ramon.wasserstand.info831 ms1.8 MB5.1 MB14
    fonts.googleapis.com144 ms2.0 KB5.8 KB1
    fonts.gstatic.com21 ms18.2 KB18.2 KB1

    Expires and last modified statistics

    typeminmedianmax
    Expires0 seconds4 weeks1 year
    Last modified50 minutes8 hours22 weeks

    Requests loaded after onLoad event

    Included requests done after load event end.

    ContentTransfer SizeRequests
    html0 b0
    css0 b0
    javascript0 b0
    image0 b0
    font0 b0
    favicon1.3 KB1
    Total1.3 KB1

    Requests loaded after onContentLoad

    Includes requests done after DOM content loaded.

    ContentTransfer SizeRequests
    html0 b0
    css0 b0
    javascript0 b0
    image0 b0
    font18.2 KB1
    json1.7 KB2
    favicon1.3 KB1
    Total21.3 KB4
    | Categories | | Tools | | First vs third | 

    Third party

    Third party requests categorised by Third party web version 0.26.2.

    CategoryRequests
    cdn 2
    survelliance 2
    CategoryNumber of tools
    cdn 1
    survelliance 1

    Third party requests and tools

    cdn (2 requests)
    Google Fonts
    survelliance (2 requests)
    Google Fonts

    First party requests and sizes per content type

    Calculated using .*wasserstand.* (use --firstParty to configure).

    ContentHeader SizeTransfer SizeContent SizeRequests
    html0 b1.4 KB3.1 KB1
    css0 b56.4 KB251.1 KB1
    javascript0 b1.7 MB4.7 MB6
    image0 b0 b0 b0
    font0 b0 b0 b0
    json0 b7.1 KB54.1 KB4
    svg0 b84.8 KB84.6 KB1
    favicon0 b1.3 KB1.1 KB1
    TotalN/A1.8 MB5.1 MB14

    Third party requests and sizes per content type

    ContentHeader SizeTransfer SizeContent SizeRequests
    html0 b0 b0 b0
    css0 b2.0 KB5.8 KB1
    javascript0 b0 b0 b0
    image0 b0 b0 b0
    font0 b18.2 KB18.2 KB1
    TotalN/A20.2 KB24.0 KB2
    afterPageCompleteCheck.png | layoutShift.png | largestContentfulPaint.png | 

    Screenshots

    afterPageCompleteCheck.png

    afterPageCompleteCheck.png

    layoutShift.png

    layoutShift.png

    largestContentfulPaint.png

    largestContentfulPaint.png