En 2017, Firefox avait un problème de vitesse et tout le monde le savait. Chrome était entré sur le marché des navigateurs en lisant la même tendance matérielle que Mozilla avait observée, puis l'avait exploitée : les processeurs multicœurs permettaient à Chrome de répartir les onglets dans des processus séparés, de sorte qu'un onglet d'arrière-plan occupé ne pouvait pas bloquer celui au premier plan. La base de code plus ancienne de Firefox rendait cette même architecture à gros grain lente à atteindre, et les utilisateurs le quittaient.
Les correctifs évidents avaient chacun un plafond. Comprimer le moteur C++ monothread existant ne pouvait pas utiliser les cœurs inactifs. Copier la conception de Chrome avec un processus par onglet n'aidait que lorsque plusieurs pages étaient ouvertes, car le travail de chargement d'une nouvelle page s'exécutait toujours sur un seul cœur. Et réécrire tout le navigateur depuis zéro était un pari de plusieurs années qui casserait le produit en chemin.
La réponse de Mozilla fut de financer d'abord l'architecture radicale dans un laboratoire séparé. Elle créa Rust, un langage exempt de courses de données, et Servo, un moteur de navigateur de recherche construit sur un parallélisme à grain fin, prouvant que le rendu parallèle va plus vite avec moins de bogues. Quantum transplanta ensuite les composants de Servo dans Firefox un par un : le moteur CSS Stylo parallélisait le calcul de style sur tous les cœurs avec du vol de travail pour des accélérations linéaires, le compositeur passa dans son propre processus, Quantum DOM hiérarchisait les tâches du thread principal, et une force de frappe Quantum Flow traquait des cas comme les fils sociaux lents.
La voie composant par composant signifiait que Firefox continuait de fonctionner entre les remplacements et que chaque portage livrait un gain mesurable ; Firefox 57, la première version Quantum, sortit le 14 novembre 2017, la navigation multiprocessus étant déjà par défaut pour tous les utilisateurs depuis le milieu de 2017. Les gens remarquèrent que Firefox était de nouveau rapide, des commentaires du jour de sortie décrivent des utilisateurs revenant de Chrome, et l'annonce suscita une discussion de 2 180 points sur Hacker News.
Prouver le moteur radical dans un projet de recherche, puis transplanter ses composants exempts de courses dans le produit commercialisé un par un
Rust a éliminé la classe de bogues des courses de données, ce qui rend le parallélisme à mémoire partagée à grain fin suffisamment pratique pour parier un navigateur dessus.
Servo a prouvé l'architecture de chaque composant avant l'intégration, de sorte que chaque portage Quantum dans Gecko était un transplant de recherche testée plutôt qu'une expérience à l'intérieur du produit commercialisé.
Remplacer les sous-systèmes un par un évitait la falaise de la réécriture : le navigateur était livré en continu, et chaque pièce, comme le calcul de style divisant son temps par le nombre de cœurs, apportait un gain mesurable.
La force de frappe Quantum Flow, centrée sur les cas d'usage, corrigeait les ralentissements que les utilisateurs ressentaient réellement, puis devint un flux de travail permanent soutenu par des tests CI, la télémétrie et le suivi des régressions.
Quand un rival possède l'architecture dont vous avez besoin, ne réécrivez pas tout le produit : construisez et prouvez la nouvelle architecture séparément, puis remplacez les sous-systèmes de façon incrémentale afin que chaque remplacement livre des gains mesurables
Suites
Firefox Quantum (version 57) sortit le 14 novembre 2017 ; l'explication de lancement attira 2 180 points et 687 commentaires sur Hacker News, et les commentaires sur l'article décrivent des utilisateurs partis vers Chrome qui revenaient. Mozilla déclara que WebRender, le composant de rendu GPU, arriverait au cours de 2018 avec Advanced Layers pour combler l'écart, et que le processus de la force de frappe devenait un outillage et un suivi réguliers afin que les régressions soient détectées automatiquement. La version mit aussi fin au support des modules complémentaires XUL hérités, ce qui, selon certains commentateurs, leur coûta des extensions sur lesquelles ils comptaient.
VÉRIFIEZ LES SOURCES
Les sources
- Entering the Quantum Era — How Firefox got fast again and where it's going to get faster Mozilla Hacks · hacks.mozilla.org ·
- Hacker News discussion: Entering the Quantum Era — How Firefox got fast again Hacker News · news.ycombinator.com ·