מצב
console.logפעילconsole.clearבשימוש נדירYogaפעילTurbolog encoderפעילDevTools Throttlerמכובדtextjs.orgפעילמדידת ביצועים חיה
תהליך העיבוד של @textjs/core פועל בכרטיסייה הזו על לוח מחוונים בגודל 100×32 וכותב פריימים למסוף בזיכרון.
- פריים מלא
- —
- layout + ציור + קידוד
- הקלדה
- —
- עריכת שורה אחת
- פריים במנוחה
- —
- אין שינוי
- span של %c
- —
- 3,200 תאים
מתחילה אוטומטית כשהדף אינו פעיל.
היסטוריית ביצועים
packages/core/test/perf.test.ts בכל אבן דרך, באותו מחשב (Apple M5 Pro · Bun 1.4.4). ממוצע של 1,000 פריימים.
| גרסה | פריים מלא | הקלדה | חוסר פעילות | span של %c |
|---|---|---|---|---|
0.1.0מרץ 2025 · @textjs/core · 7c91cea | 0.194ms | 0.065ms | 0.043ms | 205 |
0.2.0יולי 2025 · textjs.org · 92437cc | 0.192ms | 0.067ms | 0.042ms | 205 |
0.3.0נוב׳ 2025 · 10× input · 8c2d1b1 | 0.205ms | 0.065ms | 0.043ms | 146 |
0.3.0נוב׳ 2025 · Mobile pass · e2e6e46 | 0.212ms | 0.067ms | 0.045ms | 146 |
0.4.0מאי 2026 · Zero-flash frames · f007ade | 0.184ms | 0.046ms | 0.028ms | 146 |
1.0.0אוק׳ 2026 · Text.js 1.0 · 57968b6 | 0.163ms | 0.011ms | 0.000ms | 149 |
ממשק DevTools
bench/devtools ב-Chrome for Testing: ציורים ריקים, פריימים שנמסרו והשהיית תצוגה, 5 שניות להרצה. איך אנחנו מודדים.
| מנגנון | FPS | ציורים ריקים | צוירו / נפלטו | השהיה p50 |
|---|---|---|---|---|
| הוספה לסוף (בגרסה הנוכחית) | 15 | 1.0% | 74 / 75 | 10.4ms |
| ניקוי בכל פריים | 15 | 70.6% | 70 / 75 | 60.4ms |
| הוספה לסוף, ללא הגבלת קצב | 60 | 0.8% | 67 / 295 | 31.2ms |
| ניקוי בכל פריים | 60 | 81.1% | 45 / 300 | 9.8ms |
תקריות קודמות
מהחדשות לישנות. השעות הן לפי UTC.
אוקטובר 2026
דפים נתקעים מתחת לכותרת העליונה ב-Safari ב-iOS27 באוק׳ – 28 באוק׳ 2026 · נפתרה
- נפתרה
התקרית נפתרה.
- במעקב
נפרס תיקון. עיגון הגלילה כבוי (
overflow-anchor: none). אנחנו ממשיכים במעקב. - הגורם זוהה
הכותרת הראשית עדיין עלולה להיתקע מתחת לכותרת העליונה הדביקה אחרי גלילה למטה וחזרה למעלה. עיגון הגלילה של Safari משנה את מיקום הגלילה.
- במעקב
נפרס תיקון. הרכיבים האלה נגללים כעת רק אופקית, ו-
scrollbar-gutter: stableחל רק במכשירים עם עכבר. - הגורם זוהה
בלשוניות קבצים, בלוקי קוד וטבלאות בטקסט יש גלישה אנכית של 1 px בגלל הקו התחתון של הלשונית הפעילה, ולכן הם נגללים בשני הצירים ו-iOS מעביר אליהם החלקות אנכיות שנועדו לדף. גם
scrollbar-gutter: stableגורם לקפיצה בגלילה הראשונה ב-iOS. - בבדיקה
אנחנו בודקים דיווחים שלפיהם אי אפשר לגלול חזרה לראש הדף בדפי textjs.org ב-Safari ב-iOS.
התקרית הזו השפיעה על: textjs.org.
תחקיר
דפי textjs.org לא זזים בזמן הטעינה, ולכן לעיגון הגלילה לא היה מה לתקן. ב-Safari ב-iOS הוא קיבע את האזור הראשי מתחת לכותרת העליונה הדביקה וחסם את הגלילה חזרה לראש הדף.
?debug=scrollב-textjs.org מציג כעת בזמן אמת אירועי גלילה, מגע ושינוי גודל, ומציין מי ביצע כל קריאה תכנותית למיקוד או לגלילה.תיקונים:
297c5d7,55da525,8424fcd· יומן שינויים: 1.0.0- נפתרה
בדיקות כללי lint נכשלות ב-CI23 באוק׳ 2026 · נפתרה
- נפתרה
הבודק קורא כעת את
it.onlyבאופן עצל, כשבדיקה קוראת ל-RuleTester.itOnly. הבדיקות ב-CI עוברות. - הגורם זוהה
Bun זורק שגיאה כשקוראים את
it.onlyבזמן שמשתנה הסביבהCIמוגדר. בודק הכללים מבצע את ההשמהRuleTester.itOnly = it.onlyבזמן הייבוא, ולכן הטעינה שלו נכשלת. - בבדיקה
חבילת הבדיקות של
eslint-plugin-textjsנכשלת ב-CI לפני שבדיקת כלל כלשהי רצה. ההרצות המקומיות עוברות.
תחקיר
@typescript-eslint/rule-testerמקבל את פונקציות הבדיקה שלו כמאפיינים סטטיים שלRuleTester. התיקון עוטף אתit.onlyבפונקציה. שום חבילה או דף לא הושפעו.תיקון:
eca3f78- נפתרה
תזוזת layout ב-/playground וב-/opencode21 באוק׳ – 22 באוק׳ 2026 · נפתרה
- נפתרה
שינוי הפריסה המצטבר הוא 0 בכל נתיב.
- במעקב
נפרס תיקון. שני הדפים חולקים layout אחד למשטח, והגודל נוסף לסוף בלי להזיז את "התאמה למסוף". המעקב נמשך.
- הגורם זוהה
פקד גודל המסוף מוסיף את הגודל שנמדד לסוף התווית שלו אחרי הידרציה (
Fit console · 120×36), מה שמזיז את צומת הטקסט "התאמה למסוף". גם גובה השורות העליונה והתחתונה של המשטח שונה בין שני הדפים, ולכן המשטח מתמרכז מחדש בעת הניווט. - בבדיקה
בדיקת תזוזות ה-layout שלנו מדווחת על תזוזת layout מצטברת של 0.0001 ב-/playground וב-/opencode. בכל נתיב אחר שהיא בודקת נמדד 0. גם משטח המיקוד זז במעבר בין שני הדפים.
התקרית הזו השפיעה על: textjs.org.
תחקיר
למשטח יש כעת אזורים עליונים ותחתונים בגובה קבוע, וכל הדגמה שומרת את אותן שורות, כך שמעבר בין דפים או הדגמות לא מזיז דבר. חלונית החיבור של OpenCode מציגה שורת מצב אחת בכל מצב, עם שלד עד להשלמת ההידרציה.
apps/web/scripts/e2e-layout.mjsמוודא שהתיבות זהות בין נתיבים, הדגמות, גדלי אזור תצוגה ומצבי חיבור.תיקון:
8f22b9b· יומן שינויים: 1.0.0- נפתרה
שם החבילה textjs אינו זמין ב-npm14 באוק׳ – 15 באוק׳ 2026 · נפתרה
- נפתרה
התקרית נפתרה.
- במעקב
חבילת הפריימוורק וה-CLI היא כעת
@textjs/next, באותו מרחב שמות כמו@textjs/coreו-@textjs/react. הייבוא משתנה מ-textjsל-@textjs/next. - הגורם זוהה
השם
textjsשייך לחבילת npm אחרת מאז 25 במרץ 2016. - בבדיקה
פרסום חבילת הפריימוורק
textjsב-npm נכשל עם403 Forbidden.
תחקיר
החל מ-Text.js 1.0, אפליקציות מייבאות מ-
@textjs/nextבמקום מ-textjs, והגשר של OpenCode הואbunx @textjs/app proxy, שפועל מכל ספרייה.- נפתרה
ספטמבר 2026
שכבות ציור ריקות במעברי שורה15 בספט׳ – 16 בספט׳ 2026 · נפתרה
- נפתרה
התקרית נפתרה.
- במעקב
נפרס תיקון. מעברי שורה שלא ממשיכים רצף מאפסים כעת תחילה את
%cלסגנון ריק, כך ש-DevTools מפיק מעבר שורה רגיל. כל פריים נושא וילון אחד. - הגורם זוהה
כשרצף מעוצב מסתיים במעבר שורה, ה-
\nנכתב בתוך ה-span של ה-%cשל הרצף. DevTools מפצל את ה-span במעבר השורה, והשארית הריקה הופכת ל-span עםdisplay: inline-blockו-contain: paint, שמקבל שכבת ציור משלו. - בבדיקה
אנחנו בודקים רכיבי
<span>ריקים ברוב מעברי השורה בפריימים ב-DevTools, ו-span וילון כפול בחלק מהפריימים.
התקרית הזו השפיעה על: Turbolog encoder.
תחקיר
רכיבי span בעלי אותו סגנון עדיין מתמזגים מעבר למעברי שורה. הווילון עבר גם לשורה משלו: DevTools מציף את קישור המקור (
VM12:1) מימין לשורה הראשונה של הודעה, ווילון בתוך השורה השאיר את הקישור לצד שורה 0 וצמצם את רוחבה.- נפתרה
אוגוסט 2026
השהיית תצוגה מוגברת אחרי console.clear27 באוג׳ – 31 באוג׳ 2026 · נפתרה
- נפתרה
השהיית התצוגה החציונית ב-
bench/devtoolsהיא 10.4 ms. התיקון נכלל ב-Text.js 1.0. - במעקב
נפרס תיקון. אחרי כל פריים שמנקה את המסוף, מנגנון הרינדור ממתין פעם אחת 110 ms, כך שפריימים מאוחרים יותר מגיעים יותר מ-50 ms אחרי הרענון הקודם של DevTools ועוברים במסלול המיידי שלו.
- הגורם זוהה
אחרי ניקוי, DevTools מוסיף שורת "המסוף נוקה". היא תופסת את המשבצת המיידית של מנגנון הגבלת הקצב ודוחפת את הפריים הבא לטיימר של 50 ms. כשהפריימים מרוחקים 66 ms זה מזה, כל פריים מאוחר יותר נשאר על אותו טיימר.
- בבדיקה
bench/devtoolsמדווח על השהיית תצוגה חציונית של 63 ms לאחר ניקוי המסוף. ההשהיה נשארת ברמה זו בכל פריים מאוחר יותר.
התקרית הזו השפיעה על: DevTools Throttler, console.clear.
תחקיר
קלט בדיד עדיין מתרנדר באופן סינכרוני כשהמרווח בין הפריימים מאפשר זאת.
- נפתרה
מחוון טעינה משבש יישור שורות במסוף של DevTools11 באוג׳ – 12 באוג׳ 2026 · נפתרה
- נפתרה
התקרית נפתרה. התיקון נכלל ב-Text.js 1.0.
- במעקב
נפרס תיקון. מחוון הטעינה
dotsהמוגדר כברירת מחדל מצייר כעת בלוקים של רבעי תא (▘ ▝ ▗ ▖), כל אחד ברוחב תא אחד ב-Menlo. פריימי הברייל זמינים לטרמינלים באמצעותvariant="braille". - הגורם זוהה
מחוון הטעינה המוגדר כברירת מחדל מצייר דפוסי ברייל (U+2800 עד U+28FF). Text.js מודד כל אחד מהם כתא אחד, אבל Menlo, גופן המסוף של DevTools ב-macOS, אינו כולל גליפים של ברייל. הגליף החלופי רחב מתא ודוחף את שאר השורה ימינה.
- בבדיקה
ב-macOS, שורות שמכילות
<Spinner>אינן מיושרות ב-DevTools. תאים מימין למחוון הטעינה חורגים מהרשת.
התקרית הזו השפיעה על: console.log.
תחקיר
LineChartמצייר נקודות ברבעי תא כברירת מחדל מאותה סיבה. ברייל זמין באמצעותmarker="braille".- נפתרה
מאי 2026
עלייה בציורים ריקים במסוף של DevTools5 במאי – 19 במאי 2026 · נפתרה
- נפתרה
התיקון יצא ב-Text.js 0.4.0. שיעור הציורים הריקים הוא 1.0%, כולם בפריים הראשון.
- במעקב
textjs.org מוסיף כעת פריימים לסוף במקום לנקות. span וילון ברוחב אפס מסתיר פריימים קודמים, והמרווח בין פריימים הוא לפחות 66 ms.
- הגורם זוהה
DevTools מחיל את
console.clear()באופן סינכרוני, אבל מצייר הודעות חדשות בהגבלת קצב של 50 ms. כל פריים מסיר את קודמו מיד ומצויר עד 50 ms מאוחר יותר. ב-bench/devtools, לוח בקרה בגודל 100×32 היה ריק ב-70.6% מהציורים של DevTools ב-15 fps וב-81.1% ב-60 fps. - בבדיקה
אנחנו בודקים דיווחים על הבהובים שבהם המסוף של DevTools ריק בין פריימים תחת עומס.
התקרית הזו השפיעה על: console.clear, DevTools Throttler.
תחקיר
מאז 0.1.0, Turbolog שלח קריאת
console.clear()אחת וקריאתconsole.log()אחת לכל פריים שהשתנה.bench/devtools, שמפעיל את הממשק האמיתי של DevTools ב-Chrome for Testing, נבנה כדי למדוד את התקרית הזו והפיק את המספרים בטבלת הממשק של DevTools שלמעלה.תיקון:
f007ade· Turbolog: ביטול ההבהוב · יומן שינויים: 0.4.0- נפתרה
אפריל 2026
נתיבי קבצים בפריימים של המסוף מקבלים עיצוב של קישורים14 באפר׳ – 15 באפר׳ 2026 · נפתרה
- נפתרה
התקרית נפתרה.
- במעקב
נפרס תיקון. המקודד מוסיף word joiner (U+2060) לטקסט מסוג
path:line,//host:portו-data:, אלא אם התא מאפשר קישורים. - הגורם זוהה
DevTools הופך כתובות URL וטקסט מסוג
path:lineו-//host:portבהודעות מסוף לקישורים, וכופה עליהם את צבעי ערכת הנושא שלו. המקודד כבר פיצל את://ואתwww., אבלpath:lineו-//host:portאחרי סכמת כתובת עדיין תואמים לתבנית. - בבדיקה
טקסט כמו
src/app.tsx:12ו-http://localhost:3000מתרנדר בצבע הקישורים של DevTools במקום בסגנון ה-%cשלו.
התקרית הזו השפיעה על: Turbolog encoder.
תחקיר
://ו-www.מכילים word joiner מאז 0.1.0. תאים שאמורים להישאר לחיצים מגדירים את המאפיין allow-link ונכתבים ללא שינוי.- נפתרה
נובמבר 2025
הקשות מושהות באפליקציות מסוף4 בנוב׳ – 18 בנוב׳ 2025 · נפתרה
- נפתרה
התיקון זמין ב-Text.js 0.3.0.
- במעקב
נפרס תיקון. קלט בדיד, כמו הקשה על מקש או הדבקה, מתרנדר כעת באופן סינכרוני באותה משימה. עדכונים אחרים עדיין מוחלים ב-
requestAnimationFrame. - הגורם זוהה
כל עדכון, כולל הקשה על מקש, ממתין ל-
requestAnimationFrameהבא לפני ש-React מחיל את השינויים והפריים נרשם ביומן. - בבדיקה
ההקלדה באפליקציות מסוף מפגרת אחרי המקלדת, בעיקר ב-OpenCode ב-textjs.org.
התקרית הזו השפיעה על: textjs.org.
תחקיר
לחיצות מקשים כבר לא ממתינות לפריים האנימציה הבא. עדכונים שאינם מגיעים מקלט, כמו טיימרים ונתונים זורמים, עדיין מקובצים לפי פריים אנימציה.
תיקון:
8c2d1b1· יומן שינויים: 0.3.0- נפתרה