It is not really a brutal lifecycle at all, to be honest.
Everyone loves a good rant about how fast the JS frameworks burn out, but it is not frameworks that burn out, but rather:
In the 8+ years since Iphone/Android duo made a HUGE change in how we consume web content, we went from:
- Having static resolution for websites to dynamically changing site resolutions
- Having static HTML renders with some dynamic bits sprinkled over to full-blown SPA-s because of a variety of reasons*
- Having major new JavaScript versions and INSANE amounts of Javascript engine speedups that allow things that were unimaginable 8+ years ago
- Having gone from "nothing" to a CPU-based <canvas> to a full OpenGL ES-implementation, full GPU-based (<webGL>),
- Had went from procedural code to semi-class based systems towards functional towards functional reactive programming systems
And I could go on and on and on and on.
The DOM api matured during these years. The renderers got replaced. Their performance altered dramatically. Layouts went from "JUST USE TABLES" towards CSS, then towards Compile-to-css alternatives, etc. Single-core event systems got SharedArrayBuffers, webWorkers, we got from callbacks to promises, towards async/await. And do not get me started on almost getting observables properly.
The web has seen more transformations in terms of what is an "app" or a "website" in 8-10 years than ANY OTHER area in programming. It is only natural that widely different tasks need widely different tools to work with.