Chromium: excessive layout time with many math previews due to unused CSS anchor
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 84/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- react, typescript
- Área
- frontend, performance
Línea de trabajo
Comienza en packages/core/src/editor/Block.css e inspecciona la declaración anchor-name de .bn-preview-container; el issue informa de que no existe ningún consumidor del anchor y de que eliminarla elimina el coste de layout de Chromium. Reproduce el fixture 500-inline-formula proporcionado, compara los resultados de Chromium Performance con y sin la declaración y confirma que todas las previews siguen renderizándose tanto en modo editable como de solo lectura.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
What’s broken?
Rendering 500 official inline math previews in Chromium spends about 17.6 seconds in layout, including with editable={false}. Every .bn-preview-container receives anchor-name: --bn-source-popup-anchor in packages/core/src/editor/Block.css, although the current popup positioning does not consume this anchor.
Removing that declaration reduces layout to about 0.43 seconds with the same content and DOM.
What did you expect to happen?
Closed source previews should not incur CSS-anchor layout overhead when popup positioning does not use anchors.
Steps to reproduce
- In a React app with
@blocknote/core,@blocknote/react,@blocknote/mantine, and@blocknote/math-block, render this component:
import { BlockNoteSchema, defaultBlockSpecs, defaultInlineContentSpecs } from "@blocknote/core";
import { useCreateBlockNote } from "@blocknote/react";
import { BlockNoteView } from "@blocknote/mantine";
import { createReactInlineMathSpec } from "@blocknote/math-block";
import "@blocknote/mantine/style.css";
const schema = BlockNoteSchema.create({
blockSpecs: defaultBlockSpecs,
inlineContentSpecs: {
...defaultInlineContentSpecs,
math: createReactInlineMathSpec(),
},
});
const initialContent = Array.from({ length: 25 }, (_, row) => ({
type: "paragraph",
content: Array.from({ length: 20 }, (_, col) => [
{ type: "text", text: " text ", styles: {} },
{ type: "math", content: `x_{${row * 20 + col}}^2 + y^2 = z^2` },
]).flat(),
}));
export default function App() {
const editor = useCreateBlockNote({ schema, initialContent });
return <BlockNoteView editor={editor} editable={false}
formattingToolbar={false} sideMenu={false} slashMenu={false} />;
}
- Serve a production build and record page load in Chromium's Performance panel.
- Add
.bn-preview-container { anchor-name: none !important; }as a diagnostic override and reload. Layout time drops substantially; all 500 formulas remain rendered. - Repeat with
editable={true}; the same issue occurs.
BlockNote version
Reproduced on 0.54.0 and current source at 835fabf86ef26c9932075ab47f3d03cf900f276b.
Environment
Chromium 151.0.7922.137, Linux, AMD Ryzen 7 5800X. Production React/Vite fixture, 1280×900 viewport, no CPU throttling.
Additional context
Current-source production builds, three runs per cell; median cumulative CDP LayoutDuration through editor/font readiness:
| 500 inline formulas | Original | Declaration removed |
|---|---|---|
| Editable | 17.610 s | 0.437 s |
| Read-only | 17.684 s | 0.427 s |
Median readiness improves from 18.51 to 1.28 seconds in editable mode. The same trigger also reproduces with official block math. No position-anchor, anchor(), or anchor-size() consumer exists in the inspected source; popups currently use absolute positioning.
Contribution
- I'd be interested in contributing a fix for this issue
- Lenguaje dominante
- TypeScript
- Estrellas
- 10.2k
- Forks
- 772
- Merge medio
- 3 d 11 h
- PR fusionados (30 d)
- 17
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de TypeCellOS/BlockNote
-
Off-By-One `RangeError` Crash and Text Duplication in `StyleManager.editLink` and `deleteLink` Abiertoneeds-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
TypeCellOS/BlockNote#3073 ·
-
needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
TypeCellOS/BlockNote#3072 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
TypeCellOS/BlockNote#2949 · 1 comentario ·
-
a11y
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
TypeCellOS/BlockNote#2855 ·
-
a11y
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
TypeCellOS/BlockNote#2829 · 1 comentario ·
Todos los issues de TypeCellOS/BlockNote
Issues similares
-
Type/Bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
OpenNSW/nsw-srilanka#497 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
0xMiden/bridge-portal#132 ·
-
react-doctor severity:warning tech-debt
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
digidem/comapeo-cloud-app#403 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100