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 עוברת במלואה.

ביצועים במכשירים אמיתיים, שיטות קלט אמיתיות ומטריצת קוראי המסך שייכים להסמכת פלטפורמה ונמדדים בנפרד. ניווט חזותי בטקסט דו-כיווני והפעלת עורף WebGPU כברירת מחדל הם דחיות מתועדות.

שפת מסמכי ההנדסה

התכנון הטכני, תוכנית היישום ומסמכי ה-ADR קיימים כרגע רק בסינית מפושטת, וכל השפות מקשרות לאותו מסמך.

מופץ ברישיון MIT