The Website Obesity Crisis (2015)
idlewords.com
idlewords.com
My home page, though admitted sparse and functional, is a total 39 KB download, including 9 link icons and a blurred full background image. (Turns out blurring the image allows you some incredible levels of JPEG compression with few artifacts.) I worked a bit to get it there. And that's nothing compared with what some demoscene folks can do. :)
The other day in one of my "get off my lawn" moments, I declared to the Rails app I was messing with that, "Every web framework sucks!" And then quickly amended the sentiment to include every test framework and build framework, for good measure.
I mean, they have their place for rapid development, of course. But the accompanying bloat and dependency surface hurts my soul.
FTR, here is a complete Solitaire game in ~30 kB over-the-wire: https://FreeSolitaire.win/
Last time I checked, an update for Microsoft Solitaire was 30 megabytes…
I still maintain though if folks spent the time on it, they could get same the effect they were looking for with 10% the bandwidth.
It is surprisingly common for content to contradict presentation in such articles. Well, it is mentioned in the article already, but still strange how common it seems to be.
Edit: though this is not exactly an article, but rather a presentation's/talk's "text" version, and the illustrations are slides. So it probably wasn't meant to look/be quite like that.
This was published in 2015 - since then the loading="lazy" attribute has gained widespread browser support. I've used that myself for some of my talk-as-blog-post pieces, eg https://simonwillison.net/2022/Nov/26/productivity/
The horror
The website obesity crisis (2015) - https://news.ycombinator.com/item?id=27355556 - June 2021 (89 comments)
The Website Obesity Crisis (2015) - https://news.ycombinator.com/item?id=22283344 - Feb 2020 (22 comments)
The Website Obesity Crisis (2015) - https://news.ycombinator.com/item?id=17943754 - Sept 2018 (30 comments)
The Website Obesity Crisis (2015) - https://news.ycombinator.com/item?id=14088092 - April 2017 (83 comments)
The Website Obesity Crisis (2015) - https://news.ycombinator.com/item?id=11659026 - May 2016 (90 comments)
The Website Obesity Crisis - https://news.ycombinator.com/item?id=10820445 - Jan 2016 (367 comments)
htmx btw is about 12 KB gzipped and enables a surprising amount of interactivity on pages.
I just don't have a good intuition for what's happening here. In these discussions, people always talk like a webpage with 1 MB of JavaScript is a monstrosity, which, yeah, makes sense from an absolute perspective; it takes a lot of lines of source code to fill a text file up to 1 MB. But from a relative perspective, I have a bunch of programs on my machine that take up hundreds of MB of storage, and some do heavy scientific computations, but my laptop fan isn't pegged out most of the time, until I visit a page on reddit.com (so now I always make sure to use old.reddit.com instead).
I have a graduate-student understanding of computer systems, but again I just don't have a strong intuition for what's happening here. Can someone explain?
https://www.thedodo.com/dog-drops-50-pounds-now-models-87229...
Heh ;)
Funnily enough, he fixed it, but now has an almost 200kb PNG in the header: https://idlewords.com/images/toothfish.png
At least his server seems to be so slow or HN-hugged, that I could actually see the images slowly loading.
Anyhow: an old classic and very good article. Miss (2015) in the title.
I am typing this comment on a machine far and away more powerful than the one I had back then, I'm not doing anything much differently to what I was doing back then and don't notice performance improvements at all... almost certainly the internet is slower, but I think desktop performance is starting to wane as well.
> If you open that tweet in a browser, you'll see the page is 900 KB big.
If you look at how big the page is now you'll get something along the lines of this: https://gtmetrix.com/reports/twitter.com/aJKMCxUq/
2.00 MB (7.56 MB uncompressed)
1.68 MB of JavaScript
0.18 MB of fonts
0.08 MB of HTML
0.04 MB of images
... (some other requests)
(185 total page requests)
On other sites you see similar amounts of data, though sometimes more custom fonts, or images, or other media.I used to think that this was because the developers just don't care, or that designers and product managers go wild (which I still do, admittedly), but in the recent years I've felt more and more that this is because the way browsers work is flawed. Nobody seems to complain (much) that browser X install size is Y MB, yet for whatever reason each site is treated as its unique universe where you often re-download what is mostly the same thing over and over, the wasted bandwidth accumulating over time.
Here's a slightly crazy thought experiment:
- what if all of the frameworks/libraries decoupled the framework/library code from the application code (e.g. React, Angular, Vue), essentially you'd have react-version-X.js and my-site-com-app.js
- maybe even do this for the most popular libraries and component frameworks, like react-primevue-version-X.js
- what if browsers shipped the most popular framework/library code versions in them, so those would never need to be downloaded from the visited sites, but would be available locally already
- what if browsers did the same for most of the popular freely available fonts, too - enough to placate the designers, say, the top 100 of the most popular fonts under each category (serif, sans serif, monospace, ...)
- everything else can be downloaded the old way, or maybe browsers can provide a package manager of sorts (e.g. site requested Alpine version X, this will be downloaded and re-used for other sites)
- maybe mandate that only X updates per year are allowed per framework/library or other resource type, to fight off bloat due to trigger happy teams who want to release often
A little bit like a CDN, except that baked into the browser (or selectable as an install option). Of course, this will never happen, because it would require a lot of work on the part of the browsers, would create an "in crowd" of supported resources with everything else having lower chances of becoming as popular, nor could people ever agree upon what are the most popular resources out there to pre-install. But my argument is that we're stuck with the same popular Google Fonts in most sites anyways, as well as a few large JavaScript frameworks that everyone uses regardless, so a lot of the current bloat makes little sense anyways.Then again, one can feasibly also imagine a world where the user is given a choice to only view downscaled images on all the sites that they visit (which, IIRC, was the case with the Opera Mobile browsers a while back) if they want, or a bunch of other simple to use options, like never downloading custom (non-icon) fonts, should they choose to. But that's not quite the world that we live in - especially in regards to JavaScript, which you often cannot disable and hope that the site will keep working, because it won't.
Worse yet, optimizations that are cool and useful, like how Google Fonts splits up fonts into multiple files based on the character sets, so only the ones needed actually are downloaded, are hard to pull off yourself for arbitrary fonts and so on, for example: https://fonts.googleapis.com/css2?family=Open+Sans&display=s... This last bit is also why my own site is unreasonably bloated (aside from the fact that I chose a non-web-safe font in the first place, to look more like the fancy sites): https://gtmetrix.com/reports/kronis.dev/l0nIApXL/
I think it's still perfectly possible to do that with React but everyone wants to write JSX and transpile it instead of doing this procedurally so it gets webpacked anyway. Caveat, I haven't touched React in about 4 years so I don't know if that's still true.
Your final point about disallowing more than X updates per year is unworkable due to the unpredictability of security patches.
Browsers don't share cache between sites any more.
https://developer.chrome.com/blog/http-cache-partitioning/
https://arstechnica.com/gadgets/2020/12/firefox-v85-will-imp...