Run 3 summary

https://gitlab.com/dashboard/merge_requests/

Tested 2025-07-25 16:56:30 using Chrome 138.0.7204.49 (runtime settings).

SummaryWaterfall MetricsVideoFilmstrip CoachPageXrayThird partyScreenshots

Summary

MetricValue
Page metrics
Performance score70
Total page size388.8 KB
Requests17
Timing metrics
TTFB322 ms
First Paint476 ms
Fully Loaded5.324 s
Google Web Vitals
TTFB322 ms
First Contentful Paint (FCP) 476 ms
Largest Contentful Paint (LCP) 476 ms
Cumulative Layout Shift (CLS) 0.02
120 ms
Total Blocking Time2.205 s
Max Potential FID656 ms
CPU metrics
CPU long tasks10
CPU last long task happens at4.586 s
Visual Metrics
First Visual Change466 ms
Speed Index911 ms
Visual Complete 85%1.066 s
Visual Complete 99%5.766 s
Last Visual Change5.766 s
Screenshot
| Waterfall | | Download HAR | 

Waterfall

| Video | Download | 

Video

Download video
| Filmstrip | 

Filmstrip

Use--filmstrip.showAll to show all filmstrips.

0 s
0.4 sDOM Content Loaded Time 340 ms
0.5 sFirst Visual Change 466 msFirst Contentful Paint 476 msLCP <DIV> ZEWft5 476 ms
0.6 sCPU Long Task duration 51 ms
0.7 sCPU Long Task duration 148 ms
0.8 sLayout Shift 0.00672 784 ms
0.9 s
1 sPage Load Time 987 ms
1.1 sLayout Shift 0.01191 1.047 sVisual Complete 85% 1.066 s
1.2 sCPU Long Task duration 72 ms
1.3 s
1.4 s
1.5 sCPU Long Task duration 314 ms
1.6 s
1.7 s
1.8 sCPU Long Task duration 466 ms
1.9 s
2 s
2.1 s
2.2 s
2.3 s
2.4 s
2.5 sCPU Long Task duration 138 ms
2.6 s
2.7 s
2.8 s
2.9 s
3 sCPU Long Task duration 469 ms
3.1 s
3.2 s
3.3 s
3.4 s
3.5 sCPU Long Task duration 182 ms
3.6 s
3.7 s
3.8 s
3.9 s
4 s
4.1 s
4.2 s
4.3 sCPU Long Task duration 209 ms
4.4 s
4.5 s
4.6 sCPU Long Task duration 656 ms
4.7 s
4.8 s
4.9 s
5 s
5.1 s
5.2 s
5.3 s
5.4 sFully Loaded 5.324 sVisual Complete 95% 5.400 s
5.6 s
5.7 s
5.8 sLast Visual Change 5.766 sVisual Complete 99% 5.766 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.1.

I am the coach

Coach score

Performance advice (70)

