Die Zeit wo Websiten noch Dokumente waren ist dank der heutigen JavaScript-Kultur leider Geschichte, jetzt glaubt jeder Webentwickler seine Website muss eine superinnovative Web 4.0-Anwendung sein, die ohne drölfzig JavaScript Frameworks nicht mehr auskommt, denn man muss ja jeden Trend eingebaut haben und überhaupt die Entwicklungsgeschwindigkeit ist ja viel besser wenn ich mir spare diese 30 Zeilen Code zu schreiben und stattdessen 3 Frameworks mit einem Gesamtgewicht von 294kB reinlade! Die Browser-Hersteller geben da leider die Möglichkeiten, Stichwort History API, serviceWorker, localStorage, contextMenu API, WebGL u.s.w.
Da sieht man halt den Unterschied dass versierte Anwender Webseiten eher als Dokumente mit Links zu anderen Dokumenten ansehen, während Webentwickler eher eine alles ersetzende Anwendungsumgebung in der Vorstellung haben und auch auf Biegen und Brechen alles im Browser umsetzen wollen.
Single-Page-Applications mit History API-Rumgepfusche baut man heute damit man beim Klick auf Links nur die Teile der Website neu laden muss, die sich auch ändern bzw. man kann das im Hintergrund tun mit schönen (und unnützen) Animationen. Das hatten wir früher auch schonmal ohne JavaScript und das hieß Framesets. Waren dann aber irgendwie als schlechter Stil verpönt. Naja, hätte man auch sicherlich besser umsetzen müssen als <frameset> aber wär schon ohne JS gegangen. Template-Engine bleibt hier natürlich auf dem Server.
Insgesamt finde ich war ein Prinzip ala Flash mit Click-to-Play schon gar nicht so verkehrt: Die Website ist nur ein Dokument aus HTML und CSS, macht nix interaktiv, aber man kann Flash-Anwendungen als Applet einbinden, die der Nutzer dann auf Wunsch starten kann. Flash ist natürlich Mist, aber wenn man WebAssembly/JavaScript-Archive als Anwendung betrachten. Oder man hätte JavaScript gar nicht erst so viele APIs gegeben, sondern hätte ein sauberes Anwendungsformat definiert (z.B. zip Datei mit js Dateien drinne), welche man dann in eine Website einbinden kann, der Nutzer aber explizit starten muss. Und nur die können dann APIs wie WebGL und localStorage benutzen.