recursal/MDN huggingface dataset:
CSS
===

**CSS** (*Cascading Style Sheets* ou *Feuilles de style en cascade* en français) est un langage déclaratif utilisé pour décrire la présentation de pages web dans le navigateur. Le navigateur applique les déclarations de style CSS aux éléments concernés pour les mettre en forme. Une déclaration de style contient des propriétés et leurs valeurs et détermine l'apparence d'un ou plusieurs éléments de la page.

CSS est l'une des trois technologies qui constituent le noyau du web, avec HTML et JavaScript. Ce langage est principalement utilisé pour appliquer un style aux éléments HTML, mais peut aussi être utilisé avec d'autres langages de balisage tels que SVG ou encore XML.

Une règle CSS est un ensemble de propriétés (en-US) associé à un sélecteur. Voici un exemple dans lequel chaque paragraphe HTML apparaîtra en jaune sur fond noir :


```css
/\* Le sélecteur "p" indique que tous les paragraphes dans le document seront affectés par la règle \*/
p {
  /\* La propriété "color" (couleur) définit la couleur du texte. \*/
  /\* Ici, cette couleur sera le jaune (yellow en anglais) \*/
  color: yellow;

  /\* La propriété "background-color" (couleur d'arrière-plan) définit la couleur d'arrière-plan \*/
  /\* Ici, cette couleur sera le noir (black) \*/
  background-color: black;
}
```


Le principe de « cascade » fait référence aux règles de préséance dans l'application des divers sélecteurs pointant le même élément de la page. C'est une fonctionnalité particulièrement importante dans la mesure où un site web complexe peut contenir des milliers de règles CSS.

Voir aussi
----------

### Culture générale

* Apprendre CSS
* Feuilles de style en cascade sur Wikipédia
### Références techniques

* Documentation CSS sur MDN
* Les travaux en cours du Groupe de travail CSS (en)
### Voir aussi

* Cours en ligne sur codecademy.com
IDL
===

Un **IDL** (*Interface Description Language*) est un langage générique utilisé pour définir les interfaces des objets en dehors de tout autre langage de programmation spécifique.

Voir aussi
----------

### Culture générale

* IDL sur Wikipédia
### Référence technique

* Interface Definition Language
Partage de domaine
==================

Les navigateurs limitent le nombre de connexions actives pour chaque domaine. Pour permettre des téléchargements simultanés de ressources dépassant cette limite, le **partage de domaine**(ou *domain\_sharding* en anglais) divise le contenu sur plusieurs sous-domaines. Lorsque plusieurs domaines sont utilisés pour servir plusieurs actifs, les navigateurs peuvent télécharger plus de ressources simultanément, ce qui accélère le temps de chargement des pages et améliore l'expérience utilisateur.

Le problème avec le partage de domaine, en termes de performances, est le coût des recherches DNS supplémentaires pour chaque domaine et la surcharge liée à l'établissement de chaque connexion TCP.

La réponse initiale d'une requête HTTP est généralement un fichier HTML répertoriant d'autres ressources telles que des fichiers JavaScript, CSS, des images et d'autres fichiers multimédias qui doivent être téléchargés. Étant donné que les navigateurs limitent le nombre de connexions actives par domaine, l'envoi de toutes les ressources requises à partir d'un seul domaine peut être lente, car les actifs doivent être téléchargés de manière séquentielle. Avec le partage de domaine, les téléchargements requis sont servis à partir de plusieurs domaines, ce qui permet au navigateur de télécharger simultanément les ressources nécessaires. Cependant, plusieurs domaines constituent un anti-modèle, car les recherches DNS ralentissent les temps de chargement initiaux.

Le protocole HTTP2 prend en charge un nombre illimité de requêtes simultanées, faisant du partage de domaine une exigence obsolète lorsque le protocole HTTP/2 est activé.

Voir aussi
----------

* TLS
* DNS
* HTTP/2
Abstraction
===========

L'*abstraction* dans le domaine de la programmation informatique permet de réduire la complexité et d'obtenir une conception et une implémentation plus efficaces dans les systèmes logiciels complexes. Elle dissimule les complexités techniques des systèmes derrière des API plus simples à manipuler.

