MFormations
Modern Frontend Engineering

Chapitre 24

Chapitre 24 — Annexes

Chapitre 24 — Annexes

Chapitre 24 — Annexes : Cours Complet

1. Glossaire Complet (150+ Entrées)

A

TermeDéfinition
Accessibilité (a11y)Pratique de conception permettant aux personnes handicapées d'utiliser le web. Les chiffres "11" représentent les 11 lettres entre "a" et "y".
ADRArchitecture Decision Record — Document qui capture une décision architecturale, son contexte, les alternatives et la justification.
AggregateErrorType d'erreur JS qui regroupe plusieurs erreurs (utilisé par Promise.any()).
AJAXAsynchronous JavaScript and XML — Technique pour échanger des données avec le serveur sans recharger la page.
APIApplication Programming Interface — Interface de communication entre logiciels.
ARIAAccessible Rich Internet Applications — Attributs HTML pour améliorer l'accessibilité des composants dynamiques.
ASTAbstract Syntax Tree — Représentation arborescente du code source (utilisé par Babel, ESLint, Prettier).
Async/AwaitSyntaxe ES2017 pour écrire du code asynchrone de manière synchrone.
Atomic DesignMéthodologie de conception de design systems (atomes → molécules → organismes → templates → pages).

B

TermeDéfinition
BabelTranspiler JS qui convertit le code moderne (ES6+) en code compatible navigateurs plus anciens.
BigIntType primitif ES2020 pour les entiers de taille arbitraire (suffixe n).
Block ScopePortée délimitée par les accolades {} (let, const).
BOMBrowser Object Model — API navigateur (window, navigator, location, history).
Border-BoxValeur de box-sizing où width/height incluent padding et border.
Bounded ContextConcept DDD délimitant le périmètre d'un modèle de domaine.
Box ModelModèle de boîte CSS : content → padding → border → margin.
BrotliAlgorithme de compression plus efficace que gzip (supporté par tous les navigateurs modernes).
BundlerOutil qui regroupe les modules JS (et CSS, images) en fichiers optimisés (Webpack, Vite, Rollup, esbuild).
Bundle PhobiaService qui calcule le coût (poids) d'ajouter un package npm à un bundle.

C

TermeDéfinition
CacheStockage temporaire de données pour accélérer les accès futurs (HTTP cache, Service Worker, Memory cache).
Call StackPile d'exécution où sont empilés les contextes de fonction (LIFO — Last In, First Out).
CaniuseSite de référence pour la compatibilité navigateur des fonctionnalités HTML/CSS/JS.
CDNContent Delivery Network — Réseau de serveurs distribués géographiquement pour servir le contenu plus rapidement.
CI/CDContinuous Integration / Continuous Deployment — Automatisation des tests et déploiements.
ClassSyntaxe ES6 pour créer des objets avec héritage prototypal (sucre syntaxique).
CLICommand Line Interface — Interface en ligne de commande.
ClosureCombinaison d'une fonction et de son environnement lexical (scope) au moment de sa création.
CLSCumulative Layout Shift — Métrique Core Web Vitals mesurant la stabilité visuelle.
CMSContent Management System — Système de gestion de contenu (WordPress, Contentful, Sanity).
Code SplittingTechnique de division du bundle JS en morceaux chargés à la demande (React.lazy, dynamic import).
CoercionConversion implicite de type en JavaScript (ex: 1 + '2' = '12').
CommonJSSystème de modules Node.js historique basé sur require() et module.exports.
ComposantBloc d'interface réutilisable (React, Vue, Svelte, Web Component).
Context (React)API de partage de données sans passer par les props (prop drilling).
Core Web VitalsEnsemble de métriques Google mesurant l'expérience utilisateur (LCP, FID, CLS).
CORSCross-Origin Resource Sharing — Mécanisme de sécurité navigateur pour les requêtes cross-origin.
CRDTConflict-free Replicated Data Type — Structure de données pour le travail collaboratif temps réel.
CRPCritical Rendering Path — Chemin critique de rendu (HTML → CSSOM → Render Tree → Layout → Paint).
CSS Custom PropertiesVariables CSS (--primary: blue; color: var(--primary)).
CSS GridSystème de mise en page CSS 2D (lignes et colonnes).
CSS ModulesTechnique de CSS localisé par défaut (noms de classe hashés).
CSSOMCSS Object Model — Représentation en arbre des règles CSS (utilisé par le navigateur pour le rendu).
CSRClient-Side Rendering — Rendu de l'application entièrement côté client.

D

TermeDéfinition
DDDDomain-Driven Design — Approche de conception logicielle centrée sur le domaine métier (Eric Evans).
DebounceTechnique de limitation d'exécution : une fonction n'est appelée qu'après un délai d'inactivité.
Declaration (JS)Utilisation du mot-clé var, let, const, function, class pour déclarer une variable/fonction.
DécorateurPattern de conception qui ajoute des comportements à un objet sans modifier sa structure (proposal TC39 stage 3).
Design SystemCollection de composants, patterns, guidelines et outils pour assurer la cohérence UI.
DestructuringSyntaxe ES6 pour extraire des valeurs d'objets/tableaux (const { name } = obj).
DevToolsOutils de développement intégrés aux navigateurs (Elements, Console, Network, Performance, Memory).
DOMDocument Object Model — Représentation en arbre du document HTML manipulable par JS.
DRYDon't Repeat Yourself — Principe de non-duplication de code.
DSLDomain-Specific Language — Langage dédié (ex: JSX, GraphQL, RegExp).
Dynamic ImportImportation asynchrone de modules ES (const mod = await import('./module')).

E

TermeDéfinition
ECMAScriptSpécification standardisée du langage JavaScript (maintenue par ECMA TC39).
Edge ComputingExécution de code au plus proche de l'utilisateur (CDN Edge, Vercel Edge Functions, Cloudflare Workers).
E2E TestingEnd-to-End Testing — Tests qui parcourent l'application comme un utilisateur (Cypress, Playwright).
ESLintOutil d'analyse statique du code JS pour détecter les erreurs et appliquer des conventions.
ESMES Modules — Système de modules natif du navigateur (import/export).
Event LoopMécanisme qui gère l'exécution du code JS (Call Stack, Microtask Queue, Task Queue, rAF).
Event SourcingPattern de persistence où chaque changement d'état est stocké comme un événement immuable.
Expression (JS)Fragment de code qui produit une valeur (ex: 2 + 2, fn(), a && b).

