La petite chronique du web #2
Le web a toujours été un média en constante évolution. Avec des navigateurs qui se mettent à jour toutes les six semaines et des standards qui évoluent en permanence, il faut rester à l’affût pour savoir quelles sont les nouveautés qui arrivent. Tous les trimestres, on se fait un petit tour d’horizon pour rester à jour. Alors, que s’est-il passé au deuxième trimestre 2019 ?
Edge
On attend toujours Edge 19 qui sera sur une base Chromium, mais si vous êtes curieux vous pouvez vous tenir au courant via le site Microsoft Edge Insider et commencer à tester les versions de développement pour Windows 10.
Chrome
De son côté Chrome a sorti deux versions : Chrome 74, le 23 avril et Chrome 75, le 4 juin. Assez légères, elles se focalisent sur l’implémentation test de futurs standards. Les points clés de ces mises à jour sont les suivants :
- Un support complet des évènements de transition CSS.
- Un meilleur support des propriétés privées des classes JavaScript. (en prévision du futur ES2020)
- L’ajout du support des séparateurs numériques en JavaScript (là encore en prévision de ES2020) ce qui semble relativement trivial, mais qui en fait rendra la vie plus belle à des millions de développeurs JavaScript.
- Une implémentation test de la proposition de standard KV Storage.
- Une implémentation test de la Web Share API (bien que ce soit surtout pertinent pour Android),
Au-delà de ça, le mois de mai c’est aussi le mois de Google I/O et si, cette année, le gros des annonces s’est fait autour d’Android Q et du Machine Learning, quelques informations ont été données à propos du futur de Chrome. Le cœur du sujet, comme toujours, c’est la question des performances et deux technologies ont été mises en avant :
Les “Portals”, sorte d’iframes sous stéroïdes qui permettent de passer de manière douce entre deux contenus différents. Au niveau spécification, c’est loin d’être fini, mais c’est le bon moment pour aller discuter cas d’usage et besoins au sein du Web Incubator Community Group (WICG).
Les “Web Packages” (dont fait partie le Signed HTTP Exchange dont on parlait déjà dans la dernière chronique) qui est un sujet assez controversé, mais très intéressant. L’idée étant de pouvoir détacher les sources d’un site/application web du domaine qui lui est associé pour pouvoir le distribuer depuis plusieurs endroits différents (on sent bien la stratégie qui vise à pouvoir distribuer des SPA depuis le Play Store).
Firefox
Firefox n’a sorti qu’une seule version au deuxième trimestre : Firefox 67, le 21 mai (Firefox 68 est prévu pour le 1er juillet donc on en parlera au prochain trimestre, mais il est déjà bon de noter qu’il s’agit de la nouvelle ESR pour les entreprises). On en retiendra les points suivants :
- Ajout du support de la Media Query prefers-color-scheme (Safari également, voir ci-après)
- Firefox 67 signe le début de l’activation du moteur de rendu WebRender écrit en Rust. Pour l’instant, il ne sera activé que pour les utilisateurs de Windows 10 disposant de certains types de matériel (en gros, les cartes Nvidia modernes), mais les performances de Firefox vont encore s’améliorer. Notez que si vous voulez expérimenter WebRender sur votre machine même si elle n’est pas encore officiellement supportée, vous pouvez activer les préférences gfx.webrender.enabled et gfx.webrender.all sur la page about:config (attention ça accentue sensiblement la capacité de Firefox à planter si votre matériel n’est pas adapté).
- Si vous n’avez pas encore jeté un coup d’œil aux outils de développement de Firefox, c’est le moment ou jamais ! Un tout nouveau debugger JavaScript débarque et il est exceptionnel. Si je devais choisir une fonctionnalité qui m’a bien tapé dans l’œil, je dirais : les inline breakpoints (la capacité de poser plusieurs breakpoints à l’intérieur d’une même ligne). Ça aurait pu être une killer feature, mais Chrome 75 (à peine trois semaines après !) vient également de les mettre en place.
- Enfin on notera que le codec AV1 (qui avait été activé avec Firefox 65 pour Windows) est désormais disponible sur toutes les plateformes.
Safari
Safari étant mis à jour avec macOS et iOS, pas de nouvelle version majeure de Safari à commenter. Cependant, la version mineure 12.1 est sortie, et pour les testeurs nous avons eu droit à un train de Safari Technology Preview : 79 le 3 avril, 80 le 17 avril, 81 le 1er mai, 82 le 15 mai, 83 le 29 mai, 84 le 5 juin, 85 le 12 juin. Quelques points d’attention sont à noter :
- Safari 12.1, dans le cadre du futur CSS Media Query Level 5, a ajouté le support de prefers-color-scheme et une nouvelle propriété non standard : supported-color-schemes qui, à elles deux, permettent de créer des styles qui pourront correspondre au thème utilisé par le système, en particulier le nouveau thème sombre introduit par macOS Mojave.
- Pas mal de travail autour de WebGPU, une implémentation test pour aider à définir une API qui permettrait d’utiliser les GPU au maximum (pour le rendu graphique certes, mais aussi pour tout ce qui est calculs parallèles). Oui, c’est encore plus bas niveau que WebGL !
- Toujours un gros travail de fond sur les outils de développement web.
On y reviendra lors de la prochaine sortie majeure de Safari, vraisemblablement au mois de septembre prochain. À noter que la Safari Technology Preview 84 est une beta formelle du futur Safari 13.
Standards et spécifications
Au-delà des implémentations spécifiques, des avancées plus globales sont faites sur le front des standards eux-mêmes.
Le W3C a officiellement délégué le développement de HTML au WHATWG, cette décision formalise un état de fait qui avait cours depuis environ cinq ans, mais maintenant, c’est clairement encadré. C’est bon à savoir, mais ça ne devrait rien changer de fondamental.
Quelques autres news à noter côté W3C :
- Une petite mise à jour de la spécification WebVTT (très largement implémentée, vous n’avez aucune raison objective de ne pas sous-titrer vos vidéos. 💖 A11Y)
- Publication de la spécification Pointer Events Level 2 (vivement Safari 13 qu’on puisse enfin s’en servir sans polyfill).
- Une petite mise à jour et appel à implémentation de la spécification Payment Request API (au niveau implémentation, c’est pas encore ça, à utiliser avec prudence).
- Publication du premier Working Draft de CSS Spatial Navigation Level 1. C’est du lourd, à surveiller de près. Cette spécification va beaucoup aider l’accessibilité en normalisant l’usage des flèches de direction pour déplacer le focus au sein d’une grille. (💖 A11Y)
- Une petite mise à jour de CSS Containement Module Level 1 (C’est encore hautement expérimental, mais ça peut largement aider à optimiser la performance de vos layouts les plus complexes).
- Publication de la première Candidate Recommendation de Trace Context. Là aussi, c’est très expérimental, mais ça peut significativement aider à gérer les questions de vie privée sur Internet.
- Publication du premier Working Draft de CSS Color Adjustment Module Level 1. En association avec la Media Query prefers-color-scheme, cette spécification permet d’indiquer comment un document ou un élément doit se comporter vis-à-vis du thème de l’OS. C’est encore super expérimental, mais avec la sortie de macOS Mojave et le futur Dark Theme de Android Q, Apple et Google poussent fort pour que cette spécification avance vite.
Si comme moi vous êtes des fans de SVG (ou pas), sachez que le SVG Community Group (SVGCG) vient de voir le jour pour discuter des évolutions du langage vectoriel du web. Si vous aussi vous trouvez que SVG « c’est tout naze » (ou pas), ce Community Group est le lieu idéal pour venir discuter de ce que vous attendez d’un langage vectoriel pour le web. Petit aparté qui n’a rien à voir, mais si vous êtes de gros énervés de C++ ou Rust et que les maths matricielles ne vous font pas peur, les projets open source Chromium, Firefox et Servo cherchent des contributeurs pour tout ce qui touche à SVG qui est actuellement en manque significatif d’amour coté implémentation.
Comme tous les ans maintenant, la nouvelle version de ECMAScript est publiée au mois de juin. Rien de fou-fou dans ECMAScript 2019, mais on y trouve quand même les nouvelles capacités suivantes :
-
Object.fromEntries
Cette méthode permet de transformer automatiquement une liste de clés/valeurs en un objet (l’inverse de ce que fait Object.entries).
Support: Babel 7, Firefox 65, Chrome 73, Safari 12.1const obj = Object.fromEntries([['a', 0], ['b', 1]]); // { a: 0, b: 1 }
-
String.prototype.{trimStart, trimEnd, trimLeft, trimRight}
Ces méthodes permettent de choisir de quel coté d’une chaîne on souhaite retirer les caractères invisibles.
Support: Babel 6, Firefox 65, Chrome 66, Safari 12, Node 10 -
Array.prototype.{flat, flatMap}
Quelques utilitaires bien pratiques pour manipuler des tableaux de tableaux.
Support: Babel 7, Firefox 62, Chrome 69, Safari 12, Node 11 -
Symbol.prototype.description
Permet d’accéder à la description définie lors de la création d’un Symbol (attention, c’est de la lecture seule, on ne peut pas modifier la description d’un Symbol).
Support: Babel 7, Firefox 63, Chrome 70, Node 11 -
La clause catch peut être utilisée sans déclarer de contexte pour récupérer l’erreur.
Support: Babel 7, Firefox 59, Chrome 66, Safari 11.1, Node 10try { throw new Error(‘foo’) console.log(‘bar’) } catch { // Désormais, cette syntaxe sans parenthèses est valide console.log(‘baz’) }
- Mise à jour de Function.prototype.toString pour rendre son retour plus normalisé.
- Amélioration du support JSON pour régler quelques problèmes de compatibilité marginaux avec la spécification. En pratique ça veut dire que JSON.parse accepte désormais les caractères non échappés U+2028 LINE SEPARATOR et U+2029 PARAGRAPH SEPARATOR et JSON.stringify produira toujours une chaîne bien formée, y compris pour les caractères unicodes qui ne peuvent être représentés que via UTF-16 (ces caractères seront échappés pour produire de l’UTF-8 valide)
- Array.prototype.sort() est désormais garantie stable (si deux éléments sont comparés de manière à être équivalents, leur ordre dans le tableau ne changera pas).
C’est tout pour ce trimestre, on se retrouve dans 3 mois pour la suite des aventures avec sans doute pas mal de trucs à dire sur Safari si tout se passe comme prévu.
En attendant, vous pouvez aussi (re)lire la petite chronique du web du premier trimestre 🙂