Avantages de l'abstraction de données
-------------------------------------

* Aider l'utilisatrice ou l'utilisateur à éviter d'écrire du code de bas niveau.
* Éviter la duplication de code et augmenter la réutilisabilité.
* Pouvoir modifier l'implémentation interne de la classe indépendamment sans affecter l'utilisatrice ou l'utilisateur.
* Aider à augmenter la sécurité d'une application ou d'un programme car seuls les détails importants sont fournis à l'utilisatrice ou l'utilisateur.
Exemple
-------


```js
class ImplementAbstraction {
  // méthode pour affecter des valeurs aux membres internes
  set(x, y) {
    this.a = x;
    this.b = y;
  }

  display() {
    console.log(`a = ${this.a}`);
    console.log(`b = ${this.b}`);
  }
}

const obj = new ImplementAbstraction();
obj.set(10, 20);
obj.display();
// a = 10
// b = 20
```

Voir aussi
----------

* Abstraction sur Wikipédia.
Whitespace
==========

**Whitespace** sont un ensemble de characters qui est utilisé pour afficher des espaces horizontaux ou verticaux entre d'autres caractères. Ils sont souvent utilisés pour séparer les jetons dans HTML, CSS, JavaScript, et dans d'autres langages informatiques. Les caractères whitespace et leur utilisation varient selon les langages.

En HTML
-------

HTML Living Standard spécifie 5 caractères comme whitespace ASCII : U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, et U+0020 SPACE. Sous forme de texte, ils sont traités comme des espaces normaux et les espaces séquentiels sont réduits comme un seul espace dans de nombreux cas (ce comportement peut être modifié par la propriété CSS `white-space` ). Ils sont également utilisés comme séparateur d'un nom d'élément et de ses paramètres, noms de classe, etc.

En JavaScript
-------------

ECMAScript® 2015 Language Specification spécifie plusieurs points de code Unicode sous forme de white space: U+0009 CHARACTER TABULATION <TAB>, U+000B LINE TABULATION <VT>, U+000C FORM FEED <FF>, U+0020 SPACE <SP>, U+00A0 NO-BREAK SPACE <NBSP>, U+FEFF ZERO WIDTH NO-BREAK SPACE <ZWNBSP> et autre catégorie "Zs" Tout autre point de code Unicode "Séparateur, esspace" <USP>. Ces caractères sont généralement inutiles pour la fonctionnalité du code.

Voir aussi
----------

* ASCII whitespace
* ECMAScript® 2015 Language Specification
* How whitespace is handled by HTML, CSS, and in the DOM
* `white-space`
* Espace sur Wikipédia
* Character
Codage des caractères
=====================

Un encodage définit une correspondance entre les octets et le texte. Une séquence d'octets permet différentes interprétations textuelles. En spécifiant un codage particulier (tel que UTF-8), nous spécifions comment la séquence d'octets doit être interprétée.

Par exemple, en HTML, nous déclarons généralement l'usage du codage de caractères UTF-8 en utilisant la ligne suivante :


```html
<meta charset="utf-8" />
```


Ceci nous permet de nous assurer que nous pouvons utiliser des caractères issus de presque toutes les langues humaines dans notre document HTML et que ces caractères seront affichés correctement.

Voir aussi
----------

### Culture générale

* Character encoding on W3C (en anglais)
* Le Codage des Caractères sur Wikipédia
HTML5
=====

La dernière version stable du HTML, HTML5, transforme le HTML qui était un simple balisage pour structurer des documents en une plate-forme complète de développement d'applications. Parmi ses autres caractéristiques, HTML5 comporte de nouveaux éléments et des API JavaScript pour améliorer le stockage, le multimédia et l'accès au matériel.

Pour en savoir plus
-------------------

* notre guide HTML5
Mixin
=====

Un *mixin* est une classe ou une interface dans laquelle une partie ou la totalité des méthodes et des propriétés sont implémentées en exigeant qu'une autre classe ou interface fournisse les éléments manquants . La nouvelle classe ou interface inclut alors à la fois les propriétés et les méthodes du mixin ainsi que celles qu'il définit lui-même. Toutes les méthodes et propriétés sont utilisées exactement de la même façon, qu'elles soient implémentées dans le mixin ou dans l'interface, ou qu'elle soit la classe qui implémente le mixin.