F

TermeDéfinition
FCPFirst Contentful Paint — Métrique mesurant le temps d'affichage du premier contenu.
Feature FlagTechnique permettant d'activer/désactiver des fonctionnalités sans déploiement (LaunchDarkly).
FIDFirst Input Delay — Métrique Core Web Vitals mesurant le temps de réponse à la première interaction.
FlexboxSystème de mise en page CSS 1D (ligne ou colonne).
FPFunctional Programming — Paradigme de programmation basé sur les fonctions pures et l'immutabilité.
FCPFirst Contentful Paint — Premier rendu de contenu textuel ou graphique.
FOUCFlash of Unstyled Content — Affichage bref de la page sans CSS avant que les styles ne s'appliquent.

G

TermeDéfinition
Garbage CollectorMécanisme automatique de libération de la mémoire (V8: Scavenger + Mark-Sweep-Compact).
GeneratorFonction ES6 qui peut être mise en pause et reprise (function*, yield).
GraphQLLangage de requête API permettant de demander exactement les données nécessaires.
gzipAlgorithme de compression standard pour la transmission web.

H

TermeDéfinition
HOCHigher-Order Component — Pattern React : une fonction qui prend un composant et en retourne un nouveau.
HoistingComportement JS où les déclarations (var, function) sont déplacées en haut de leur scope.
Hook (React)Fonction permettant d'utiliser l'état et les cycles de vie dans un composant fonctionnel (useState, useEffect).
HMRHot Module Replacement — Remplacement de modules à chaud sans perdre l'état de l'application (Vite, Webpack).
HTMLHyperText Markup Language — Langage de balisage pour structurer le contenu web.
HTTP/2Version majeure du protocole HTTP avec multiplexage, push serveur, compression d'en-têtes.
HTTP/3Dernière version du protocole HTTP basée sur QUIC (UDP) pour une latence réduite.

I

TermeDéfinition
IDEIntegrated Development Environment — Environnement de développement intégré (VS Code, WebStorm).
IIFEImmediately Invoked Function Expression — Fonction auto-exécutée créant un scope local.
ImmutableDonnée qui ne peut pas être modifiée après sa création (concept clé React/FP).
IndexedDBBase de données NoSQL côté navigateur pour le stockage structuré de grandes quantités de données.
INPInteraction to Next Paint — Nouvelle métrique Core Web Vitals (remplace FID en 2024).
Intersection ObserverAPI navigateur pour observer la visibilité d'éléments dans le viewport.
ISRIncremental Static Regeneration — Mise à jour de pages statiques sans rebuild complet (Next.js).
IteratorObjet avec une méthode next() qui renvoie { value, done }.

J

TermeDéfinition
JavaScriptLangage de programmation haut niveau, interprété, multi-paradigme, prototype-based.
JSXExtension syntaxique de JavaScript pour décrire la structure UI (utilisé par React).
JWTJSON Web Token — Format de token pour l'authentification (stateless).
JAMstackArchitecture : JavaScript + API + Markup (génération statique, CDN, serverless).

K

TermeDéfinition
Key (React)Attribut spécial aidant React à identifier les éléments dans une liste (stabilité nécessaire).
KQLKnowledge Query Language — Langage de requête pour la recherche (utilisé par certains CMS).

L

TermeDéfinition
LCPLargest Contentful Paint — Métrique Core Web Vitals mesurant le temps de chargement du plus grand élément.
Lazy LoadingTechnique de chargement différé (images, composants, modules) jusqu'au moment où ils sont nécessaires.
Lexical ScopePortée déterminée par la position du code dans le source (closures).
LighthouseOutil automatisé d'audit de performance, accessibilité, SEO et bonnes pratiques.
LSPLanguage Server Protocol — Protocole standard pour les fonctionnalités d'IDE (autocomplétion, diagnostics).
LTR/RTLLeft-to-Right / Right-to-Left — Direction d'écriture (internationalisation).

M

TermeDéfinition
MDNMozilla Developer Network — Documentation web de référence.
MemoizationTechnique de cache des résultats de fonction pour éviter des recalculs coûteux.
Micro-FrontendArchitecture où chaque équipe possède un morceau indépendant de l'interface.
MicrotaskFile d'attente prioritaire de l'Event Loop (Promise callbacks, queueMicrotask).
MiddlewareCouche logicielle entre deux systèmes (Redux middleware, Express middleware).
MITMMan-in-the-Middle — Attaque où un tiers intercepte les communications.
MixinPattern de réutilisation de code par combinaison d'objets.
Module FederationPlugin Webpack 5 pour partager des modules entre applications à l'exécution.
MonorepoDépôt unique contenant plusieurs projets/packages (Turborepo, Nx, pnpm workspaces).
MutationObserverAPI navigateur pour observer les modifications du DOM.
MVPMinimum Viable Product — Version minimale d'un produit pour valider une hypothèse.

N

TermeDéfinition
NPMNode Package Manager — Gestionnaire de paquets Node.js (et registry de packages).
Nullish CoalescingOpérateur ES2020 ?? qui retourne la valeur de droite si la gauche est null ou undefined.
NVMNode Version Manager — Gestionnaire de versions Node.js.

O

TermeDéfinition
Observer PatternPattern où un objet (subject) notifie des observateurs de ses changements d'état.
OCPOpen/Closed Principle — Principe SOLID : ouvert à l'extension, fermé à la modification.
Optional ChainingOpérateur ES2020 ?. pour accéder aux propriétés sans erreur si intermédiaire null.
OTOperational Transformation — Algorithme de résolution de conflits pour l'édition collaborative.

P

