Motor de Layout de Texto JavaScript

A Biblioteca Pretext

A biblioteca Pretext e a forma mais rapida de medir texto multilinha na web. Esta biblioteca JavaScript de medicao de texto calcula quebras de linha, alturas e layout sem tocar no DOM — aproximadamente 600x mais rapida que a medicao tradicional do navegador. A biblioteca Pretext funciona em qualquer framework, qualquer navegador e qualquer idioma.

~600×
Mais rapida que o DOM
~15KB
Bundle gzipado
0
Dependencias
MIT
Licenca open source

Visao Geral

O Que E a Biblioteca Pretext?

A biblioteca Pretext e um motor de layout de texto em JavaScript/TypeScript puro criado por Cheng Lou, ex-membro da equipe principal do React e atualmente na Midjourney. Diferente das abordagens tradicionais que exigem que o navegador renderize o texto no DOM antes de medi-lo, a biblioteca Pretext divide o layout de texto em duas fases leves — tornando-a a biblioteca JavaScript de medicao de texto mais rapida disponivel.

A primeira fase da biblioteca Pretext e a preparacao. Voce chama prepare() uma vez com o texto e a fonte. A biblioteca Pretext segmenta o texto usando regras Unicode e mede a largura de cada glifo via a API measureText() do Canvas. Isso normalmente leva de 0,1 a 1ms dependendo do tamanho do texto.

A segunda fase e o layout. Voce chama layout() com a largura do container e a altura da linha. A biblioteca Pretext percorre as larguras de segmentos em cache usando aritmetica pura — sem acesso ao DOM, sem reflow DOM forcado. Uma unica chamada de layout na biblioteca Pretext leva ~0,001ms, rapida o suficiente para executar milhares de vezes por frame. O handle preparado e reutilizavel: calcule alturas para mobile, tablet e desktop a partir do mesmo handle em tres operacoes.

Biblioteca Pretext — a biblioteca JavaScript de medicao de texto mais rapida por chenglou
A biblioteca Pretext no GitHub (github.com/chenglou/pretext) — 23,6k estrelas, licenca MIT, TypeScript puro
Biblioteca Pretext — comece em 4 linhas
$ npm install @chenglou/pretext

import { prepare, layout } from '@chenglou/pretext'

const prepared = prepare('Your text', '16px Inter')
const { height, lineCount } = layout(prepared, 400, 24)

Por Que Escolher Esta Biblioteca

Recursos da Biblioteca Pretext

A biblioteca Pretext foi projetada desde o inicio para desempenho web e ergonomia do desenvolvedor. Veja o que torna a biblioteca Pretext a melhor escolha para medicao de texto em aplicacoes JavaScript.

Zero Acesso ao DOM

A biblioteca Pretext nunca le nem escreve no DOM durante o layout. Apos a medicao inicial no Canvas, cada operacao subsequente e aritmetica pura. Isso elimina layout sincrono forcado, reflow DOM e layout thrashing — os tres maiores problemas de desempenho web em aplicacoes com muito texto.

Independente de Framework

A biblioteca Pretext e um modulo JavaScript autonomo com zero dependencias. Importe-a no React, Vue, Svelte, Angular ou JavaScript puro. A biblioteca Pretext funciona de forma identica em qualquer ambiente — client-side, server-side ou Web Workers.

Suporte Completo a Unicode e i18n

A biblioteca Pretext usa Intl.Segmenter para segmentacao de texto com suporte a Unicode. CJK, arabe, hebraico, tailandes, coreano e texto com scripts mistos sao todos medidos com precisao pela mesma API. A biblioteca Pretext lida com texto bidirecional e scripts complexos sem tratamento especial.

Layout em Sub-Microssegundos

Cada chamada de <code>layout()</code> na biblioteca Pretext leva aproximadamente 0,001ms — aritmetica pura sobre larguras de glifos em cache. Voce pode chamar <code>layout()</code> milhares de vezes por frame de animacao. Isso torna a biblioteca Pretext ideal para reflow DOM em tempo real, redimensionamento responsivo e tipografia interativa.

Linhas com Largura Variavel

A biblioteca Pretext suporta controle de largura por linha via <code>layoutNextLine()</code>. O texto pode fluir ao redor de obstaculos, seguir formas irregulares ou se adaptar a layouts editoriais complexos. Esta e a mesma tecnica usada em quebra de texto estilo revista e projetos de tipografia criativa construidos com a biblioteca Pretext.

TypeScript em Primeiro Lugar

A biblioteca Pretext e escrita em TypeScript com definicoes de tipo completas. Cada funcao, parametro e tipo de retorno e fortemente tipado. Autocompletar no IDE e verificacao de tipos funcionam nativamente — nenhum pacote @types necessario ao usar a biblioteca Pretext no seu projeto.

Comparacao de Desempenho

Biblioteca Pretext vs Medicao DOM

A medicao DOM tradicional cria elementos invisiveis, renderiza o texto, le a altura calculada e remove o elemento. A biblioteca Pretext elimina todo esse ciclo. Veja como a biblioteca Pretext se compara as abordagens tradicionais.