L'avantage des mixins est qu'ils peuvent être utilisés pour simplifier la conception d'API dans lesquelles plusieurs interfaces doivent inclure les mêmes méthodes et propriétés.

Par exemple, le mixin `WindowOrWorkerGlobalScope` est utilisé pour fournir des méthodes et des propriétés qui doivent être disponibles à la fois sur les interfaces `Window` et `WorkerGlobalScope`. Le mixin est implémenté par ces deux interfaces.

Voir aussi
----------

### Culture générale

* Mixin sur Wikipédia
Encodage-pourcent
=================

**Encodage-pourcent (*Percent-encoding*)** est un mécanisme d'encodage des caractères de 8 bits qui ont une signification spécifique dans le contexte des URL. Il est parfois appelé encodage d'URL. Il consiste en une substitution de : un caractère '%' suivi d'un code hexadecimal correspondant à la valeur ASCII du caractère à remplacer.

Les caractères spéciaux nécessitant cet encodage sont : `':'`, `'/'`, `'?'`, `'#'`, `'['`, `']'`, `'@'`, `'!'`, `'$'`, `'&'`, `"'"`, `'('`, `')'`, `'*'`, `'+'`, `','`, `';'`, `'='`, et `'%'` lui-même. Les autres caractères n'ont pas besoin d'être encodés, bien qu'ils puissent l'être.

| Caractère | Encodage |
| --- | --- |
| `':'` | `%3A` |
| `'/'` | `%2F` |
| `'?'` | `%3F` |
| `'#'` | `%23` |
| `'['` | `%5B` |
| `']'` | `%5D` |
| `'@'` | `%40` |
| `'!'` | `%21` |
| `'$'` | `%24` |
| `'&'` | `%26` |
| `"'"` | `%27` |
| `'('` | `%28` |
| `')'` | `%29` |
| `'*'` | `%2A` |
| `'+'` | `%2B` |
| `','` | `%2C` |
| `';'` | `%3B` |
| `'='` | `%3D` |
| `'%'` | `%25` |
| `' '` | `%20` ou `+` |

En fonction du contexte, le caractère `' '` est traduit par un `'+'` (comme dans la version de codage en pourcentage utilisée dans un message `application/x-www-form-urlencoded`), ou en `'%20'` comme dans les URL.

Voir aussi
----------

### Culture générale

* Codage des caractères sur Wikipédia.
### Savoir technique

* RFC 3986, section 2.1, où ce codage est défini.
DNS
===

**DNS** (domain name system) transforme les noms de domaines en adresses IP nécessaires à la mise en relation avec un service sur Internet ou un réseau privé.

Pour en savoir plus
-------------------

### Connaissances générales

* Comprendre les noms de domaine
* Nom de domaine sur Wikipédia
En-tête de représentation
=========================

Un **en-tête de représentation** est un en-tête HTTP qui décrit la *représentation* particulière de la ressource envoyée dans un corps de message HTTP.

 Les représentations sont différentes formes d'une ressource particulière.
 Par exemple, les mêmes données peuvent être formatées avec un type de média particulier tel que XML ou JSON, localisées dans une langue écrite ou une région géographique particulière, et/ou compressées ou autrement encodées pour la transmission.
 La ressource sous-jacente est la même dans chaque cas, mais sa représentation est différente.

Les clients précisent les formats qu'ils préfèrent recevoir lors de la négociation de contenu (utilisant des en-têtes `Accept-*`), et les en-têtes de représentation indiquent au client le format de la *représentation sélectionnée* qu'il a effectivement reçue.

 Les en-têtes de représentation peuvent être présents à la fois dans les messages de requête et de réponse HTTP.
 S'ils sont envoyés en réponse à une requête `HEAD`, ils décrivent le contenu du corps qui *serait* sélectionné si la ressource était réellement demandée.

Les en-têtes de représentation incluent :

