Aller au contenu

Histoire

JavaScript est ne en 10 jours chez Netscape en 1995, conçu par Brendan Eich pour animer les pages web. Depuis, il est devenu le seul langage universel du navigateur, puis a conquis le serveur avec Node.js, le mobile avec React Native, et le desktop avec Electron.


Origines : Brendan Eich et Netscape (1995)

En 1995, Netscape cherche à enrichir son navigateur Navigator avec un langage de script léger, distinct de Java. Brendan Eich développé le premier prototype en seulement 10 jours. Le langage est d'abord appelé Mocha, puis LiveScript, avant d'être renomme JavaScript pour profiter de la popularité de Java — une décision purement marketing.

JavaScript est intégré dans Netscape Navigator 2.0 en decembre 1995. Microsoft répond rapidement avec JScript dans Internet Explorer 3.0 (1996), une implémentation compatible mais distincte.


Standardisation ECMAScript

Face à la fragmentation entre implémentations, Netscape soumet JavaScript à l'ECMA International en 1996. Le standard ECMAScript est publie en 1997.

Version Année Apports majeurs
ES1 1997 Première spécification officielle
ES3 1999 Expressions régulières, try/catch, améliorations de chaînes
ES5 2009 Mode strict, JSON natif, Array.forEach/map/filter, Object.keys
ES6 / ES2015 2015 let/const, arrow functions, classes, modules, Promises, destructuring, template literals
ES2016 2016 Array.includes, opérateur **
ES2017 2017 async/await, Object.entries/values, SharedArrayBuffer
ES2018 2018 Rest/spread sur objets, Promise.finally, iterations asynchrones
ES2019 2019 Array.flat, Object.fromEntries, Optional catch binding
ES2020 2020 Optional chaining ?., Nullish coalescing ??, BigInt, Promise.allSettled
ES2021 2021 Logical assignment (&&=, `
ES2022 2022 Top-level await, class fields, at() sur tableaux, Object.hasOwn
ES2023 2023 Array.findLast, Array.toSorted/toReversed (immutable), Hashbang Grammar
ES2024 2024 Promise.withResolvers, Object.groupBy, Map.groupBy, ArrayBuffer.resize

Cycle annuel

Depuis ES2015, TC39 (le comite technique) publie une nouvelle version chaque année en juin. Les propositions suivent un processus en 5 stages (0 a 4) avant intégration dans le standard.


Les guerres des navigateurs et le DOM

Les années 1997-2006 sont marquées par une fragmentation intense : IE et Netscape implementent des API DOM incompatibles. La naissance de jQuery (2006) par John Resig unifie l'accès au DOM avec une syntaxe cross-browser, et devient la bibliotheque JavaScript la plus utilisée pendant plus d'une decennie.

Ajax (Asynchronous JavaScript And XML), popularise par Google Maps et Gmail en 2005, change la perception du Web : les pages deviennent dynamiques sans rechargement complet.


Node.js : JavaScript côté serveur (2009)

En 2009, Ryan Dahl présenté Node.js à la JSConf — un environnement d'exécution JavaScript base sur le moteur V8 de Chrome, avec une boucle d'événements non-bloquante. C'est une revolution : JavaScript sort du navigateur.

// server.js — Premier serveur HTTP avec Node.js (style original)
import { createServer } from 'node:http';

const server = createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello from Node.js\n');
});

server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});

L'écosystème npm (Node Package Manager), lance la même année, devient le plus grand registre de paquets au monde avec plus de 2 millions de paquets en 2024.


TypeScript : la surcouche typee de Microsoft (2012)

Microsoft publie TypeScript en octobre 2012. Conçu par Anders Hejlsberg (le créateur de C#), TypeScript ajoute un système de types statiques optionnel au-dessus de JavaScript standard.

TypeScript est un surensemble de JavaScript : tout code JavaScript valide est du TypeScript valide. Le compilateur tsc transpile TypeScript en JavaScript standard.

// types.ts — Exemple de typage TypeScript 5.x
interface User {
  id: number;
  name: string;
  email: string;
  role: 'admin' | 'editor' | 'viewer'; // union litterale
}

// Generique avec contrainte
function getById<T extends { id: number }>(items: T[], id: number): T | undefined {
  return items.find((item) => item.id === id);
}

// Type utilitaire — Partial rend tous les champs optionnels
type UserUpdate = Partial<Omit<User, 'id'>>;

const update: UserUpdate = { name: 'Alice' }; // valide

TypeScript est adopte massivement : Angular (2016), Vue 3 (2020), puis la plupart des grands projets open-source migrerent vers TypeScript.


Runtimes alternatifs : Deno et Bun

Deno (2020)

Deno est créé par Ryan Dahl lui-même, en réaction aux regrets exprimes publiquement sur Node.js en 2018. Deno corrige plusieurs problèmes :

  • Sécurité par défaut (permissions explicites pour le filesystem, réseau)
  • Support natif de TypeScript sans configuration
  • Compatibilité native avec les URL d'import (Web standards)
  • Outillage intégré : formatter, linter, test runner, bundler
// hello_deno.ts — Deno 2.x avec permissions
const response = await fetch('https://api.github.com/users/denoland');
const data = await response.json();
console.log(`Deno org: ${data.login}, repos: ${data.public_repos}`);

// Execution : deno run --allow-net hello_deno.ts

Bun (2023)

Bun est un runtime JavaScript/TypeScript construit en Zig, conçu pour la performance maximale. Il intégré un runtime, un bundler, un package manager et un test runner dans un seul binaire.

Runtime Moteur JS TypeScript natif Compatibilité npm Performance (req/s)
Node.js V8 Via tsc/ts-node Complète Référence
Deno V8 Native Partielle (npm:) Similaire Node.js
Bun JavaScriptCore Native Complète 2-4x Node.js

Node.js reste dominant

Malgre la concurrence, Node.js (v22 LTS en 2024) reste le standard de l'industrie pour la production. Bun est adopte en dev pour sa rapidité d'installation et Deno pour les edge runtimes (Deno Deploy, Cloudflare Workers).


Positionnement actuel

JavaScript et TypeScript occupent une position unique en 2024-2025 :

  • Navigateur : seul langage natif (via WASM, d'autres langages peuvent cibler le web mais JS reste dominant)
  • Serveur : Node.js, Deno, Bun concurrencent Python, Go et Java
  • Full-stack : Next.js, Nuxt, SvelteKit unifient front et back en un seul langage
  • Mobile : React Native, Expo pour iOS/Android
  • Desktop : Electron (VS Code, Figma, Slack), Tauri (Rust + WebView)
  • Edge / serverless : Cloudflare Workers, Vercel Edge, Deno Deploy
  • Outils de build : Vite, esbuild, Rollup, Webpack (tous en JS/TS)

JavaScript est le langage le plus utilisé au monde selon le sondage Stack Overflow Developer Survey depuis 12 années consecutives (2013-2024). TypeScript figure dans le top 5 des langages les plus apprecies.


Chronologie résumée

Année Événement
1995 JavaScript créé par Brendan Eich chez Netscape en 10 jours
1996 JScript de Microsoft dans IE 3.0
1997 Standardisation ECMAScript 1
1999 ES3 — base stable pendant 10 ans
2005 Ajax popularise par Google Maps et Gmail
2006 jQuery unifie le DOM cross-browser
2009 Node.js par Ryan Dahl + naissance de npm
2010 Premiers frameworks MVC : Backbone, AngularJS
2012 TypeScript 0.8 par Microsoft
2013 React par Facebook, première popularisation JSX
2014 Vue.js par Evan You
2015 ES6/ES2015 — revolution du langage + Babel, Webpack
2016 Angular 2 (TypeScript first), Yarn comme alternative npm
2017 async/await dans ES2017 — fin du callback hell
2019 Deno annonce par Ryan Dahl
2020 ES2020, optional chaining, Vue 3, Deno 1.0
2021 Vite remplacé Webpack pour la rapidité de dev
2022 Bun beta, Node.js 18 LTS avec Fetch natif
2023 Bun 1.0 stable, TypeScript 5.0
2024 Node.js 22 LTS, ES2024, TypeScript 5.4, Bun 1.1