TermeDéfinition
PaintÉtape du rendu où les pixels sont dessinés à l'écran.
PolyfillCode qui implémente une fonctionnalité moderne dans les navigateurs qui ne la supportent pas.
PrettierFormateur de code opinionné (JS, CSS, HTML, JSON, Markdown).
PromiseObjet ES6 représentant une valeur asynchrone future (pending → fulfilled/rejected).
Prop DrillingPassage de props à travers plusieurs niveaux de composants (problème résolu par Context).
PrototypeMécanisme d'héritage JS : chaque objet a un prototype dont il hérite des propriétés.
ProxyObjet ES6 qui intercepte les opérations sur un autre objet (get, set, deleteProperty).
PWAProgressive Web App — Application web qui peut être installée et fonctionner hors-ligne.

Q

TermeDéfinition
QPSQueries Per Second — Métrique de débit pour un serveur/API.
Quirks ModeMode de compatibilité navigateur pour les pages HTML anciennes (nécessite un DOCTYPE).

R

TermeDéfinition
rAFrequestAnimationFrame — API navigateur pour des animations fluides synchronisées avec le refresh rate.
ReconciliationAlgorithme React qui compare deux arbres VDOM et applique les changements minimaux au DOM.
ReflowRecalcul des positions/dimensions des éléments après un changement de layout (coûteux).
RegExpExpression régulière — Langage de motifs pour la recherche/remplacement dans les chaînes.
RenderProcessus de conversion du code (React/Vue) en DOM réel.
RepaintRedessinage des pixels sans changement de layout (moins coûteux que reflow).
RepositoryObjet DDD/Fowler qui abstrait l'accès aux données (source de données).
RESTRepresentational State Transfer — Style d'architecture API (CRUD via HTTP methods).
RSCReact Server Components — Composants React rendus côté serveur (Next.js App Router).
RUMReal User Monitoring — Collecte de métriques de performance depuis les vrais utilisateurs.

S

TermeDéfinition
Sass/SCSSPréprocesseur CSS (variables, nesting, mixins, fonctions).
SDKSoftware Development Kit — Ensemble d'outils pour développer sur une plateforme spécifique.
SEOSearch Engine Optimization — Optimisation pour les moteurs de recherche.
ServerlessModèle de cloud où le fournisseur gère l'infrastructure (AWS Lambda, Vercel Functions).
Shadow DOMAPI Web Components pour encapsuler le style et le DOM d'un composant.
SIPSingle Immutable Principle — Ne pas modifier les objets, en créer de nouveaux.
Skeleton ScreenÉcran de chargement qui montre la structure de la page (améliore la perception de performance).
SOLIDPrincipes de conception OO : Single Responsibility, Open/Closed, Liskov, Interface Segregation, Dependency Inversion.
SPASingle Page Application — Application web qui s'exécute dans une seule page HTML.
SpecificationMotif DDD encapsulant une règle métier booléenne (ex: isEligibleForDiscount).
SSGStatic Site Generator — Générateur de sites statiques (Next.js SSG, Astro, Eleventy).
SSRServer-Side Rendering — Rendu de l'application sur le serveur avant envoi au client.
SSR StreamingEnvoi progressif du HTML au fur et à mesure du rendu serveur (React Suspense streaming).
State MachineModèle mathématique d'un système qui peut être dans un état précis à un moment donné (XState).
Statement (JS)Instruction qui exécute une action (ex: if, for, return, let x = 1).
Strict ModeMode JS ('use strict') qui applique des règles plus strictes et lance plus d'erreurs.
SVGScalable Vector Graphics — Format d'image vectorielle natif du navigateur.
SWCSpeedy Web Compiler — Transpiler/bundler Rust (100x plus rapide que Babel).
SymbolType primitif ES6 pour des identifiants uniques (souvent utilisés comme clés de propriétés privées).
Synthetic EventAbstraction React des événements navigateur pour la compatibilité cross-browser.

T

TermeDéfinition
TBTTotal Blocking Time — Métrique mesurant le temps pendant lequel le thread principal est bloqué.
TC39Technical Committee 39 — Comité qui standardise ECMAScript (JavaScript).
TCOTail Call Optimization — Optimisation des appels récursifs en queue (peu supporté en JS).
TDZTemporal Dead Zone — Période entre l'entrée dans un scope et la déclaration d'une variable let/const.
ThrottleTechnique qui limite l'exécution d'une fonction à un intervalle maximum (ex: 1 fois par seconde).
TLSTransport Layer Security — Protocole de chiffrement des communications (HTTPS).
Tree ShakingÉlimination du code mort lors du build (via static analysis des ES modules).
TSTypeScript — Sur-ensemble typé de JavaScript par Microsoft.
TTFBTime to First Byte — Temps entre la requête et le premier byte reçu du serveur.
TTITime to Interactive — Temps jusqu'à ce que la page soit interactive.
TupleStructure de données de taille fixe avec des éléments de types potentiellement différents (TypeScript / proposition JS).

U

TermeDéfinition
UDPUser Datagram Protocol — Protocole de transport sans connexion (utilisé par HTTP/3, WebRTC).
UIUser Interface — Interface utilisateur.
UmamiOutil d'analytics web open-source et respectueux de la vie privée.
UnicodeStandard de codage de caractères (UTF-8, UTF-16).
URLUniform Resource Locator — Adresse d'une ressource sur le web.
UXUser Experience — Expérience utilisateur.

V

