デュアルクロック — メインスレッドが固まってもフレームは落ちない
UI クロックとレンダリングクロックは独立しています。スクロール、アニメーション、レイアウト、合成は Worker 内で完結し、メインスレッドが 200ms ブロックされても表示は途切れません。
Rust/WASM コア + TypeScript シェル + 差し替え可能なバックエンド。高性能なインタラクション、ネイティブな仮想スクロール、canvas 内テキスト編集のために設計。
pnpm add @dopejs/pingoimport { 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} 行目` }),
}),
);100 万行が Shell 側で実体化されることはなく、スクロール中にコンポーネントツリーが呼ばれることもありません。ウィンドウ計算も補完も Core 内で完結します。
doper はレンダリングエンジンであり、ブラウザではありません。SSR/HTML の初期表示、汎用的な CSS 互換 (ボックスモデル、カスケード、セレクタ)、ミニプログラムやネイティブのアダプタ層、業務レベルのリッチ テキスト意味論(共同編集、数式、Markdown コマンド)は対象外です。
一方でキャレット、選択、IME、クリップボード、取り消し/やり直し、編集可能テキストのプリミティブは エンジンが所有します。これらを DOM コントロールの寄せ集めとして業務側へ押し戻すことはありません。
v0.1.0。P0–M5 のエンジニアリングマイルストーンをすべて完了し、pnpm m5:check の全自動ゲートが通過しています。
実機性能、実際の IME、スクリーンリーダーのマトリクスはプラットフォーム認定として別途追跡します。 bidi の視覚的キャレット移動と WebGPU バックエンドの既定有効化は記録済みの先送り項目です。
エンジニアリング文書の言語
技術設計、実装計画、ADR は現在のところ簡体字中国語のみで、すべての言語から同じ文書にリンクしています。