Investigando el atasco de imágenes base64 se destapó un anti-patrón general:
SEIS effects del chrome (bubble/slash reposition · activate re-stamp · grip/
column-inserter/table-resize remeasure) dependían de `provider.html` como señal
de «cambió el contenido». Pero `html` es el `join('')` O(documento) de TODOS los
htmls de bloque, así que cada tecla lo recomputaba + reasignaba el string entero
(con imágenes base64 en el modelo, MB por tecla; con docs de texto grandes, O(texto)).
Migrados a `provider.blocks` / `api.blocks` — la MISMA señal (el array que el
render ya computa, referencia nueva por cambio, cubre contenido + decoraciones)
pero O(1). `html` deja de computarse en el hot path (solo en export/tests).
Comentarios en cada sitio para que no vuelva a `html`.
NOTA: este NO es el coste dominante del atasco base64 (medido: ~igual antes/
después). El residual (~4ms/MB/char) parece intrínseco del navegador — un
atributo `src` de varios MB en el DOM del contenteditable ralentiza el tecleo.
La raíz (base64 en el modelo por falta de adapter `onUploadImage`) se decide
aparte. Este commit es una mejora de hot path independiente, correcta para docs
grandes en general.
Verificado: check 0 errores palabras; Playwright — grip aparece al activar,
bubble aparece y se posiciona al seleccionar (top 363), 0 errores de consola.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
alpha-0.1-sec-dom
parent
e838e7107b
commit
79a7e4dea6
Loading…
Reference in new issue