* `Content-Type`,
* `Content-Encoding`,
* `Content-Language`,
* `Content-Location` (en-US).
Voir aussi
----------

* Section 3 de la RFC 7231 sur les représentations (en anglais)
* Liste de tous les en-têtes HTTP
* En-tête de charge utile (en-US)
* En-tête d'entité
* `Digest` (en-US)
* `Want-Digest` (en-US)
Indice de vitesse
=================

L'**indice de vitesse**, ou *speed index (SI)* en anglais, est un indicateur de performances de chargement de page qui vous montre à quelle vitesse le contenu d'une page est visiblement rempli. C'est le temps moyen auquel les parties visibles de la page sont affichées. Exprimé en millisecondes et en fonction de la taille de la fenêtre d'affichage, plus le score est bas, mieux c'est.

![Calcul de l'indice de vitesse](/fr/docs/Glossary/Speed_index/speedindex.png)

Le calcul prend en compte quel pourcentage de la page est visuellement complet à chaque intervalle de 100 ms jusqu'à ce que la page soit visuellement complète. Le score global, la mesure au-dessus du pli, est une somme des intervalles individuels pris 10 fois par seconde du pourcentage de l'écran qui n'est pas visuellement complet.

Voir aussi
----------

* Apprendre les performances web
eTLD
====

L'acronyme **eTLD** signifie « *effective top-level domain* (soit « domaine de plus haut niveau effectif » en français) et correspond au domaine sous lequel d'autres domaines peuvent être par une organisation.

Un domaine de plus haut niveau (*top level domain*, ou TLD) correspond au domaine qui suit le point final. Ainsi, le domaine de de plus haut niveau pour `crookedtimber.org` est `org`.

Si tous les domaines situés juste en dessous des domaines de plus haut niveau pouvaient être enregistrés par des organisations, on pourra avoir les domaines suivants, appartenant à la même organisation :
```

    xyz.org
abc.xyz.org
def.xyz.org
```


Toutfois, cela ne fonctionne pas toujours ainsi et certains bureaux d'enregistrement permettent aux organisations d'enregistrer des domaines en dessous du niveau le plus haut. Par exemple, `sussex.ac.uk` et `aber.ac.uk` sont enregistrés par des organisations différentes.

Cette gestion des niveaux dépend des règles de gestion du bureau d'enregistrement et il est donc impossible d'utiliser un algorithme pour déterminer si un suffixe donné (comme `ac.uk`) permet un enregistrement de domaine public ou non. La liste des suffixes publics est une liste maintenue de l'ensemble des suffixes sous lesquels des organisations peuvent enregistrer des noms de domaines. Autrement dit, il s'agit d'une liste d'eTLD.

La notion associée **eTLD+1** signifie l'eTLD associée à la partie inférieure du nom de domaine. Tous les domaines d'un même eTLD+1 appartiennent à une même organisation.

Les domaines qui suivent sont des exemples de domaines eTLD+1 :

* `crookedtimber.org`
* `theguardian.com`
* `sussex.ac.uk`
* `aber.ac.uk`

Cela signifie que tous les domaines sous chacun de ces domaines appartiennent à la même organisation. Par exemple :
```

 film.theguardian.com
music.theguardian.com
```


```
      news.sussex.ac.uk
      blog.sussex.ac.uk
admissions.sussex.ac.uk
```

Voir aussi
----------

* La liste des suffixes publics (en anglais)
Native
======

Une application *native* a été compilée pour s'exécuter sur la combinaison logiciel-matériel habituelle de l'architecture cible.

Un exemple d'application Android native serait une application mobile écrite en Java avec la chaîne d'outils Android.

À l'inverse, une application web qui s'exécute dans un navigateur n'est pas native : elle est exécutée dans le navigateur web, qui se trouve au-dessus de l'environnement natif, et non dans l'environnement natif lui-même.

Pour en savoir plus
-------------------

### Culture générale

* Code natif sur Wikipédia
Unicode
=======

Unicode est une police de caractères standard qui énumère et définit les caractères des différentes langues du monde, systèmes d'écriture et symboles. En attribuant un nombre à chaque caractère, les programmeurs peuvent encoder des caractères, pour permettre aux ordinateurs de stocker, traiter et transmettre toute combinaison de langues dans le même fichier ou programme.

Avant Unicode, il était difficile et sujet aux erreurs de mélanger les langues dans les mêmes données. Par exemple, un jeu de caractères stocke des caractères japonais et un autre stocke l'alphabet arabe. S'il n'était pas clairement indiqué quelles parties des données étaient dans quel jeu de caractères, d'autres programmes et ordinateurs affichaient incorrectement le texte ou l'endommageaient pendant le traitement. Si vous avez déjà vu du texte où des caractères comme des citations entre guillemets en cursives (`“”`) remplacés par du charabia comme `Ã‚Â£`,alors vous avez vu ce problème, connu sous le nom Mojibake.

Le codage de caractères Unicode le plus courant sur le Web est UTF-8. D'autres encodages existent, comme UTF-16 ou l'obsolète UCS-2, mais UTF-8 est recommandé.

Voir aussi
----------

* Unicode sur Wikipédia
* The Unicode Standard : A Technical Introduction (en)
Name binding (liaison de nom)
=============================

En programmation, la **liaison de nom** (*name binding* en anglais) correspond à l'association d'un identifiant avec une valeur. C'est le cas pour les variables, mais aussi pour les paramètres des fonctions et celles créées par les blocs `try…catch`. Certaines liaisons de nom sont implicitement créées par le langage, comme `this` et `new.target` en JavaScript.

On dit d'une liaison qu'elle est muable si elle peut être réaffectée et immuable sinon (cela ne signifie pas que la valeur correspondante est immuable).

Une liaison est généralement associée à une portée. Certains langages de programmation permettent de recréer des liaisons au sein d'une même portée (on parle parfois de redéclaration), et d'autres non. En JavaScript, une liaison pourra être redéclarée selon l'instruction utilisée pour créer la liaison.

Voir aussi
----------

* `var`
* `let`
* `const`
* `function`
* `class`
Moment de compilation
=====================

Le *moment de compilation* est le moment allant du premier chargement du programme jusqu'à la fin de son analyse syntaxique.

Voir aussi
----------

### Culture générale

* Compilateur sur Wikipédia
Variable
========

Une variable est un emplacement nommé pour conserver une valeur. Ainsi, il est possible d'accéder à une valeur quelconque par l'intermédiaire d'un nom prédéterminé.

Voir aussi
----------

### Culture générale

* Variable sur Wikipédia
### Référence technique

* Déclaration de variables en JavaScript
* `Instruction var` en JavaScript
BigInt
======

Dans JavaScript, **BigInt** est un type de données numériques qui peut représenter des entiers au format de précision arbitraire. Dans d'autres langages de programmation, différents types numériques peuvent exister, par exemple : Entiers, Flottants, Doubles, ou Bignums.

Apprendre plus
--------------

### Culture générale

* Les types d'entier en informatique sur Wikipédia
### Référence technique

* La structure de données JavaScript : `BigInt`
* L'objet global JavaScript `BigInt`
RTP (Real-time Transport Protocol) et SRTP (Secure RTP)
=======================================================

Le ***Real-time Transport Protocol*** (abrégé en **RTP**, et qu'on pourrait traduire en français par « protocole de transport en temps réel ») est un protocole réseau qui décrit comment transmettre divers médias (audio, vidéo) d'un point de terminaison à un autre en temps réel. RTP convient aux applications de diffusion vidéo, à la téléphonie VoIP comme Skype et aux outils de visioconférence.

La version sécurisée de RTP, **SRTP**, est utilisé par WebRTC, et utilise le chiffrement et l'authentification pour minimiser le risque d'attaques par déni de service et certaines failles de sécurité.

RTP est rarement utilisé seul. Il est plus généralement utilisé en conjonction avec d'autres protocoles comme RTSP (en-US) et SDP.

Voir aussi
----------

* Introduction au protocole de transport en temps réel (en-US)
* RTP sur Wikipédia
* La RFC 3550 (en anglais) qui est un des documents spécifiant le protocole
Typage dynamique
================

**Les langages à typage dynamique** sont ceux (comme JavaScript) dont l'interpréteur attribue aux variables un type lors de l'exécution en fonction de la valeur qu'elles possèdent à ce moment.

Pour en savoir plus
-------------------

### Apprendre sur ce sujet

* Les types et structures de données JavaScript
### Culture générale

* Type (informatique) sur Wikipédia
RAIL
====

**RAIL**, acronyme de **Response, Animation, Idle, et Load**, est un modèle de performance créé par l'équipe Google Chrome en 2015, axé sur l'expérience utilisateur et les performances dans le navigateur. Le mantra de performance de RAIL est "Concentrez-vous sur l'utilisateur; l'objectif final n'est pas de rendre votre site performant sur un appareil spécifique, c'est de rendre les utilisateurs heureux." Il y a 4 étapes d'interaction: chargement de la page, inactivité, réponse à l'entrée, et défilement et animation. Dans l'ordre des acronymes, les principaux principes sont:

**Response**

Répondez immédiatement aux utilisateurs, en reconnaissant toute entrée utilisateur en **100ms** ou moins.

**Animation**

Lors de l'animation, effectuez le rendu de chaque image en moins de **16ms**, dans un souci de cohérence et en évitant les secousses.

**Idle**

Lorsque vous utilisez le thread JavaScript principal, travaillez par blocs pendant moins de **50ms** pour libérer le thread pour les interactions de l'utilisateur.

**Load**

Diffusez du contenu interactif en moins d' **1 seconde**.

Voir aussi
----------

* Timings de performance Web recommandés: combien de temps est trop long (en-US)
AJAX
====

Le JavaScript et XML asynchrone (AJAX) est une pratique de programmation qui consiste à construire des pages web plus complexes et plus dynamiques en utilisant une technologie connue sous le nom de XMLHttpRequest.

AJAX vous permet de mettre à jour simplement des parties du DOM d'une page web HTML au lieu de devoir recharger la page entière. AJAX vous permet également de travailler de manière asynchrone, c'est-à-dire que votre code continue à s'exécuter pendant que la partie de votre page web essaie de se recharger (par opposition à la méthode synchrone qui bloque l'exécution de votre code jusqu'à ce que la partie de votre page web ait fini de se recharger).

Avec les sites web interactifs et les standards modernes du web, AJAX est progressivement remplacé par des fonctions dans les cadres JavaScript et l'API standard officielle `Fetch API`.

Voir aussi
----------

* AJAX sur Wikipédia
* AJAX
* AJAX - Premiers pas
* Glossaire du MND:
    + XMLHttpRequest
* `XMLHttpRequest`
* `Fetch API`
* Utilisation de l'API Fetch
* Communications synchrones contre asynchrones
XHR (XMLHttpRequest)
====================

`XMLHttpRequest` (XHR) est une API JavaScript pour créer des requêtes AJAX. Ses méthodes permettent d'envoyer des requêtes réseau entre le navigateur et un serveur.

Voir aussi
----------

### Culture générale

* `XMLHttpRequest` sur Wikipédia
* Synchronous vs. Asynchronous Communications (en)
### Informations techniques

* L'objet `XMLHttpRequest`.
* La documentation sur MDN à propos de l'utilisation de XMLHttpRequest.
First contentful paint
======================

Le ***First Contentful Paint*** (FCP) est un indicateur du moment où le navigateur restitue le premier bit de contenu du DOM, fournissant le premier retour à l'internaute que la page est en cours de chargement. La réponse à la question « Est-ce que quelque chose se passe ? » devient « oui » lorsque la première peinture du contenu est terminée.

*L'horodatage *First Contentful Paint** correspond au premier rendu par le navigateur d'un texte, d'une image (y compris les images d'arrière-plan), d'un canevas non blanc ou d'un SVG. Cela exclut le contenu des iframes, mais inclut le texte avec des polices web en attente de chargement. C'est le moment où les internautes pourront commencer à consulter le contenu de la page pour la première fois.

Voir aussi
----------

* *First Meaningful Paint*
* *Paint Timing specification*
*Paint Timing specification* (W3C, en anglais)