I’m curious about the HTTP/0.9 stuff. Last time I checked (four or five years ago, by making a trivial HTTP/0.9 server, as the first step of a “writing HTTP servers” tutorial series that never materialised), Firefox either wouldn’t render the output at all, or would render it as though it had been a text/plain response (can’t remember which it was). In other words, it’s not a real web page. I would expect precisely zero occurrences among the top million pages, not the thirty that 0.003% indicates. I think it’s <i>far</i> more likely (p≅0.9999) that these indicate some sort of error.<p>(For those unfamiliar with it, HTTP/0.9 is the label for a protocol where the client opens a TCP connection to the server and sends “GET /”, and the server responds with the body, verbatim, and closes the connection. No status codes, no headers, nothing.)
Use an adblocker. I save about 25 gigs and hours of my time every month. *<p><a href="https://www.ublockorigin.com" rel="nofollow">https://www.ublockorigin.com</a><p>* I block much more than ads.
<a href="https://catchjs.com/Blog/PerformanceInTheWild" rel="nofollow">https://catchjs.com/Blog/PerformanceInTheWild</a> — actual link to the people that did the study. Itnext.io just ripped it off with a small credit at the bottom.
As jameslk also mentioned, this article mistakenly uses "dominteractive" interchangeably with "time-to-interactive". They are not the same metric. Lighthouse uses a different algorithm for computing TTI.<p><a href="https://web.dev/interactive/#what-tti-measures" rel="nofollow">https://web.dev/interactive/#what-tti-measures</a><p><a href="https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming/domInteractive" rel="nofollow">https://developer.mozilla.org/en-US/docs/Web/API/Performance...</a>
<i>>If we were to believe this, we would conclude that moving requested resources from HTTP 1.1 to 2 gives a 1.8x speed-up, while going from HTTP 2 to 3 causes 0.6x slow down. Is it really true that HTTP 3 is a slower protocol? No: A more likely explanation is that HTTP 3 is rare, and that the few resources that are being sent over HTTP 3 (e.g. Google Analytics) are things that have a larger than average effect on dominteractive.</i><p>If you wanted to measure the effect of protocol, you could compare requesting with support HTTP/N to requesting with support for HTTP/N+1. Since this is all synthetic testing it shouldn't be too hard to run a controlled experiment instead of a correlational one.
Original article: <a href="https://catchjs.com/Blog/PerformanceInTheWild" rel="nofollow">https://catchjs.com/Blog/PerformanceInTheWild</a>
If you try to derive which framework is used based on global variables then you'll miss the ones that don't pollute the global namespace like that but just use closures etc. E.g: most modern frameworks+toolkits like React+Webpack as far as I know.
Not scope of this analysis, but my #1 regression is large PDF in tabs. It such a standard part of the web experience, especially in sharing academic research, that it feels like a legit pain point in dire need of an upgrade.
I can guess without reading:<p>1 ads<p>2 client side rendering. Youtube nowadays is 400-1000 kilobytes of Json + ~!8! megabyte of javascript(1). Pre Polymer (YT client side rendering engine update) you would receive 50KB of pre rendered pure HTML that would display instantly. Nowadays scrolling comments results in seeing them appear one by one while browser struggles with constant DOM updates.<p>1) >7MB desktop_polymer_inlined_html_polymer_flags.js + 1.6MB base.js<p>Edit: After reading the article<p>>Top linked URLs<p>That's amazing. I've got the same combination on my luggage ^^^^^ tracking blocker, every single one of those (even the yt iframe one).<p>Nothing bout ads or tracking.<p>>What marketing strategies does Itnext use? Get traffic statistics, SEO keyword opportunities, audience insights, and competitive analytics for Itnext.<p>oh, Itnext is all about that user tracking
I love this quote measuring the age of jQuery in different units:<p><i>JQuery was first released in 2006, which is 14 years ago in human years, but much longer in JavaScript years. Measured in Angular versions, it is probably hundreds of versions ago.</i>
One more point I observed while UI performance debugging earlier: Even though JS are cached by browsers, still loading them from disk (cache) to memory during page load is actually slow. Of course it also depends on machine capacities.
It seems web performance is one of the least understood topics, even for engineers. Unfortunately even this author makes the mistake of confusing DOM Interactive[0] with Time to Interactive[1]. And yet this is a better analysis than what I often see repeated backed with no evidence.<p>For example, the myths about page weight and big SPA JS websites being the source of web performance issues is one I see so frequently here. Even in this thread others have started to claim the problem is all JS (take a closer look at the article). And it's good to see some actual data to back what I actually have seen optimizing many websites myself (spoiler: a lot of badly performing sites use jQuery).<p>For speed (which is also a complex subject that can't be captured in one metric[2]), the problem isn't page weight or JS frameworks, it's <i>network latency</i>[3]. Because you can't optimize the speed of light. This is especially true for websites that connect to many different origins (usually for different types of analytics services) and for many things related to the critical render path[4].<p>The issues I see most often are not the huge frameworks loading, but inefficient loading of all resources, especially those that will affect user-centric timing metrics. I frequently see many render-blocking CSS and JS files loaded which increases First Contentful Paint. I see images, script code, and other resources that affect below-the-fold content loaded before above-the-fold content and resources. And of course my favorite: above-the-fold content loaded with JS. These affect Largest Contentful Paint. Etc etc.<p>Of course we can all claim the problem is something else and collectively decide to switch to server-side rendering as an industry but this won't fix issues with web performance. Understanding how browsers load pages and how your users perceive the load will.<p>0. <a href="https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming/domInteractive" rel="nofollow">https://developer.mozilla.org/en-US/docs/Web/API/Performance...</a><p>1. <a href="https://web.dev/interactive/" rel="nofollow">https://web.dev/interactive/</a><p>2. <a href="https://developers.google.com/web/fundamentals/performance/speed-tools#common_myths_about_performance" rel="nofollow">https://developers.google.com/web/fundamentals/performance/s...</a><p>3. <a href="https://www.speedshop.co/2015/11/05/page-weight-doesnt-matter.html" rel="nofollow">https://www.speedshop.co/2015/11/05/page-weight-doesnt-matte...</a><p>4. <a href="https://developers.google.com/web/fundamentals/performance/critical-rendering-path" rel="nofollow">https://developers.google.com/web/fundamentals/performance/c...</a>
> tracking every conceivable performance metric<p>Technically it's not a metric for one-of rendering, but memory leaks by an open browser tab have bugged me a bit lately.<p>Safari does a per URL report in MacOS, and the ancient MacBook with "only" 8GB RAM gets a tad hot and bothered when a local PC store page runs up a 1.5 GB tab just sitting there, GMail snarfs 1 GB if not opened in a fresh tab once in a while, etc.
Tangential question: are there other giveaways than download time for a cached document which could be used by malicious scripts?<p>I ask because I don't understand why a zero download time for a cached document couldn't be simply masked by some (random) wait by the browser instead of downloading the file again.<p>From the chrome update page linked in the article, the explanation is:<p>> However, the time a website takes to respond to HTTP requests can reveal that the browser has accessed the same resource in the past, which opens the browser to security and privacy attacks, [...]<p>which seems to indicate that only time matters in the attacks. Yet, the third bullet point suggests:<p>> Cross-site tracking: The cache can be used to store cookie-like identifiers as a cross-site tracking mechanism.<p>as a possible attack based on the cache, which doesn't seem to involve document download time.
I knew about googleanalytics; some years ago, back when browsers still had a status bar at the bottom, I noticed many sites waiting on it. So I redirected that domain to 127.0.0.1 and went on my way noticeably faster.<p>I'd not encountered Amazon Publisher Services but this article makes them look very bad.
It's pretty obvious. Javascript. Web applications that display text and media are <i>slow</i>. Web documents that display text and media are fast.
The HTTP protocol level has got to be highly confused by being served from a high-performing AS. Won't any technique appear to be correlated with faster load times if it happens to be served from e.g. the same EC2 region where they ran these browsers?
Pages with rocket-lazy-load are generally faster.<p>AFAIK Rocket is a Rust framework and my guess is that the average Rust dev cares more about perf. Which would imply that perf could be more about mindset than technology.<p>But that's just my humble interpretation...
See also the Web Almanac for an in-depth look at the state of the web: <a href="https://almanac.httparchive.org/en/2020/" rel="nofollow">https://almanac.httparchive.org/en/2020/</a>
Burn the DOM with fire. I'm so allergic to it. I'd rather write my own 2D tile tree format, with a simple flex-like rendering layout, than to work with HTML and expect reliability. HTML was never designed for interactive applications.<p>The historic reality is that HTML served as a "backdoor"/gateway to let the linux community compete with microsoft: linux devs could ship their code for windows clients.<p>Now, HTML webapps cannot run properly on a mobile platform without depleting expensive batteries. So each mobile platform are making bucks on the back of developers who have to work twice as hard.<p>I have very high hopes that webassembly could somehow solve all those problems, but there are several problems:<p>* Not all browser vendors like WASM and I doubt that any WASM progress would be supported equally.<p>* WASM toolchains are not really mature for most languages. Compiler makers don't have a lot of incentive working with WASM.<p>* The DOM would still exist.