TermeDéfinition
Value ObjectObjet DDD défini par ses attributs (pas d'identité), immuable (ex: Money, Email, Color).
V8Moteur JavaScript de Chrome (et Node.js, Deno, Electron).
VDOMVirtual DOM — Représentation légère du DOM en mémoire (React, Vue, Preact).
ViteOutil de build nouvelle génération (esbuild en dev, Rollup en prod).
VueFramework JavaScript progressif pour construire des UI.

W

TermeDéfinition
W3CWorld Wide Web Consortium — Organisation qui standardise les technologies web (HTML, CSS, WCAG).
WCAGWeb Content Accessibility Guidelines — Standards d'accessibilité web.
Web APIInterfaces de programmation fournies par le navigateur (DOM, Fetch, Canvas, WebGL, WebSocket).
Web ComponentStandard de composant web réutilisable (Custom Elements, Shadow DOM, HTML Templates).
Web WorkerThread d'exécution en arrière-plan pour ne pas bloquer l'UI.
WebAssemblyFormat d'instruction binaire exécutable dans le navigateur (performant, multi-langage).
WebGLAPI de rendu 3D dans le navigateur (basée sur OpenGL ES).
WebpackBundler historique, configurable, avec vaste écosystème de plugins/loaders.
WebRTCAPI de communication temps réel (audio, vidéo, data) entre navigateurs.
WebSocketProtocole de communication bidirectionnelle temps réel entre client et serveur.
WYSIWYGWhat You See Is What You Get — Éditeur visuel (TinyMCE, Quill, ProseMirror, TipTap).

X

TermeDéfinition
XHRXMLHttpRequest — API historique pour les requêtes AJAX (pré-fetch, encore largement utilisée).
XSSCross-Site Scripting — Injection de code malveillant dans une page web.

Y

TermeDéfinition
YAMLYet Another Markup Language — Format de sérialisation de données (configurations CI/CD, Docker Compose).
YarnGestionnaire de paquets alternatif à npm (Berry, PnP).
YieldMot-clé utilisé dans les generators pour suspendre et reprendre l'exécution.

Z

TermeDéfinition
Z-IndexPropriété CSS qui contrôle l'ordre d'empilement sur l'axe Z (dépend du stacking context).
ZustandBibliothèque de state management React (petite, simple, performante).
ZXOutil Google pour écrire des scripts shell en JavaScript/TypeScript.

2. Cheat Sheets

2.1 HTML Cheat Sheet

<!-- Structure de base -->
<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Titre</title>
  <meta name="description" content="Description pour SEO">
</head>
<body>
  <!-- Header -->
  <header><nav><ul><li><a href="/">Accueil</a></li></ul></nav></header>

  <!-- Contenu principal -->
  <main>
    <section><h1>Titre</h1><p>Paragraphe</p></section>
    <article><h2>Article</h2><time datetime="2024-01-01">1er janvier</time></article>
    <aside>Contenu complémentaire</aside>
  </main>

  <!-- Footer -->
  <footer><small>&copy; 2024</small></footer>

  <!-- Formulaires -->
  <form action="/submit" method="POST" novalidate>
    <label for="email">Email</label>
    <input type="email" id="email" name="email" required autocomplete="email">
    <input type="text" inputmode="numeric" pattern="[0-9]*">
    <textarea rows="4" cols="50"></textarea>
    <select name="country">
      <optgroup label="Europe">
        <option value="fr">France</option>
      </optgroup>
    </select>
    <datalist id="suggestions"><option value="Paris"></datalist>
    <fieldset><legend>Préférences</legend>
      <label><input type="checkbox" name="newsletter"> Newsletter</label>
    </fieldset>
    <button type="submit">Envoyer</button>
  </form>

  <!-- Media -->
  <picture>
    <source srcset="image.avif" type="image/avif">
    <source srcset="image.webp" type="image/webp">
    <img src="image.jpg" alt="Description" loading="lazy" decoding="async" width="800" height="600">
  </picture>
  <video controls preload="metadata" poster="thumbnail.jpg">
    <source src="video.mp4" type="video/mp4">
    <track src="subtitles.vtt" kind="subtitles" srclang="fr" label="Français">
  </video>

  <!-- Sémantique -->
  <details><summary>Plus d'infos</summary><p>Contenu masqué</p></details>
  <dialog open><p>Modal natif</p><button onclick="this.closest('dialog').close()">Fermer</button></dialog>
  <progress value="70" max="100"></progress>
  <meter value="0.7" min="0" max="1">70%</meter>
</body>
</html>

2.2 CSS Cheat Sheet

/* Reset minimal */
*, *::before, *::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

/* Variables */
:root {
  --primary: #0070f3;
  --font-base: 16px;
  --spacing-unit: 8px;
}

/* Layout */
/* Flexbox 1D */
.flex-row { display: flex; gap: var(--spacing-unit); }
.flex-col { display: flex; flex-direction: column; }
.flex-center { display: flex; justify-content: center; align-items: center; }
.flex-between { display: flex; justify-content: space-between; align-items: center; }
.flex-wrap { display: flex; flex-wrap: wrap; }
.flex-1 { flex: 1; }

/* Grid 2D */
.grid-2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; }
.grid-auto { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 16px; }
.grid-sidebar { display: grid; grid-template-columns: 250px 1fr; gap: 24px; }

/* Typographie */
body { font-family: system-ui, -apple-system, sans-serif; line-height: 1.6; }
.text-balance { text-wrap: balance; }
.text-pretty { text-wrap: pretty; }
.clamp-text { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }

/* Espacement */
.m-1 { margin: 4px; } .p-1 { padding: 4px; }
.m-2 { margin: 8px; } .p-2 { padding: 8px; }
.m-4 { margin: 16px; } .p-4 { padding: 16px; }
.m-8 { margin: 32px; } .p-8 { padding: 32px; }

/* Conteneur responsive */
.container { width: 100%; max-width: 1200px; margin-inline: auto; padding-inline: 16px; }

/* Media queries */
@media (max-width: 768px) { /* tablet/mobile */ }
@media (prefers-color-scheme: dark) { /* dark mode */ }
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; } }
@container (max-width: 400px) { /* container query */ }

/* Aspect ratio */
.aspect-16-9 { aspect-ratio: 16 / 9; }
.aspect-square { aspect-ratio: 1; }

/* Animation */
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
.fade-in { animation: fadeIn 0.3s ease-out; }

/* Focus visible */
:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
:focus:not(:focus-visible) { outline: none; }

