Skip to content

Pingoдвижок рендеринга canvas

Ядро на Rust/WASM + оболочка на TypeScript + сменный бэкенд. Спроектирован для высокопроизводительного взаимодействия, нативной виртуальной прокрутки и редактирования текста внутри canvas.

PingoPingo

Начать за 30 секунд

sh
pnpm add @dopejs/pingo
ts
import { createElement, createHostedCanvasRoot } from "@dopejs/pingo";

const root = await createHostedCanvasRoot(document.querySelector("canvas")!);

root.render(
  createElement("virtualList", {
    width: 480,
    height: 640,
    itemCount: 1_000_000,
    estimatedItemHeight: 32,
    renderItem: (index) => createElement("text", { value: `Строка ${index}` }),
  }),
);

Миллион строк никогда не материализуется в оболочке, а прокрутка не вызывает дерево компонентов: расчёт окна и подстановка происходят внутри ядра.

Чего он не делает

doper — это движок рендеринга, а не браузер. Он не покрывает SSR и первую отрисовку HTML, общую совместимость с CSS (блочная модель, каскад, селекторы), слои адаптации к мини-приложениям или нативным платформам, а также прикладную семантику форматированного текста (совместное редактирование, формулы, команды Markdown).

Зато каретка, выделение, IME, буфер обмена, отмена/повтор и примитивы редактируемого текста принадлежат движку. Ничего из этого не возвращается прикладному коду, чтобы тот собирал их из DOM-элементов.

Текущее состояние

v0.1.0. Все инженерные вехи P0–M5 завершены, полная автоматическая цепочка pnpm m5:check проходит.

Производительность на реальных устройствах, реальные методы ввода и матрица программ чтения с экрана относятся к квалификации платформы и отслеживаются отдельно. Визуальная навигация в bidi и включение бэкенда WebGPU по умолчанию — задокументированные отложенные пункты.

Язык инженерных документов

Технический дизайн, план реализации и ADR сейчас существуют только на упрощённом китайском; все языки ссылаются на один и тот же документ.

Опубликовано под лицензией MIT