TitleAdviceScore
Avoid CPU Long Tasks (longTasks)The page has 10 CPU long tasks with the total of 2.705 s. The total blocking time is 2.205 s . 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.0
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
  • cross-origin-descendant
  • cross-origin-descendant
  • cross-origin-descendant
  • cross-origin-descendant
  • cross-origin-descendant
  • cross-origin-descendant
  • unknown
  • cross-origin-descendant
  • Avoid doing redirects (assetsRedirects)The page has 3 redirects. 3 of the redirects are from the base domain, please fix them! 70
    Description: A redirect is one extra step for the user to download the asset. Avoid that if you want to be fast. Redirects are even more of a showstopper on mobile.
    Offenders:
  • https://gitlab.com/users/sign_in
  • https://gitlab.com/favicon.ico
  • https://gitlab.com/favicon.ico
  • Avoid extra requests by setting cache headers (cacheHeaders)The page has 11 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 121.8 kB the next access.0
    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://gitlab.com/dashboard/merge_requests/
  • https://gitlab.com/dashboard/merge_requests/
  • https://gitlab.com/cdn-cgi/challenge-platform/h/b/orchestrate/chl_page/v1?ray=964d30ec3b97afb9
  • https://gitlab.com/favicon.ico
  • https://gitlab.com/assets/favicon-72a2cad5025aa931d6ea56c3201d1f18e68a8cd39788c7...b2b82aa5143ef.png
  • https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/turnstile/if/ov.../new/normal/auto/
  • https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/cmg/1
  • https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/orchestrate/chl...strate/chl_api/v1
  • https://gitlab.com/favicon.ico
  • https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/d/964d30ef69ff4...3/k-HZ7mxzLyy3zlC
  • https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/pat/964d30ef69f...4/3TCmWk65Zod8BjP
  • Always compress text content (compressAssets)The page has 1 request that are served uncompressed. You could save a lot of bytes by sending them compressed instead.90
    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://gitlab.com/users/sign_in 5.8 KB7.1 KB
    Avoid redirecting the main document (documentRedirect)The main document gets redirected 3 time(s). Remove those redirect and make the page faster!0
    Description: You should never ever redirect the main document, because it will make the page load slower for the user. Well, you should redirect the user if the user tries to use HTTP and there's an HTTPS version of the page. The coach checks for that. :)
    Offenders:
  • https://gitlab.com/dashboard/merge_requests/
  • https://gitlab.com/users/sign_in
  • https://gitlab.com/dashboard/merge_requests/
  • Total JavaScript size shouldn't be too big (javascriptSize)The total JavaScript transfer size is 126.4 kB and the uncompressed size is 322.6 kB. This is quite large. 50
    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://gitlab.com/cdn-cgi/challenge-platform/h/b/orchestrate/chl_page/v1?ray=964d30ec3b97afb9 49.9 KB127.9 KB
    https://challenges.cloudflare.com/turnstile/v0/b/8359bcf47b68/api.js?onload=Xwypo8&render=explicit 16.3 KB47.8 KB
    https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/orchestrate/chl...strate/chl_api/v1 57.3 KB139.3 KB
    Don't use private headers on static content (privateAssets)The page has 3 requests with private headers. Make sure that the assets really should be private and only used by one user. Otherwise, make it cacheable for everyone.70
    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://gitlab.com/cdn-cgi/challenge-platform/h/b/orchestrate/chl_page/v1?ray=964d30ec3b97afb9
  • https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/turnstile/if/ov.../new/normal/auto/
  • https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/orchestrate/chl...strate/chl_api/v1
  • Avoid missing and error requests (responseOk)The page has 2 error responses. The page has 1 response with code 401. The page has 1 response with code 403. 80
    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:
  • https://gitlab.com/users/sign_in
  • https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/pat/964d30ef69f...4/3TCmWk65Zod8BjP
  • Best practice advice (76)

    TitleAdviceScore
    Meta description (metaDescription)The page is missing a meta description.0
    Description: Use a page description to make the page more relevant to search engines.
    Do not send too long headers (longHeaders)https://gitlab.com/d...d/merge_requests/ has a header content-security-policy that is 1648 characters long. https://gitlab.com/d...d/merge_requests/ has a header content-security-policy that is 1648 characters long. https://gitlab.com/users/sign_in has a header content-security-policy that is 1648 characters long. https://gitlab.com/favicon.ico has a header content-security-policy that is 1621 characters long. https://gitlab.com/a...b2b82aa5143ef.png has a header content-security-policy that is 1621 characters long. https://gitlab.com/favicon.ico has a header content-security-policy that is 1621 characters long. https://challenges.c...vPN7UHdVLYI1yMRzT has a header cf-chl-gen that is 857 characters long. https://challenges.c...4/3TCmWk65Zod8BjP has a header www-authenticate that is 1913 characters long. 92
    Description: Do not send response headers that are too long.
    Offenders:
  • https://gitlab.com/dashboard/merge_requests/
  • https://gitlab.com/dashboard/merge_requests/
  • https://gitlab.com/users/sign_in
  • https://gitlab.com/favicon.ico
  • https://gitlab.com/assets/favicon-72a2cad5025aa931d6ea56c3201d1f18e68a8cd39788c7...b2b82aa5143ef.png
  • https://gitlab.com/favicon.ico
  • https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/flow/ov1/104435...vPN7UHdVLYI1yMRzT
  • https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/pat/964d30ef69f...4/3TCmWk65Zod8BjP
  • Avoid too many third party requests (thirdParty)The page do 47% requests to third party domains (8 requests and 324.7 kB). First party is 9 requests and 73.4 kB. The page transfer more bytes from third party domains (324.7 kB) then first party (73.4 kB). The regex .*gitlab.* was used to calculate first/third party requests.0
    Description: Do not load most of your content from third party URLs.
    Avoid unnecessary headers (unnecessaryHeaders)There are 16 responses that sets a server header. 84
    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://gitlab.com/dashboard/merge_requests/
  • https://gitlab.com/dashboard/merge_requests/
  • https://gitlab.com/users/sign_in
  • https://gitlab.com/cdn-cgi/challenge-platform/h/b/orchestrate/chl_page/v1?ray=964d30ec3b97afb9
  • https://challenges.cloudflare.com/turnstile/v0/b/8359bcf47b68/api.js?onload=Xwypo8&render=explicit
  • https://gitlab.com/favicon.ico
  • https://gitlab.com/cdn-cgi/challenge-platform/h/b/flow/ov1/375833030:1753460053:...0plY29kk7t_seY0tP
  • https://gitlab.com/assets/favicon-72a2cad5025aa931d6ea56c3201d1f18e68a8cd39788c7...b2b82aa5143ef.png
  • https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/turnstile/if/ov.../new/normal/auto/
  • https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/cmg/1
  • https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/orchestrate/chl...strate/chl_api/v1
  • https://gitlab.com/favicon.ico
  • https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/flow/ov1/104435...vPN7UHdVLYI1yMRzT
  • https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/d/964d30ef69ff4...3/k-HZ7mxzLyy3zlC
  • https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/pat/964d30ef69f...4/3TCmWk65Zod8BjP
  • https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/flow/ov1/104435...vPN7UHdVLYI1yMRzT
  • Privacy advice (93)

    TitleAdviceScore
    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://gitlab.com/users/sign_in
  • https://gitlab.com/users/sign_in
  • Set a strict transport header to make sure the user always use HTTPS. (strictTransportSecurityHeader)A strict transport header is set but miss out on setting includeSubDomains90
    Description: The HTTP Strict-Transport-Security response header (often abbreviated as HSTS) lets a web site tell browsers that it should only be accessed using HTTPS, instead of using HTTP. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security.
    Offenders:
  • https://gitlab.com/users/sign_in
  • Page info

    Page info
    TitleJust a moment...
    Width1350
    Height699
    DOM elements41
    Avg DOM depth5
    Max DOM depth8
    Iframes0
    Script tags3
    Local storage0 b
    Session storage0 b
    Network Information API4g

    Technologies used to build the page.

    Data collected using Wappalyzer version 6.10.66. 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
    GitLab 100  Issue trackers Development
    Ruby 100  Programming languages
    Ruby on Rails 100  Web frameworks
    Vue.js 100  JavaScript frameworks
    HSTS 100  Security
    Cloudflare 100  CDN
    HTTP/3 100  Miscellaneous
    | Browser metrics | Visual Metrics | Largest Contentful Paint | Cumulative Layout Shift | Interaction To Next Paint | Long Aninimation Frames | Metrics from CDP | Server timings | 

    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 typeDIV
    Element/tag<div id="ZEWft5" class="core-msg spacer spacer-top"></div>
    Render time 476 ms
    Element render delay154 ms
    TTFB322 ms
    Resource delay0 ms
    Resource load duration0 ms
    Element idZEWft5
    Load time0 ms
    Size (width*height)50816
    DOM path
    div:eq(0) > div > div#ZEWft5> div:eq(0) > div > div#ZEWft5>
    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.

    Detected Cumulative Layout Shift

    0.01863 cumulative layout shift collected from the Cumulative Layout Shift API.

    These HTML elements contribute most to the Cumulative Layout Shifts of the page. The higher score, the more layout shift.

    ScoreHTML Element
    0.01191<div id="ZEWft5" class="core-msg spacer spacer-top"></div>,<div class="footer" role="contentinfo"></div>
    body > div:eq(0) > div > div#ZEWft5,body > div:eq(1)
    0.00672<div id="ZEWft5" class="core-msg spacer spacer-top"></div>,<div class="footer" role="contentinfo"></div>
    body > div:eq(0) > div > div#ZEWft5,body > div:eq(1)
    Layout shift

    The elements that have shifted place is highlighted in the image (that have a higher value than 0.01). If the element shifted outside of the viewport, you will not see it there. It can be hard to understand what content that has shifted, if that's the case, checkout the video or the filmstrip of the run.

    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 120 ms.

    Event typepointerover
    Element typeBODY
    Element class name
    Event targethtml>body
    Load state when the event happeneddom-content-loaded

    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
    420 ms469.3 ms1 ms0.1 ms0.9 ms
    No availible script information.
    Blocking duration Work durationRender durationPreLayout DurationStyle And Layout Duration
    416.8 ms473.8 ms0.6 ms0.5 ms0.1 ms
    No availible script information.
    Blocking duration Work durationRender durationPreLayout DurationStyle And Layout Duration
    265.4 ms315 ms0.7 ms0.1 ms0.6 ms
    No availible script information.
    Blocking duration Work durationRender durationPreLayout DurationStyle And Layout Duration
    248.2 ms298.3 ms0.3 ms0 ms0.3 ms
    No availible script information.
    Blocking duration Work durationRender durationPreLayout DurationStyle And Layout Duration
    231 ms280.2 ms1.2 ms0.1 ms1.1 ms
    No availible script information.
    Blocking duration Work durationRender durationPreLayout DurationStyle And Layout Duration
    188.4 ms238.7 ms0.3 ms0 ms0.3 ms
    No availible script information.
    Blocking duration Work durationRender durationPreLayout DurationStyle And Layout Duration
    160.2 ms209.9 ms0.6 ms0.6 ms0 ms
    No availible script information.
    Blocking duration Work durationRender durationPreLayout DurationStyle And Layout Duration
    133 ms194.2 ms0.7 ms0.7 ms0 ms
    No availible script information.
    Blocking duration Work durationRender durationPreLayout DurationStyle And Layout Duration
    99.5 ms153 ms1 ms0 ms1 ms
    https://gitlab.com/cdn-cgi/challenge-platform/h/b/orchestrate/chl_page/v1?ray=964d30ec3b97afb9

    Invoker:  XMLHttpRequest.onreadystatechange
    Invoker Type: event-listener
    Window attribution: self
    Source char position: 71136

    Blocking duration Work durationRender durationPreLayout DurationStyle And Layout Duration
    88.7 ms138.8 ms0.3 ms0 ms0.3 ms
    No availible script information.

    Server timings

    namedurationdescription
    chlray0964d30ec3b97afb9

    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
    JSEventListeners34
    LayoutObjects89
    MediaKeySessions0
    MediaKeys0
    Nodes236
    Resources4
    ContextLifecycleStateObservers9
    V8PerContextDatas3
    WorkerGlobalScopes2
    UACSSResources0
    RTCPeerConnections0
    ResourceFetchers6
    AdSubframes0
    DetachedScriptStates21
    ArrayBufferContents2
    LayoutCount29
    RecalcStyleCount63
    LayoutDuration71
    RecalcStyleDuration17
    DevToolsCommandDuration23
    ScriptDuration3128
    V8CompileDuration1
    TaskDuration4706
    TaskOtherDuration1466
    ThreadTime4
    ProcessTime9
    JSHeapUsedSize55085128
    JSHeapTotalSize127561728
    FirstMeaningfulPaint472
    | 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 requests17
    Total domains2
    Total transfer size388.8 KB
    Total content size680.6 KB
    Responses missing compression8
    Number of cookies1
    Third party cookies0
    Requests per response code
    20010
    3012
    3022
    3071
    4011
    4031

    Largest assets on the page (by transfer size)

    Requests and sizes per content type

    ContentHeader SizeTransfer SizeContent SizeRequests
    html0 b8.1 KB26.5 KB1
    javascript0 b123.4 KB315.1 KB3
    image0 b2.1 KB1.1 KB3
    plain0 b247.7 KB330.8 KB3
    Total0 b381.3 KB673.5 KB10

    Data per domain

    DomainTotal download timeTransfer SizeContent SizeRequests
    gitlab.com643 ms71.7 KB154.7 KB9
    challenges.cloudflare.com622 ms317.1 KB525.9 KB8

    Expires and last modified statistics

    typeminmedianmax
    Expires0 seconds0 seconds1 year
    Last modified4 days4 days4 days

    Requests loaded after onLoad event

    Included requests done after load event end.

    ContentTransfer SizeRequests
    html0 b0
    css0 b0
    javascript0 b0
    image598 B1
    font0 b0
    plain233.0 KB2
    Total235.3 KB5

    Requests loaded after onContentLoad

    Includes requests done after DOM content loaded.

    ContentTransfer SizeRequests
    html8.1 KB1
    css0 b0
    javascript73.5 KB2
    image2.1 KB3
    font0 b0
    plain247.7 KB3
    Total333.1 KB12
    | Categories | | First vs third | 

    Third party

    Third party requests categorised by Third party web version 0.26.2.

    CategoryRequests
    CategoryNumber of tools

    Unmatched third party domains

    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.

    challenges.cloudflare.com

    First party requests and sizes per content type

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

    ContentHeader SizeTransfer SizeContent SizeRequests
    html0 b0 b0 b0
    css0 b0 b0 b0
    javascript0 b49.9 KB127.9 KB1
    image0 b1.3 KB591 B1
    font0 b0 b0 b0
    plain0 b14.7 KB19.1 KB1
    Total82 B71.7 KB154.7 KB9

    Third party requests and sizes per content type

    ContentHeader SizeTransfer SizeContent SizeRequests
    html0 b8.1 KB26.5 KB1
    css0 b0 b0 b0
    javascript0 b73.5 KB187.1 KB2
    image0 b806 B560 B2
    font0 b0 b0 b0
    plain0 b233.0 KB311.7 KB2
    TotalN/A317.1 KB525.9 KB8
    afterPageCompleteCheck.jpg | layoutShift.jpg | largestContentfulPaint.jpg | 

    Screenshots

    afterPageCompleteCheck.jpg

    afterPageCompleteCheck.jpg

    layoutShift.jpg

    layoutShift.jpg

    largestContentfulPaint.jpg

    largestContentfulPaint.jpg