Skip to content
Go back

Web scripting

Context

Technology tends to be easier to understand if you understand its chronology. So here’s a brief on scripting in the web stack.

Basic Premise

In the beginning, there was HTML, CSS, and Javascript. HTML to design what the page layout and content should be. CSS to style the page. Javascript to dynamically change the page.

Modern Tech

And over time, new tech came with features:

Finer Details

Briefs on each

Timeline

1995
│
├─ JavaScript (Brendan Eich)
│   ├─ Runs in browser
│   ├─ Single-threaded
│   └─ Script tags, globals everywhere
│
├─ DOM APIs (Browser vendors)
│   └─ JS can manipulate HTML/CSS
│
2005
│
├─ AJAX
│   ├─ XMLHttpRequest
│   └─ Web apps instead of page reloads
│
2009
│
├─ Node.js
│   ├─ JS outside the browser
│   ├─ Event loop
│   └─ npm ecosystem
│
2015
│
├─ ES6 / ES2015  ← HUGE SHIFT
│   ├─ let / const
│   ├─ arrow functions
│   ├─ classes
│   ├─ promises
│   ├─ import / export  ← ES MODULES
│   └─ modules become the standard
│
│   └─ (Everything modern builds on this)
│
2013
│
├─ React
│   ├─ Component model
│   ├─ Virtual DOM
│   ├─ Declarative UI
│   └─ JSX (syntax, not runtime)
│
│   └─ Solves: "state → UI sync"
│
2016–2018
│
├─ Bundlers (Webpack, Rollup, Parcel)
│   ├─ Bundle ES modules
│   ├─ Tree-shaking
│   └─ Dev servers + HMR
│
├─ TypeScript
│   ├─ Static types on JS
│   └─ Erased at build time
│
2016
│
├─ Next.js (built on React)
│   ├─ File-based routing
│   ├─ SSR (server-side rendering)
│   ├─ SSG (static generation)
│   └─ Opinionated React setup
│
│   └─ Solves: "how do I ship React?"
│
2019
│
├─ ES Modules in browsers (native)
│   ├─ <script type="module">
│   └─ No bundler *required* (but still useful)
│
2020
│
├─ React Hooks
│   ├─ useState
│   ├─ useEffect
│   └─ Composition over classes
│
2021
│
├─ WebAssembly (WASM)
│   ├─ Non-JS languages in the browser
│   ├─ Near-native speed
│   └─ JS orchestrates, WASM computes
│
│   └─ Complements JS, does NOT replace it
│
2022
│
├─ React Server Components (RSC)
│   ├─ Components run on server
│   ├─ Zero JS sent to browser
│   └─ Data fetching integrated
│
├─ Next.js App Router
│   ├─ Server vs Client components
│   ├─ Streaming / Suspense
│   └─ "use client" boundary
│
2023
│
├─ Turbopack
│   ├─ Rust-based bundler
│   ├─ Incremental builds
│   └─ Faster HMR
│
2024+
│
├─ Partial Prerendering
│   ├─ Static + dynamic in one page
│   └─ Streaming HTML
│
├─ Edge runtimes
│   ├─ V8 isolates
│   └─ Server logic near users
│
└─ WASM + JS hybrids
    ├─ Image processing
    ├─ Video
    └─ Crypto / ML

Share this post on:

Previous Post
React notes
Next Post
Compression