Ce blog est encore en construction
Notes de la conférence 10 fonctionnalités utiles du web que vous ne connaissez pas
- Conférence : DevFest Strasbourg 2024
- Speaker : Olivier Leplus
- Lien vers la video : Youtube
- Publié le : 14 Décembre 2024
Quelques mots sur la conférence et le talk
Le DevFest Strasbourg se décrit comme “La plus grande conférence technique du Grand Est destinée aux développeurs”.
Olivier Leplus a commencé le web avant que JQuery n’existe, et heureusement ça a un peu évolué dans le bon sens depuis. Actuellement il est Developer Advocate chez AWS.
La plateforme web évolue de manière un peu désordonnée mais elle évolue beaucoup. Ce talk rappelle le fonctionnement de la standardisation des standards du web, et présente quelques fonctionnalités, récentes ou pas, que l’on aurait pu louper.
TC39
Petit rappel sur les Technical Committees, des comité constitués de gens travaillant (pour beaucoup d’entre eux) dans des grands groupes du web (Google, Apple, Paypal…) et se rassemblant pour travailler à faire evoluer les standards du web. Tout ce beau monde est chapeauté par ECMA, une association (européenne) chargée de la standardisation de plusieurs domaines informatiques dont les langages de script et programmation. Le process consiste à valider des spécifications, chacune provenant d’un standard et disposant d’un comité. Pour le Javascript il s’agit du standard ECMA 262, des spécifications ECMAscript et du comité TC39.
Le repo public sur lequel les spécifications sont proposées, discutées et validées est celui-ci, Ecma TC39 sur Github.
Chaque proposition passe par plusieurs stages:
- stage 0: 🤗 proposition émise
- stage 1: 🔍 proposition officielle
- stage 2: 🥸 proposition en draft
- stage 3: 🤝 proposition candidate destinée à être implémentée par des navigateurs
- stage 4: 🏆 proposition implémentée par au moins 2 navigateurs
Néanmoins ce n’est pas parce qu’une proposition est en stage 4 qu’elle est disponible. Les navigateurs n’implémentent pas tout au même rythme et dans le même ordre.
Des initiatives ont été menées, par exemple Baseline pour se mettre d’accord et unifier le calendrier d’implémentation des fonctionnalité. Une feature est considérée baseline quand elle est implémentée par tous les navigateurs.
NDLR: Rachel Andrews avait fait une conférences aux CSS Days 2022 sur l’initiative similaire Interop 2022, video sur youtube.
Quelques propositions et fonctionnalités intéressantes
Temporal API
Cette API est une proposition concernant la gestion des dates.
Elle permettra de manipuler des dates, d’ajouter des durées, gérer des heures. Elle permettra aussi de manipuler des timezones, de faire de la comparaison de dates… La fin des librairies spécialisées présentes dans tous les projets web ?
quelques méthodes sur les Arrays
La méthode fill
(MDN) qui permet de remplir un tableau de valeurs entre 2 index.
La méthode flat
(MDN) qui permet de réduire la profondeur de tableaux, comme en java.
La méthode fromAsync
(MDN) qui renvoie un tableau contenant le résultat d’une itération sur des éléments async.
La méthode groupBy
(MDN) qui permet de regrouper les éléments d’un tableau par un critère spécifique.
quelques méthodes sur les Promises
La méthode Promise.withResolvers
(MDN) permet de récupérer la promesse avec deux méthodes pour resolve ou reject cette promesse.
let { promise, resolve, reject } = Promise.withResolvers();
La méthode Promise.AllSettled
(MDN) permet, lorsque l’on a un tableau de promesses dont l’une d’elles peut échouer sans soucis, de ne pas bloquer le flux mais de les executer et de récupérer ensuite l’état de chacune des promesses.
Compression Stream API
Un sujet peu plus niche mais on peut désormais compresser (et décompresser) des streams dans le navigateur.
Blob.stream().pipeThrough(new CompressionStream("gzip"))
Lien sur le MDN, Compressions streams API
CSS @property
La règle @property (MDN) fonctionne sur le principe des customs properties et permet de rajouter une couche de sécurité sur leur utilisation. Cela revient à de la création de types.
@property --box-color {
syntax: '<color>';
inherit: false; // indique si un enfant peut redéfinir la valeur de son parent
initial-value: lightblue;
}
.box {
background-color: var(--box-color); // OK
}
.box-invalid {
--box-color: 10px; // not OK
}
CSS relative-color
Cette méthode permet à partir d’une couleur de départ d’effectuer ensuite des opérations dessus. cf. MDN
Par exemple, avec la méthode rgb():
--une-couleur: #556FFF;
/* le code suivant va transposer la valeur #556FFF en rgb */
/* puis y appliquer une transformation du type : */
/* - la partie "r" prendra la valeur 200 */
/* - les valeurs g et b seront conservées */
background-color: rgb(from var(--une-couleur) 200 g b);
CSS vertical-align
Les centrages via bidouille comme ça c’est fini depuis longtemps
.v-center {
position: absolute;
top: 50%;
transform: translateY(50%);
}
ça fait quelque temps qu’on peut le faire en grid ou en flex via un align-items: center;
.
Désormais c’est possible depuis n’importe quelle div (bloc) via un align-content: center;
CSS columns
Les colonnes sont disponible depuis 2017, MDN. Elles permettent d’afficher sous forme de colonnes le contenu d’un texte. Si celui-ci prends 100% de son parent et que la propriété indique columns: 2
, le contenu va être scindé en 2 colonnes de 50% de largeur.
.texte {
columns: 3; /* 250px*/
gap: 4px;
}
CSS attr()
Cet attribut MDN permet de prendre un attribut d’un élément pour l’utiliser en css.
NDLR: pour l’instant ça a l’air d’être surtout supporté pour les valeurs content
des selecteurs :before & :after
parce que le typage n’est pas au final (ça marche pour du texte principalement).
blockquote {
margin: 1em 0;
}
blockquote::after {
display: block;
content: ' (source: ' attr(cite) ') ';
color: hotpink;
}
JS private properties
L’utilisation de typescript est majoritaire désormais mais c’est intéressant de savoir qu’on peut avoir des propriétés privées dans les classes javascript en natif. MDN
class maClasse {
#propriétéPrivée;
}
JS nullish coalescing assignment
La notion de nullish coalescing est rentrée dans nos habitudes mais pas forcément le fait de l’utiliser pour faire directement une affectation (assignment) depuis une condition de ce type. Sous la forme valeurPeutEtreNull ?= valeurParDefaut
MDN
const maison = { nbPortes: 3; }
maison.nbPortes ??= 7; // 3
maison.nbFenetres ??= 7; // 7
// maison = { nbPortes: 3, nbFenetres: 7 }
JS Error.cause
Désormais on peut ajouter aux erreurs, en plus des messages, l’erreur parente dont elle provient quand on cascade des erreurs. MDN
try {
connectToDatabase();
} catch (err) {
throw new Error("Connecting to database failed.", { cause: err });
}
Push API
La Push API est désormais en baseline. Il s’agit d’une fonctionnalité destinée aux web workers pour envoyer des notifications depuis un serveur.
Node
On utilise souvent des librairies de test tierces (jest, mocha...) dans nos applications sans forcément savoir ce que proposent nos langages ou framework. Node comporte depuis 2022 un module de test avec un environnement intégré, node:test.