Depuis trente ans, les développeurs front-end vivent avec un compromis que personne ne remet vraiment en question. Mesurer la largeur ou la hauteur d'un texte dans un navigateur nécessite obligatoirement de passer par le DOM ou par un Canvas, deux opérations qui impliquent un coût de performance considérable. Cette réalité technique, acceptée comme une fatalité, a des conséquences directes sur la qualité des interfaces utilisateur que vous utilisez quotidiennement.
Pretext, une librairie JavaScript/TypeScript créée par Cheng Lou (le créateur de react-motion et ex-développeur React core chez Facebook), propose une approche radicalement différente. En utilisant les APIs Canvas du navigateur pour mesurer les segments de texte une seule fois, puis en recalculant le layout par pure arithmétique, elle permet d'obtenir des mesures de texte multi-lignes sans jamais déclencher de reflow DOM.
Le résultat est spectaculaire : des performances jusqu'à 500 fois plus rapides que les méthodes DOM traditionnelles. En quatre jours, le dépôt GitHub a dépassé les 25 000 étoiles. Le tweet d'annonce de Cheng Lou cumule plus de 60 000 likes et 21 millions de vues. Pour les équipes qui construisent des produits SaaS multilingues, les implications sont majeures.
Cette problématique est d'autant plus critique dans le contexte des applications de prospection B2B modernes. Lorsque vos commerciaux composent des séquences d'emails personnalisées dans un éditeur comme celui d'Emelia, chaque modification du texte nécessite un recalcul de la mise en page pour s'assurer que l'objet ne sera pas tronqué, que le corps du message s'affiche correctement dans la fenêtre de prévisualisation, et que les boutons d'appel à l'action restent visibles. Multipliez cette opération par le nombre de variantes A/B testées et le nombre de langues ciblées, et vous comprenez pourquoi la mesure de texte devient un enjeu de performance à part entière.
Les frameworks front-end modernes comme React, Vue et Svelte aggravent involontairement le problème. Leur modèle de rendu déclaratif, où l'interface se reconstruit à chaque changement d'état, multiplie le nombre de mesures de texte nécessaires. Un composant de tableau qui se re-rend après un tri ou un filtre peut déclencher des centaines de mesures de texte simultanées, chacune provoquant un reflow. Pretext, en découplant la mesure de texte du cycle de rendu du navigateur, s'intègre naturellement dans ces architectures réactives sans créer de goulots d'étranglement.
Pour comprendre pourquoi Pretext représente une avancée significative, il faut d'abord comprendre comment les navigateurs gèrent la mesure de texte. Chaque navigateur maintient un moteur de rendu complexe qui calcule la position et la taille de chaque élément sur la page. Lorsque vous demandez les dimensions d'un texte, le navigateur doit effectuer un ensemble d'opérations coûteuses.
La méthode DOM classique (getBoundingClientRect) fonctionne en créant un élément invisible dans le document, en y injectant le texte, puis en interrogeant le navigateur sur ses dimensions calculées. Cette opération déclenche un reflow, c'est-à-dire un recalcul complet de la mise en page. Sur une page complexe avec des centaines d'éléments, ce reflow peut prendre plusieurs millisecondes, un coût qui se multiplie à chaque mesure.
La méthode Canvas (measureText) est souvent présentée comme une alternative plus performante. Elle utilise le contexte 2D d'un élément Canvas pour mesurer le texte sans déclencher de reflow. Cependant, cette méthode reste relativement lente car elle fait appel au moteur de rendu de polices du navigateur à chaque appel. Sur des textes multilingues mélangeant des scripts différents (latin, arabe, CJK), le calcul devient encore plus complexe.
Le problème s'aggrave considérablement à l'échelle. Imaginez un tableau de bord qui affiche 500 lignes de données, chacune contenant des textes de longueurs variables dans plusieurs langues. Pour ajuster dynamiquement les largeurs de colonnes, vous devez mesurer chaque cellule. Avec la méthode DOM, cette opération peut facilement prendre plus de 200 millisecondes, soit environ 12 frames perdues à 60 fps, créant un gel visible de l'interface.
L'approche de Pretext repose sur une architecture en deux phases. La fonction prepare() utilise l'API canvas.measureText() du navigateur pour mesurer chaque segment de texte une seule fois, en respectant les règles Unicode de segmentation (Intl.Segmenter). Elle gère correctement tous les scripts : latin, CJK, arabe en RTL, séquences d'emoji, hindi, thaï. Les résultats sont mis en cache.
La seconde phase, layout(), calcule le nombre de lignes, la hauteur totale et les positions de coupure par pure arithmétique. Aucun DOM, aucun reflow. Chaque appel à layout() prend environ 0,05 milliseconde pour 1000 éléments. Quand l'utilisateur redimensionne sa fenêtre, seul layout() est rappelé, pas prepare(). Le redimensionnement devient pratiquement gratuit.
import { prepare, layout } from '@chenglou/pretext';
// prepare() mesure les segments via Canvas (une seule fois)
const prepared = prepare(
'Découvrez comment automatiser votre prospection B2B',
'16px Inter'
);
// layout() est de l'arithmétique pure (ultra rapide)
const { height, lineCount } = layout(
prepared,
400, // largeur du conteneur en px
24 // hauteur de ligne en px
);
console.log(height); // → 48
console.log(lineCount); // → 2
// Recalculer pour une largeur différente (gratuit)
const narrow = layout(prepared, 240, 24); // → 3 lignesL'API complète est documentée sur le dépôt GitHub officiel et sur pretextjs.dev, le site officiel de la librairie. La librairie est disponible sur npm sous le nom @chenglou/pretext.
Les benchmarks publiés montrent des écarts de performance spectaculaires. Sur 1000 mesures de texte consécutives :
Méthode | Temps (1000 mesures) | Reflows | Facteur vs DOM |
|---|---|---|---|
DOM (getBoundingClientRect) | ~94 ms | 1000 reflows | 1x (référence) |
Canvas (measureText) | ~5 ms | 0 reflows | ~19x |
Pretext (prepare + layout) | ~0.05 ms | 0 reflows | ~500x |
Pretext (layout seul) | ~0.02 ms | 0 reflows | ~4700x |
Le facteur de 500x par rapport à la méthode DOM n'est pas un chiffre marketing exagéré. Il s'explique par l'élimination complète des reflows et par le fait que les calculs de layout sont de l'arithmétique pure sur des données pré-cachées. En termes concrets, 1000 mesures DOM équivalent à environ 6 frames perdues à 60 fps, là où Pretext ne provoque aucun ralentissement perceptible.
Chaque client email tronque les objets à une largeur pixel différente. Gmail sur desktop affiche environ 520 pixels, Outlook 440 pixels, Apple Mail 480 pixels, et sur mobile les limites sont encore plus réduites. Sans mesure précise, les copywriters travaillent à l'aveugle.
Avec Pretext, il devient possible de simuler en temps réel le rendu de l'objet dans chaque client, directement dans l'interface de composition. Les plateformes d'emailing professionnel comme Emelia, qui gèrent des campagnes dans plus de 40 langues, sont particulièrement concernées. Un objet qui fonctionne parfaitement en français peut être tronqué de manière maladroite en allemand ou en finnois, où les mots sont naturellement plus longs.
Les éditeurs visuels modernes, qu'il s'agisse d'éditeurs de texte riche, de constructeurs d'emails, ou d'outils de design, ont tous besoin de mesurer du texte en permanence. Chaque frappe de clavier peut nécessiter un recalcul de la mise en page : est-ce que le texte dépasse de la zone ? Faut-il passer à la ligne suivante ? Comment ajuster l'espacement ? Pretext rend ces opérations quasi-instantanées.
Les applications de type CRM, les dashboards analytiques et les outils de gestion de campagne affichent régulièrement des tableaux avec des centaines de lignes. L'ajustement automatique des largeurs de colonnes nécessite de mesurer le texte le plus long dans chaque colonne. Avec la méthode DOM traditionnelle, cette opération peut geler l'interface pendant plus d'une seconde. Pretext réduit ce temps à quelques millisecondes.
La dimension multilingue est celle où Pretext apporte le plus de valeur ajoutée. Dans le monde du SaaS B2B, la localisation ne se limite plus à la traduction des interfaces. Elle implique que chaque composant visuel s'adapte correctement à des alphabets et des longueurs de mots radicalement différents.
Un bouton qui affiche parfaitement « Send » en anglais doit aussi contenir « Envoyer » en français, « Senden » en allemand, et « 送信する » en japonais, sans débordement ni troncature. Emelia, qui supporte plus de 40 langues dans ses campagnes de prospection (grâce à la technologie de traduction développée par Bridgers), illustre parfaitement ce défi.
L'enjeu est particulièrement visible dans les tableaux de données multilingues. Un CRM qui affiche des noms de contacts internationaux doit gérer simultanément des noms courts en anglais (« John Smith ») et des noms beaucoup plus longs dans d'autres scripts. Les noms thaïlandais, par exemple, incluent souvent des titres honorifiques qui allongent considérablement la chaîne de caractères. Les noms arabes s'écrivent de droite à gauche et nécessitent un calcul de largeur inversé. Sans Pretext, chaque cellule de ce tableau nécessite un appel DOM coûteux.
Un autre cas d'usage concret concerne les interfaces de composition de séquences d'emails. Quand un commercial crée une campagne de prospection ciblant des marchés germanophones, les mots composés allemands (comme « Geschäftsführungsmitglied » ou « Softwareentwicklungsabteilung ») peuvent faire exploser la largeur des boutons et des lignes de texte. La capacité de pré-calculer ces débordements avant même que l'email ne soit envoyé représente un gain de qualité significatif pour les plateformes d'emailing professionnel.
Pretext gère nativement les scripts complexes grâce à son utilisation de l'API Intl.Segmenter : arabe avec ligatures et écriture de droite à gauche (RTL), CJK (chinois, japonais, coréen), thaï avec positionnement tonal, devanagari avec caractères combinés, et même les séquences d'emoji composées. Les tests du dépôt incluent des corpus complets en chacune de ces langues, validés contre le rendu réel des navigateurs.
Critère | DOM (reflow) | Canvas measureText | Pretext |
|---|---|---|---|
Vitesse (1000 items) | ~94 ms | ~5 ms | ~0.05 ms |
Déclenche un reflow | Oui (bloquant) | Non | Non |
Multi-lignes | Oui (natif) | Non (1 ligne) | Oui |
Support RTL/bidi | Oui (natif) | Partiel | Oui (complet) |
Support CJK | Oui | Oui | Oui |
Fonctionne en SSR | Non | Non (nécessite Canvas) | Prévu (roadmap) |
Taille | Natif | Natif | ~10 kb gzippé |
Dépendances | Aucune | Aucune | Aucune |
Précision | Pixel-perfect | Pixel-perfect | Sub-pixel (±0.5px) |
Le principal compromis de Pretext concerne la précision : les mesures sont sub-pixel (à moins d'un demi-pixel près dans la plupart des cas), mais pas pixel-perfect dans 100% des scénarios. Pour la détection de troncature, l'ajustement de colonnes et l'estimation de hauteur de texte, cette précision est largement suffisante. Pour du rendu pixel-perfect critique, la méthode DOM reste nécessaire.
Cheng Lou n'est pas un inconnu dans l'écosystème JavaScript. Il est le créateur de react-motion (21 000+ étoiles), la librairie qui a révolutionné les animations React en remplaçant le paradigme durée/easing par des ressorts physiques. Chez Facebook, il a dirigé le projet ReasonML, un langage inspiré d'OCaml qui a alimenté messenger.com.
Sa conférence ReactEurope 2016 « On the Spectrum of Abstraction » reste une référence dans la communauté. Pretext s'inscrit dans la même philosophie : trouver une contrainte fondamentale que tout le monde accepte comme acquise, et la supprimer par les mathématiques. Le dépôt GitHub est sous licence MIT.
La publication de Pretext a suscité un enthousiasme rare dans la communauté front-end. En quelques jours, des développeurs du monde entier ont créé des démos spectaculaires : un dragon qui repousse le texte en temps réel, des simulations de physique appliquées à la typographie, des effets de morphing de paragraphes.
Au-delà des réactions individuelles, Pretext a déclenché une vague de créativité sans précédent dans la communauté front-end. Le concept de « text layout sans DOM » a inspiré des dizaines de développeurs à créer des démos expérimentales. Un développeur roumain a construit un dragon animé qui repousse physiquement le texte sur son passage, avec 80 segments articulés et un recalcul complet du layout à chaque frame, le tout à 60 images par seconde et zéro reflow DOM. D'autres ont créé des simulations de physique où des balles rebondissent entre les lignes de texte, ou des effets de morphing où les paragraphes se transforment en temps réel.
Cette effervescence créative illustre un point fondamental : Pretext ne se contente pas d'optimiser un calcul existant. En rendant la mesure de texte quasi-gratuite, la librairie ouvre des possibilités de design interactif qui étaient auparavant inenvisageables à cause du coût de performance. Les designers d'interfaces peuvent désormais imaginer des animations et des transitions basées sur le texte sans se soucier des limitations de performance du navigateur.
Les réactions des figures majeures de l'écosystème JavaScript parlent d'elles-mêmes :
Guillermo Rauch (CEO de Vercel) : « So good. Thank you. »
shadcn (créateur de shadcn/ui) : « Incredible. Trying this. »
Rasmus Andersson (designer de la police Inter) : « Fantastic! What a great idea. »
Ryan Florence (co-créateur de Remix) a immédiatement demandé le support Canvas et partagé une démo
Garry Tan (CEO de Y Combinator) a intégré Pretext dans son propre outil GStack
Les démos interactives et les démos communautaires montrent des cas d'usage créatifs qui repoussent les limites du rendu de texte dans le navigateur.
Comme toute solution technique, Pretext présente des limites qu'il est important de connaître avant de l'adopter :
La gestion des scripts complexes (arabe avec ligatures contextuelle, thaï, devanagari) est supportée mais peut introduire des écarts de mesure légèrement plus importants que pour les scripts latins
Le rendu côté serveur (SSR) est prévu dans la roadmap mais pas encore disponible
Les polices personnalisées non-web nécessitent un travail préalable de configuration
La librairie ne gère pas le rendu final du texte, seulement sa mesure et son layout
Le fallback system-ui n'est pas recommandé sur macOS pour des raisons de précision
Malgré ces limites, le projet est activement maintenu, la communauté de contributeurs grandit rapidement, et la codebase suit les meilleures pratiques JavaScript modernes avec une couverture de tests complète incluant des corpus en thaï, chinois, coréen, japonais, arabe et plus encore.
npm install @chenglou/pretext
# ou
pnpm add @chenglou/pretext
# ou
bun add @chenglou/pretextL'intégration est remarquablement simple. La librairie n'a aucune dépendance externe et fonctionne dans tous les environnements JavaScript modernes (navigateur, Node.js, Bun). Voici un exemple d'utilisation complète pour un cas de prédiction de troncature d'email :
import { prepare, layout } from '@chenglou/pretext';
// Vérifier si un objet d'email sera tronqué dans Gmail
function checkEmailSubjectTruncation(subject: string) {
const prepared = prepare(subject, '14px Roboto');
const result = layout(prepared, 520, 20); // 520px = largeur Gmail desktop
return {
willTruncate: result.lineCount > 1,
width: result.width,
suggestion: result.lineCount > 1
? 'Votre objet sera tronqué dans Gmail. Raccourcissez-le.'
: 'Votre objet s\'affichera correctement.'
};
}
// Test avec un objet en français et en allemand
console.log(checkEmailSubjectTruncation('Découvrez nos nouvelles fonctionnalités'));
console.log(checkEmailSubjectTruncation('Entdecken Sie unsere neuesten Funktionen'));Pretext ne révolutionne pas le développement web de manière spectaculaire. Elle résout un problème spécifique, la mesure et le layout de texte, avec une approche ingénieuse et des performances exceptionnelles. Mais ce problème spécifique est un goulot d'étranglement silencieux qui affecte des milliers d'applications web dans le monde.
Le timing est particulièrement pertinent. Alors que le SaaS B2B se mondialise et que les produits doivent supporter des dizaines de langues simultanément, les outils qui sous-tendent ces interfaces doivent évoluer en conséquence. La mesure de texte semblait être un problème résolu, mais l'écart de performance entre les approches traditionnelles et ce que Pretext propose révèle combien d'optimisation reste possible dans les briques les plus fondamentales du développement web.
Pour les équipes qui construisent des produits SaaS multilingues, des éditeurs visuels, ou des interfaces de données complexes, Pretext mérite d'être évalué sérieusement. Le gain de performance est réel, l'intégration est simple, et la communauté qui se construit autour du projet est un signe encourageant de sa pérennité.

Aucun engagement, des prix pour vous aider à augmenter votre prospection.
Vous n'avez pas besoin de crédits si vous voulez simplement envoyer des emails ou faire des actions sur LinkedIn
Peuvent être utilisés pour :
Trouver Emails
Action IA
Trouver des Numéros
Vérifier des Emails