AspectoMedicao DOMBiblioteca Pretext
Velocidade por medicao0,5–2ms (reflow DOM forcado)~0,001ms (aritmetica pura)
Acesso ao DOM necessarioSim — cria elementos ocultosNao — zero leituras/escritas no DOM
Layout thrashingSim — aciona reflow DOM do navegadorNunca — reflow impossivel
Suporte a SSR / Web WorkerNao — requer DOM do navegadorSim — funciona em qualquer lugar
Tamanho do bundleNativo do navegador (mas lento)~15KB gzipado, 0 deps
Multiplas larguras do mesmo textoRe-renderizar para cada larguraReutilizar handle — instantaneo
Suporte a Unicode e CJKDepende da renderizacao de texto do navegadorIntl.Segmenter — preciso

Aplicacoes

Casos de Uso da Biblioteca Pretext

A biblioteca Pretext se destaca onde quer que a medicao de texto seja um gargalo. De scroll virtual a tipografia criativa, veja as formas mais comuns como desenvolvedores usam a biblioteca Pretext em producao.

📜

Scroll Virtual

Pre-calcule alturas para milhares de itens de lista com altura variavel usando a biblioteca Pretext. Nenhum elemento DOM necessario. Funciona com React Virtuoso, TanStack Virtual e qualquer biblioteca de virtualizacao para scroll a 60fps.

💬

Interfaces de Chat e IA

Preveja alturas de bolhas de mensagem com a biblioteca Pretext antes que respostas de IA em streaming terminem a renderizacao de texto. Elimine mudancas de layout e instabilidade. Ajuste bolhas para minimizar espaco desperdicado no mobile.

📊

Dashboards e Tabelas de Dados

Dimensione tooltips de graficos, celulas de tabela e layouts de cards com a biblioteca Pretext — sem reflow DOM sincrono forcado. Mantenha 60fps mesmo com centenas de elementos de texto visiveis atualizando em tempo real.

📱

Layouts Responsivos

Use a biblioteca Pretext para calcular alturas de texto em multiplos breakpoints a partir de uma unica chamada <code>prepare()</code>. Mobile, tablet e desktop — tres operacoes aritmeticas do mesmo handle, zero reflows.

🎨

Tipografia Criativa

Construa layouts editoriais onde o texto flui ao redor de obstaculos, spreads multi-coluna estilo revista ou arte ASCII com particulas. A biblioteca Pretext oferece controle por linha que a quebra de texto por CSS sozinha nao consegue alcancar.

🌍

Conteudo Multilingual

A biblioteca Pretext mede texto CJK, arabe, hebraico, tailandes, coreano e scripts mistos com a mesma API de duas funcoes. Segmentacao Unicode e texto bidirecional sao tratados automaticamente atraves de metricas de fonte precisas.

API

Referencia da API da Biblioteca Pretext

A biblioteca Pretext expoe uma API pequena e focada. Cada funcao na biblioteca Pretext tem um proposito especifico — preparacao ou layout. Aqui esta a referencia completa das funcoes.

FuncaoFaseProposito
prepare(text, font)PreparacaoSegmentar e medir texto. Retorna handle opaco.
prepareWithSegments(text, font)PreparacaoComo prepare(), mas expoe dados de segmento para uso avancado.
layout(prepared, width, lineHeight)LayoutCalcular contagem de linhas e altura total. Aritmetica pura.
layoutWithLines(prepared, width, lineHeight)LayoutComo layout(), mais o texto e largura de cada linha.
layoutNextLine(prepared, cursor, width)LayoutLayout de uma linha por vez. Largura variavel por linha.
walkLineRanges(prepared, width, cb)LayoutIterar limites de linha sem construir strings.

Inicio Rapido

Comecando com a Biblioteca Pretext

Instalar a biblioteca Pretext leva um comando. A biblioteca Pretext e distribuida como um unico pacote npm com zero dependencias. Siga estes tres passos para comecar a usar a biblioteca Pretext no seu projeto.

1

Instale a Biblioteca Pretext

Adicione a biblioteca Pretext ao seu projeto com npm, pnpm ou yarn. O pacote e @chenglou/pretext — aproximadamente 15KB gzipado com zero dependencias.

2

Prepare Seu Texto

Chame prepare(text, font) uma vez por par texto+fonte. A biblioteca Pretext segmenta o texto e mede larguras de glifos via Canvas. Armazene o handle para reutilizar em multiplas chamadas de layout.

3

Layout em Qualquer Largura

Chame layout(handle, width, lineHeight) para obter a altura e contagem de linhas. A biblioteca Pretext calcula isso com aritmetica pura em ~0,001ms. Reutilize o mesmo handle para diferentes larguras de container.

Comece a Usar a Biblioteca Pretext

A biblioteca Pretext e open source, licenciada sob MIT e pronta para producao. Experimente no playground interativo, explore demos da comunidade ou mergulhe no codigo-fonte no GitHub. Junte-se a milhares de desenvolvedores que ja usam a biblioteca Pretext para medicao de texto rapida e sem DOM.

A biblioteca Pretext foi criada por Cheng Lou. Saiba mais sobre o ecossistema GitHub Pretext.

Pretext Library — A Biblioteca JavaScript Mais Rapida para Medicao de Texto