/* Scrollbar custom */
.custom-scrollbar { scrollbar-width: thin; scrollbar-color: #ccc transparent; }

/* Sélecteurs avancés */
.parent:has(> .child) { /* parent conditionnel */ }
:is(h1, h2, h3) { font-weight: bold; }
:where(.dark, .high-contrast) .text { /* spécificité nulle */ }

2.3 JavaScript Cheat Sheet

// === TYPES ===
typeof 42             // "number"
typeof 'hello'        // "string"
typeof true           // "boolean"
typeof undefined      // "undefined"
typeof null           // "object" (bug)
typeof Symbol()       // "symbol"
typeof 42n            // "bigint"
typeof {}             // "object"
typeof []             // "object"
Array.isArray([])     // true

// === COERCION EXPLICITE ===
String(42)            // "42"
Number('42')          // 42
Boolean(0)            // false
!!0                   // false
parseInt('42px', 10)  // 42
+'42'                 // 42

// === FONCTIONS ===
// Arrow
const add = (a, b) => a + b;
// Default params
const greet = (name = 'World') => `Hello ${name}`;
// Rest params
const sum = (...nums) => nums.reduce((a, b) => a + b, 0);
// Spread
const merged = { ...obj1, ...obj2 };
const clone = [...arr];

// === TABLEAUX ===
arr.map(fn)           // transformation
arr.filter(fn)        // filtrage
arr.reduce(fn, init)  // accumulation
arr.find(fn)          // premier élément trouvé
arr.some(fn)          // au moins un ?
arr.every(fn)         // tous ?
arr.flat()            // aplatir 1 niveau
arr.flatMap(fn)       // map + flat
arr.at(-1)            // dernier élément
arr.toSorted()        // trié (copie)
arr.toReversed()      // inversé (copie)
arr.groupBy(fn)       // ES2024 : groupement

// === OBJETS ===
Object.keys(obj)      // clés
Object.values(obj)    // valeurs
Object.entries(obj)   // [clé, valeur]
Object.fromEntries(arr) // inverse de entries
Object.groupBy(arr, fn) // ES2024

// === PROMISES ===
Promise.resolve(value)
Promise.reject(error)
Promise.all([p1, p2])        // toutes ou une erreur
Promise.allSettled([p1, p2]) // toutes (résultat)
Promise.race([p1, p2])       // première
Promise.any([p1, p2])        // première réussie

// === OPTIONAL CHAINING & NULLISH ===
obj?.prop?.nested         // undefined safe
obj?.[key]                // bracket optional
fn?.()                    // function optional
value ?? defaultValue     // null/undefined → default
value || fallback         // falsy → fallback (0, '', false inclus)

// === DESTRUCTURING ===
const { name, age } = obj;
const [first, ...rest] = arr;
function fn({ name = 'default' } = {}) {}

// === DATE ===
new Date().toISOString()                    // "2024-01-01T00:00:00.000Z"
new Intl.DateTimeFormat('fr-FR').format(d)  // "01/01/2024"
Temporal.Now.plainDateISO()                 // Temporal API (ES2024+)

// === NUMBERS ===
Number.EPSILON                   // plus petite différence
Number.isNaN(NaN)                // true
Number.isFinite(Infinity)        // false
(0.1 + 0.2).toFixed(1)          // "0.3"

2.4 TypeScript Cheat Sheet

// === TYPES DE BASE ===
type User = {
  readonly id: string;     // immuable
  name: string;
  email?: string;          // optionnel
  role: 'admin' | 'user';  // union
};

// === INTERFACES ===
interface Animal {
  name: string;
  speak(): string;
}
interface Dog extends Animal {
  breed: string;
}

// === GENERICS ===
type Result<T, E = Error> = { success: true; data: T } | { success: false; error: E };
function identity<T>(arg: T): T { return arg; }

// === UTILITY TYPES ===
Partial<User>              // tout devient optionnel
Required<User>             // tout devient requis
Pick<User, 'id' | 'name'> // ne garde que ces props
Omit<User, 'email'>       // supprime ces props
Readonly<User>             // tout readonly
Record<K, V>              // objet avec clés K, valeurs V
ReturnType<typeof fn>     // type de retour de fn
Parameters<typeof fn>     // tuple des paramètres
Awaited<Promise<string>>  // string (dépaquète Promise)

// === TYPE GUARDS ===
function isString(v: unknown): v is string {
  return typeof v === 'string';
}

// === TEMPLATE LITERAL TYPES ===
type EventName = `on${Capitalize<string>}`;
type HexColor = `#${string}`;

// === SATISFIES ===
const config = { port: 3000, host: 'localhost' } satisfies Record<string, unknown>;

// === AS CONST ===
const Colors = { RED: '#ff0000', GREEN: '#00ff00' } as const;
type Color = keyof typeof Colors; // 'RED' | 'GREEN'

2.5 React Cheat Sheet

// === COMPOSANT ===
function Component({ name, children }: { name: string; children?: React.ReactNode }) {
  return <div>{children}</div>;
}

// === HOOKS ===
const [state, setState] = useState<Type>(initialValue);
useEffect(() => { /* effect */ return () => /* cleanup */ }, [deps]);
useRef<HTMLDivElement>(null);
useMemo(() => computeExpensive(a, b), [a, b]);
useCallback((arg: T) => doSomething(arg), [deps]);
useContext(MyContext);
useReducer(reducer, initialState);
useImperativeHandle(ref, () => ({ focus }), []);

// === CONTEXT ===
const Ctx = createContext<Type>(defaultValue);
<Ctx.Provider value={value}><App /></Ctx.Provider>;
const value = useContext(Ctx);

// === LAZY LOADING ===
const LazyComponent = React.lazy(() => import('./Component'));
<Suspense fallback={<Spinner />}><LazyComponent /></Suspense>;

// === MOMOIZATION ===
React.memo(Component);                    // skip re-render si props identiques
useMemo(() => expensive(a), [a]);          // memoize valeur
useCallback(fn, [deps]);                   // memoize fonction

// === PORTAL ===
createPortal(children, document.getElementById('portal')!);

// === ERROR BOUNDARY ===
class ErrorBoundary extends React.Component<{ fallback: ReactNode }> {
  state = { error: null };
  static getDerivedStateFromError(error) { return { error }; }
  render() { return this.state.error ? this.props.fallback : this.props.children; }
}

// === FORMS ===
<input value={value} onChange={e => setValue(e.target.value)} />;
<button type="submit" disabled={isLoading}>{isLoading ? 'Envoi...' : 'Envoyer'}</button>;

// === PATTERNS ===
// Compound Components
<Select value={val} onChange={setVal}>
  <Select.Option value="a">Option A</Select.Option>
  <Select.Option value="b">Option B</Select.Option>
</Select>;

// Render Props
<DataProvider render={data => <div>{data}</div>} />;

// Custom Hook
function useOnlineStatus() {
  const [isOnline, setIsOnline] = useState(navigator.onLine);
  useEffect(() => {
    const update = () => setIsOnline(navigator.onLine);
    window.addEventListener('online', update);
    window.addEventListener('offline', update);
    return () => { window.removeEventListener('online', update); window.removeEventListener('offline', update); };
  }, []);
  return isOnline;
}

2.6 Git Cheat Sheet

# === CONFIGURATION ===
git config --global user.name "Votre Nom"
git config --global user.email "email@example.com"
git config --global init.defaultBranch main
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.st status
git config --global alias.unstage 'reset HEAD --'

# === BRANCHES ===
git branch                    # lister les branches
git branch -a                 # toutes (locales + remote)
git branch feature-x          # créer une branche
git checkout feature-x        # switcher
git checkout -b feature-x     # créer + switcher
git branch -d feature-x       # supprimer (fusionnée)
git branch -D feature-x       # supprimer (force)
git merge feature-x           # fusionner dans la branche courante
git rebase main               # rejouer les commits sur main

# === COMMITS ===
git add .                     # stage tout
git add -p                    # stage interactif (par hunk)
git commit -m "feat: message"  # commit avec message
git commit --amend            # modifier dernier commit
git log --oneline --graph     # historique compact
git log --oneline -10         # 10 derniers commits
git diff                      # unstaged changes
git diff --staged             # staged changes

# === REMOTE ===
git remote -v                 # voir les remotes
git push origin branch        # pousser la branche
git push -u origin branch     # pousser + upstream
git push origin --delete branch  # supprimer remote
git pull origin main          # fetch + merge
git fetch origin              # fetch sans merge
git fetch --prune             # nettoyer les refs distantes

# === RESET / REVERT ===
git reset HEAD~1              # annuler dernier commit (garde les changes)
git reset --hard HEAD~1       # annuler dernier commit (perd les changes)
git revert HEAD               # créer un commit qui annule HEAD
git restore fichier.js        # restaurer un fichier
git stash                     # sauvegarder temporairement
git stash pop                 # restaurer + supprimer
git stash list                # lister les stashs

# === CHERRY-PICK / REBASE ===
git cherry-pick abc123        # appliquer un commit spécifique
git rebase -i HEAD~3          # rebase interactif (squash, reword, drop)
git rebase --abort            # annuler un rebase en cours
git rebase --continue         # continuer après résolution

# === TAGS ===
git tag v1.0.0                # créer un tag
git tag -a v1.0.0 -m "v1.0"  # tag annoté
git push origin --tags        # pousser les tags

3. Tableau des Compatibilités Navigateurs

FeatureChromeFirefoxSafariEdgeNote
CSS Grid57+52+10.1+16+Safari 10.1 supporte l'ancienne spec
CSS Container Queries105+110+16+105+Stable depuis 2023
CSS :has()105+121+15.4+105+Support partiel Safari < 15.4
CSS Layers (@layer)99+97+15.4+99+
CSS Subgrid117+71+16+117+
CSS Nesting (natif)120+117+17.2+120+2024
JavaScript ES Modules61+54+10.1+79+Safari nécessite type="module"
Dynamic Import63+67+11+79+
Optional Chaining (?.)80+74+13.1+80+
Nullish Coalescing (??)80+72+13.1+80+
Promise.allSettled76+71+13+79+
Promise.any85+79+14+85+
Array.at()92+90+15.4+92+
Array.findLast()97+104+15.4+97+
structuredClone()98+94+15.4+98+
Top-level await89+89+15+89+Modules uniquement
Hashbang Grammar74+67+13.1+79+
Error Cause93+91+15+93+new Error('msg', { cause })
RegExp Duplicate Named Groups125+136+17+125+ES2025
Set Methods (intersection, union, etc.)122+127+17+122+ES2025
Promise.withResolvers119+131+16.4+119+ES2024
WebP Image32+65+14+79+
AVIF Image85+93+16.1+121+
WebGL 2.056+51+15+79+
Web Workers4+3.5+4+12+Très mature
Service Workers40+44+11.1+79+
WebSocket4+3+5+12+
WebRTC28+22+11+79+
IndexedDB11+4+4+12+
Intersection Observer51+55+12.1+79+
Resize Observer64+69+13.1+79+
Crypto API (Subtle)37+34+7+79+HTTPS required
View Transitions API111+111+Experimental
CSS Scroll-Driven Animations115+115+Experimental

4. Référence Rapide : Accessibilité (ARIA)

4.1 Rôles ARIA Principaux

RôleUsage
role="button"Élément cliquable qui n'est pas un <button>
role="link"Élément qui navigue (préférer <a> natif)
role="navigation"Zone de navigation (<nav> de préférence)
role="main"Contenu principal (<main> de préférence)
role="banner"En-tête de page (<header> de préférence)
role="contentinfo"Footer (<footer> de préférence)
role="complementary"Contenu complémentaire (<aside> de préférence)
role="form"Formulaire (<form> de préférence)
role="search"Barre de recherche
role="alert"Message important (lecture immédiate par screen reader)
role="dialog"Fenêtre modale
role="tablist", role="tab", role="tabpanel"Système d'onglets
role="listbox", role="option"Liste de sélection
role="combobox"Autocomplete
role="progressbar"Barre de progression
role="status"État mis à jour dynamiquement
role="switch"Toggle binaire
role="tooltip"Infobulle
role="tree", role="treeitem"Arborescence

4.2 Attributs ARIA Essentiels

AttributUsage
aria-label="Description"Label pour les éléments sans texte visible
aria-labelledby="id"Référence à un élément qui sert de label
aria-describedby="id"Référence à une description détaillée
aria-hidden="true"Masquer un élément des screen readers
aria-expanded="true/false"État déplié/replié (accordéon, menu)
aria-pressed="true/false"État pressé (toggle button)
aria-current="page/step/location"Élément actif dans une liste
aria-selected="true/false"Élément sélectionné (onglet, option)
aria-checked="mixed/true/false"État de checkbox (mixed = indéterminé)
aria-disabled="true"Élément désactivé (permet focus contrairement à disabled)
aria-required="true"Champ obligatoire
aria-invalid="true"Champ avec erreur de validation
aria-errormessage="id"Référence au message d'erreur
aria-live="polite/assertive/off"Annoncer les mises à jour dynamiques
aria-atomic="true"Lire tout le contenu même si seul un sous-élément change
aria-relevant="additions/removals/text"Quels types de changements annoncer
aria-sort="ascending/descending/none"Tri dans un tableau
aria-haspopup="menu/listbox/dialog/grid"Indique un popup
aria-controls="id"Contrôle un autre élément
aria-owns="id"Relation parent-enfant non-DOM
aria-activedescendant="id"Élément actif dans une liste (autocomplete)
aria-dropeffect="move/copy/execute/none"Effet de glisser-déposer
aria-grabbed="true/false"État de saisie pour glisser-déposer

4.3 Check-list Accessibilité

✅ Structure sémantique (landmarks : header, nav, main, footer)
✅ Titres hiérarchiques (h1 → h6, pas de saut de niveau)
✅ Images avec alt text descriptif (alt="" si décorative)
✅ Contrastes WCAG AA (4.5:1 pour texte normal, 3:1 pour grand)
✅ Focus visible (outline sur :focus-visible)
✅ Labels associés aux inputs (label htmlFor ou aria-label)
✅ Messages d'erreur associés (aria-describedby, aria-invalid)
✅ Navigation clavier (Tab, Enter, Escape, Arrow keys)
✅ Skip links (lien "Aller au contenu")
✅ Announcement des changements dynamiques (aria-live)
✅ Touch targets (min 44×44px)
✅ Test avec screen reader (NVDA, VoiceOver, Orca)
✅ Test avec zoom (200%)
✅ Test sans couleur
✅ Test sans souris (clavier uniquement)

5. Référence Rapide : Performance (Core Web Vitals)

5.1 Les 3 (ou 4) Core Web Vitals

MétriqueCe qu'elle mesureSeuil GoodSeuil PoorAmélioration
LCP (Largest Contentful Paint)Chargement perçu (hero image, titre)≤ 2.5s> 4.0sOptimiser images, preload, SSR
INP (Interaction to Next Paint)Réactivité aux interactions (← remplace FID en 2024)≤ 200ms> 500msÉviter long tasks, code splitting
CLS (Cumulative Layout Shift)Stabilité visuelle≤ 0.1> 0.25Dimensions explicites, éviter injections tardives
TBT (Total Blocking Time)Blocage du thread principal≤ 200ms> 600msWeb Workers, lazy loading

5.2 Stratégies d'Optimisation par Métrique

LCP :
  - Preload LCP resource (hero image, font)
  - SSR/SSG pour le contenu critique
  - Optimiser les images (AVIF/WebP, responsive)
  - Éliminer les render-blocking resources
  - CDN + caching agressif

INP :
  - Éviter les long tasks (> 50ms)
  - Code splitting + lazy loading
  - Web Workers pour les calculs lourds
  - Debounce/throttle event handlers
  - main-thread scheduling (isInputPending)

CLS :
  - width + height explicites sur images/media
  - aspect-ratio CSS
  - Réserver l'espace pour les ads/embeds
  - Éviter d'injecter du contenu au-dessus du fold après load
  - Préférer transform: aux animations qui changent le layout

5.3 Métriques Secondaires

MétriqueDescriptionBon
FCP (First Contentful Paint)Premier texte/image visible≤ 1.8s
TTFB (Time To First Byte)Latence serveur≤ 800ms
TTI (Time To Interactive)Page complètement interactive≤ 3.8s
FID (First Input Delay)Défunt (remplacé par INP)≤ 100ms
SI (Speed Index)Rapidité de remplissage contenu≤ 3.4s

6. Emojis de Commit Conventionnels

6.1 Conventional Commits avec Emojis

EmojiTypeSignification
featNouvelle fonctionnalité
🐛fixCorrection de bug
📚docsDocumentation
💄styleCSS, UI, style (non-fonctionnel)
♻️refactorRefactoring (ni feat ni fix)
perfAmélioration de performance
testAjout ou modification de tests
🔧choreTâches techniques (deps, config)
🚀deployMise en production
🎨designAmélioration UI/UX
🔥removeSuppression de code/fichier
🏗️buildSystème de build
🚨lintLinting / corrections ESLint
🐳dockerDocker
🔒securitySécurité
🌐i18nInternationalisation
📦packageMise à jour de packages
🚚renameRenommage de fichier
🗑️deprecateDépréciation
🧪experimentExpérimental
revertAnnulation de commit
⬆️upgradeMise à jour de dépendance
⬇️downgradeRétrogradation de dépendance
👷ciCI/CD
🚑hotfixCorrection urgente
💚fix-ciCorrection CI
📱responsiveResponsive design
a11yAccessibilité
🌱initInitialisation

6.2 Format Recommandé

<emoji> <type>(<scope optionnel>): <description>

[corps optionnel]

[pied optionnel : BREAKING CHANGE, footer]

Exemples :

✨ feat(api): ajouter l'endpoint de recherche

🐛 fix(auth): corriger le refresh token expiré

♻️ refactor(components): extraire le hook useDebounce

⚡ perf(images): migrer vers AVIF avec fallback WebP

📚 docs: mettre à jour le README avec les instructions d'installation

♿ a11y(nav): ajouter aria-current aux liens actifs

7. Commandes Git Essentielles

7.1 Débuter un Projet

git init                          # Initialiser un dépôt
git clone <url>                   # Cloner un dépôt distant
git clone --depth=1 <url>         # Cloner sans historique (shallow)
git remote add origin <url>       # Ajouter un remote

7.2 Workflow Quotidien

git pull --rebase                 # Fetch + rebase (évite le merge commit)
git add -A                        # Stage tout
git commit -m "feat: message"     # Commiter
git push origin branch            # Pousser
git push --force-with-lease       # Force push sécurisé

7.3 Réparer les Erreurs

git commit --amend -m "fix message"  # Changer le message du dernier commit
git commit --amend --no-edit          # Ajouter des changements au dernier commit
git reset HEAD~1                      # Défaire le dernier commit (garder les changes)
git reset --hard HEAD~1               # Défaire le dernier commit (perdre les changes)
git revert <hash>                     # Créer un commit inverse
git restore <file>                    # Restaurer un fichier modifié
git checkout -- <file>                # (ancienne syntaxe)

7.4 Branches

git branch -m main main-old          # Renommer une branche
git branch -d <branch>               # Supprimer (si fusionnée)
git branch -D <branch>               # Supprimer (force)
git push origin --delete <branch>    # Supprimer la branche distante
git merge --squash <branch>          # Fusionner en un seul commit

7.5 Stash

git stash push -m "WIP: message"     # Stasher avec message
git stash list                       # Lister
git stash apply stash@{0}            # Appliquer sans supprimer
git stash pop                        # Appliquer et supprimer
git stash drop stash@{0}             # Supprimer un stash
git stash clear                      # Vider tous les stashs

7.6 Bisect (Trouver un Bug)

git bisect start
git bisect bad                       # Commit actuel a le bug
git bisect good <tag>                # Tag où ça marchait
# Git checkout des commits automatiquement
# Tester et marquer : git bisect good / git bisect bad
git bisect reset                     # Terminer

7.7 Hooks Utiles

# .husky/pre-commit
npm run lint-staged                  # Linter les fichiers staged

# .husky/commit-msg
npx --no-install commitlint --edit $1  # Valider le message de commit

# .husky/pre-push
npm run test                         # Lancer les tests avant push

8. API Browser Utiles

8.1 API de Base

APIUsageExemple
fetch()Requêtes HTTPfetch('/api').then(r => r.json())
localStorageStockage persistant (5MB)localStorage.setItem('key', 'val')
sessionStorageStockage sessionsessionStorage.getItem('key')
cookiesdocument.cookieLecture/écriture de cookies
URLParsing URLnew URL('https://example.com')
FormDataDonnées formulairenew FormData(form)
AbortControllerAnnulation requêtecontroller.abort()

8.2 DOM API

APIUsageExemple
querySelectorSélection CSSdocument.querySelector('.class')
Element.closest()Ancêtre CSSel.closest('.container')
IntersectionObserverVisibiliténew IntersectionObserver(cb).observe(el)
ResizeObserverChangement taillenew ResizeObserver(cb).observe(el)
MutationObserverChangement DOMnew MutationObserver(cb).observe(el, config)
Element.scrollIntoView()Scroll automatiqueel.scrollIntoView({ behavior: 'smooth' })
Element.matches()Test CSS selectorel.matches(':hover')
datasetData attributesel.dataset.userId
classListGestion classesel.classList.toggle('active')
createElementCréation d'élémentdocument.createElement('div')
DocumentFragmentDOM hors-lignefragment.append(...nodes)
Node.isConnectedTest dans le DOMel.isConnected

8.3 Network et Communication

APIUsage
navigator.onLineStatut connexion
WebSocketCommunication bidirectionnelle
EventSourceServer-Sent Events (unidirectionnel)
WebRTCCommunication P2P (audio, vidéo, data)
BroadcastChannelCommunication inter-onglets
navigator.sendBeacon()Envoi analytique fiable (même en déchargement)
Cache APICache programmatique (Service Worker)

8.4 Performance et Monitoring

APIUsage
Performance APIperformance.now(), performance.mark()
PerformanceObserverObserver les métriques (LCP, CLS, etc.)
navigator.connectionType de connexion (4g, 3g, slow-2g)
navigator.hardwareConcurrencyNombre de CPU (pour Workers)
navigator.deviceMemoryRAM disponible
requestIdleCallback()Exécuter pendant les temps morts
AbortSignal.timeout()Timeout avec AbortController

8.5 Device APIs

APIUsage
GeolocationPosition GPS
navigator.mediaDevicesCaméra/micro
navigator.clipboardPresse-papier
navigator.shareWeb Share API
navigator.vibrateVibration
Screen OrientationOrientation écran
Battery APINiveau batterie
navigator.credentialsCredential Management
File System AccessAccès fichiers système
Screen Wake LockEmpêcher veille

8.6 Storage APIs

APITaillePersistanceAsyncUsage
localStorage~5MBOuiNonPréférences, tokens
sessionStorage~5MBSessionNonDonnées temporaires
IndexedDBBeaucoup (gigaoctets)OuiOuiGrandes données, offline
Cache APIVariableOui (SW)OuiResources réseau
Cookie~4KBOuiNonAuth, sessions
OPFS (Origin Private FS)BeaucoupOuiOuiFichiers (navigateur)

8.7 APIs Graphiques et Rendu

APIUsage
Canvas 2DDessin 2D programmatique
WebGLRendu 3D (basé OpenGL)
WebGPURendu 3D nouvelle génération (2024+)
SVGGraphiques vectoriels (déclaratif)
OffscreenCanvasCanvas en Web Worker
ImageBitmapDécodage d'image optimisé
requestAnimationFrameAnimations synchronisées
View Transitions APITransitions de pages natives

8.8 APIs Avancées

APIUsage
Service WorkerProxy réseau, offline, push notifications
Web Worker / SharedWorkerThreads en arrière-plan
WebAssemblyExécution de code natif dans le navigateur
WebAuthnAuthentification sans mot de passe (FIDO2)
Payment RequestPaiement natif dans le navigateur
Credential ManagementGestion des identifiants
Content IndexIndexation du contenu hors-ligne
Periodic Background SyncSynchro périodique en arrière-plan
Push APINotifications push natives
Notification APINotifications système
Speech SynthesisSynthèse vocale
Speech RecognitionReconnaissance vocale
Web BluetoothCommunication Bluetooth
Web USBCommunication USB
Web SerialCommunication série
Web NFCCommunication NFC
Web MIDIPériphériques MIDI
Gamepad APIManettes de jeu
Pointer LockVerrouillage du pointeur
Fullscreen APIPlein écran
Screen CaptureCapture d'écran
EyeDropperPipette de couleur
CSS Painting API (Houdini)Paint Worklet personnalisé

9. Conclusion

Les annexes de ce chapitre sont conçues comme une référence quotidienne. Que vous prépariez un entretien, que vous cherchiez la syntaxe d'une API, ou que vous vouliez vérifier un attribut ARIA, ces pages doivent être votre premier réflexe avant Google.

Imprimez les cheat sheets. Collez le glossaire au mur. Gardez le tableau de compatibilité sous le coude. La connaissance technique n'est pas de tout retenir par cœur, mais de savoir où trouver l'information rapidement.