Zero-dependency performance
Every dependency you add is a decision made for you: a version, a bundle, a maintenance window. For many sites, the cheapest performance win isn't a caching strategy or a CDN — it's not shipping the code in the first place.
What "fast" actually means
Users don't experience bytes; they experience time. The metrics that track experience most closely are First Contentful Paint, Largest Contentful Paint, and Interaction to Next Paint. All three improve the moment your payload stops blocking the main thread.
The fastest JavaScript is the JavaScript you never download, parse, or execute.
The cost of a bundle
A typical framework starter ships 150–200 KB of gzipped JS. On a throttled 4G connection that's roughly 1–2 seconds of pure network + parse time before a single pixel of your app appears. Compare that to a 4 KB script:
// script.js — the entire behavior of this site
document.getElementById("year").textContent = new Date().getFullYear();
// ...theme toggle + form handler, ~40 lines total
When frameworks earn their keep
Frameworks are a trade: developer velocity and component ergonomics in exchange for runtime weight. They're worth it when you have:
- Heavy client-side state shared across many views
- A team that standardizes on one component model
- Features like optimistic updates that need a runtime
For marketing pages, documentation, and small tools — the majority of the web — plain HTML + CSS + a little JS will usually win on every metric that matters.