وضعیت

همه سامانه‌ها فعال‌اندبه‌روزرسانی در 31 اکتبر 2026
console.logفعال
90 روز پیشیک فراخوانی برای هر فریم تغییریافته، بدون فراخوانی در حالت بیکار.امروز
console.clearبه‌ندرت استفاده می‌شود
90 روز پیشفریم اول، پس از invalidate()، در حالت بیکار پس از انباشته شدن 100 فریم، و در 300 فریم.امروز
Yogaفعال
90 روز پیشچیدمان flexbox با WebAssembly، با pointScaleFactor برابر 1.امروز
Turbolog encoderفعال
90 روز پیشفیلتر هش ردیف و کدگذاری طول اجرا با ⁦%c⁩.امروز
DevTools Throttlerرعایت می‌شود
90 روز پیشمحدودسازی نمای دید به 50 ms. فریم‌ها با فاصلهٔ حداقل 66 ms زمان‌بندی می‌شوند.امروز
textjs.orgفعال
90 روز پیشمستندات، آموزش، Playground، وبلاگ و فروشگاه.امروز

بنچمارک زنده

خط پردازش ⁦@textjs/core⁩ در این زبانه روی داشبوردی با ابعاد ⁦100×32⁩ اجرا می‌شود و فریم‌ها را در کنسولی درون حافظه می‌نویسد.

فریم کامل
—
چیدمان + ترسیم + کدگذاری
تایپ
—
ویرایش یک ردیف
فریم بیکار
—
چیزی تغییر نکرده است
⁦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 · 7c91cea0.194ms0.065ms0.043ms205
0.2.0ژوئیه 2025 · textjs.org · 92437cc0.192ms0.067ms0.042ms205
0.3.0نوامبر 2025 · 10× input · 8c2d1b10.205ms0.065ms0.043ms146
0.3.0نوامبر 2025 · Mobile pass · e2e6e460.212ms0.067ms0.045ms146
0.4.0مه 2026 · Zero-flash frames · f007ade0.184ms0.046ms0.028ms146
1.0.0اکتبر 2026 · Text.js 1.0 · 57968b60.163ms0.011ms0.000ms149

فرانت‌اند DevTools

⁦bench/devtools⁩ در ⁦Chrome for Testing⁩: ترسیم‌های خالی، فریم‌های تحویل‌شده و تأخیر نمایش، 5 ثانیه در هر اجرا. روش اندازه‌گیری ما.

درایورFPSترسیم‌های خالیترسیم‌شده / ارسال‌شدهتأخیر ⁦p50⁩
افزودن به انتها (نسخه عرضه‌شده)151.0%74 / 7510.4ms
پاک‌سازی در هر فریم1570.6%70 / 7560.4ms
افزودن به انتها، بدون تنظیم آهنگ600.8%67 / 29531.2ms
پاک‌سازی در هر فریم6081.1%45 / 3009.8ms

رخدادهای گذشته

جدیدترین در ابتدا. زمان‌ها برحسب UTC هستند.

اکتبر 2026

  • گیر کردن صفحات زیر سربرگ در Safari روی iOS27 اکتبر – 28 اکتبر 2026 · رفع‌شده
    1. رفع‌شده

      این رخداد برطرف شده است.

    2. در حال پایش

      اصلاحی مستقر شده است. لنگرگذاری پیمایش غیرفعال است (overflow-anchor: none). در حال پایش هستیم.

    3. شناسایی‌شده

      پس از پیمایش به پایین و بازگشت به بالا، عنوان اصلی همچنان ممکن است زیر سربرگ چسبان گیر کند. لنگرگذاری پیمایش Safari موقعیت پیمایش را تنظیم می‌کند.

    4. در حال پایش

      اصلاحی مستقر شده است. این عناصر اکنون فقط به‌صورت افقی پیمایش می‌شوند و scrollbar-gutter: stable فقط در دستگاه‌های دارای ماوس اعمال می‌شود.

    5. شناسایی‌شده

      زبانه‌های فایل، بلوک‌های کد و جدول‌های متن به‌دلیل خط زیر زبانهٔ فعال، ⁦1px⁩ سرریز عمودی دارند؛ بنابراین در هر دو محور پیمایش می‌شوند و iOS حرکت‌های عمودی انگشت برای پیمایش صفحه را به آن‌ها می‌دهد. ویژگی scrollbar-gutter: stable نیز باعث پرش در اولین پیمایش در iOS می‌شود.

    6. در حال بررسی

      در حال بررسی گزارش‌هایی هستیم که می‌گویند در ⁦iOS Safari⁩ نمی‌توان صفحات textjs.org را با پیمایش به بالا برگرداند.

    این رخداد بر این کامپوننت‌ها تأثیر گذاشت: textjs.org.

    تحلیل پس از رخداد

    صفحات textjs.org هنگام بارگذاری جابه‌جا نمی‌شوند، پس لنگرگذاری پیمایش چیزی برای اصلاح نداشت. در ⁦iOS Safari⁩، این قابلیت بخش اصلی را زیر سربرگ چسبان گیر می‌انداخت و مانع بازگشت به بالای صفحه با پیمایش می‌شد. اکنون ?debug=scroll در textjs.org رویدادهای پیمایش، لمس و تغییر اندازه را زنده نمایش می‌دهد و فراخوانندهٔ هر فراخوانی برنامه‌ای فوکوس یا پیمایش را مشخص می‌کند.

    اصلاحات: 297c5d7, 55da525, 8424fcd · گزارش تغییرات: 1.0.0

  • شکست آزمون‌های قواعد لینت در CI23 اکتبر 2026 · رفع‌شده
    1. رفع‌شده

      آزمون‌گر اکنون it.only را با تأخیر، زمانی که آزمونی RuleTester.itOnly را فراخوانی می‌کند، می‌خواند. CI با موفقیت اجرا می‌شود.

    2. شناسایی‌شده

      وقتی متغیر محیطی CI تنظیم شده باشد، Bun هنگام خواندن it.only خطا می‌دهد. آزمون‌گر قواعد هنگام وارد کردن، مقدار RuleTester.itOnly = it.only را تخصیص می‌دهد، بنابراین بارگذاری آن شکست می‌خورد.

    3. در حال بررسی

      مجموعه‌آزمون eslint-plugin-textjs در CI پیش از اجرای هر آزمون قاعده‌ای شکست می‌خورد. اجراهای محلی موفق‌اند.

    تحلیل پس از رخداد

    @typescript-eslint/rule-tester توابع آزمون خود را به‌صورت ویژگی‌های ایستای RuleTester دریافت می‌کند. اصلاحیه، it.only را در یک تابع می‌پیچد. هیچ بسته یا صفحه‌ای تحت تأثیر قرار نگرفت.

    اصلاح: eca3f78

  • جابه‌جایی چیدمان در ⁦/playground⁩ و ⁦/opencode⁩21 اکتبر – 22 اکتبر 2026 · رفع‌شده
    1. رفع‌شده

      جابه‌جایی تجمعی چیدمان در همهٔ مسیرها 0 است.

    2. در حال پایش

      اصلاحی مستقر شده است. هر دو صفحه از یک چیدمان پد استفاده می‌کنند و اندازه بدون جابه‌جایی «متناسب با کنسول» به انتها افزوده می‌شود. در حال پایش هستیم.

    3. شناسایی‌شده

      کنترل اندازهٔ کنسول پس از هیدراسیون، اندازهٔ اندازه‌گیری‌شده را به انتهای برچسب خود اضافه می‌کند (Fit console · 120×36)، که گره متنی «تنظیم با کنسول» را جابه‌جا می‌کند. ارتفاع ردیف‌های بالا و پایین پد نیز بین دو صفحه متفاوت است، پس پد هنگام ناوبری دوباره در مرکز قرار می‌گیرد.

    4. در حال بررسی

      ممیزی جابه‌جایی چیدمان ما، جابه‌جایی تجمعی چیدمان 0.0001 را در ⁦/playground⁩ و ⁦/opencode⁩ گزارش می‌کند. مقدار گزارش‌شده برای تمام مسیرهای دیگر تحت پوشش آن 0 است. پد فوکوس نیز هنگام جابه‌جایی بین این دو صفحه حرکت می‌کند.

    این رخداد بر این کامپوننت‌ها تأثیر گذاشت: textjs.org.

    تحلیل پس از رخداد

    پد اکنون جایگاه‌هایی با ارتفاع ثابت در بالا و پایین دارد و هر دمو ردیف‌های یکسانی را رزرو می‌کند، بنابراین تغییر صفحه یا دمو چیزی را جابه‌جا نمی‌کند. پنل اتصال OpenCode در همهٔ حالت‌ها یک خط وضعیت نشان می‌دهد و تا زمان هیدراته شدن، اسکلت نمایش می‌دهد. اسکریپت apps/web/scripts/e2e-layout.mjs یکسان بودن کادرها را در مسیرها، دموها، اندازه‌های ناحیهٔ دید و حالت‌های اتصال بررسی می‌کند.

    اصلاح: 8f22b9b · گزارش تغییرات: 1.0.0

  • خروج نوار کناری مستندات از دید در انتهای صفحات بلند16 اکتبر – 17 اکتبر 2026 · رفع‌شده
    1. رفع‌شده

      این رخداد برطرف شده است.

    2. در حال پایش

      اصلاحی مستقر شده است. فصل‌های آموزش هم پابرگ را درون ستون محتوا رندر می‌کنند. در حال پایش هستیم.

    3. شناسایی‌شده

      نوار کناری فصل‌ها در بخش آموزش همین مشکل را دارد.

    4. در حال پایش

      اصلاحی مستقر شده است. صفحات مستندات پابرگ را درون ستون محتوا رندر می‌کنند تا چیدمان تا پایین صفحه امتداد داشته باشد.

    5. شناسایی‌شده

      نوار کناری در چیدمان مستندات دارای position: sticky است و پابرگ سایت پس از آن چیدمان رندر می‌شود. عنصر چسبان فقط تا زمانی ثابت می‌ماند که بلوک دربرگیرندهٔ آن روی صفحه باشد، پس وقتی پابرگ با پیمایش وارد دید می‌شود، نوار کناری را هم با خود می‌برد.

    6. در حال بررسی

      در حال بررسی گزارش‌هایی هستیم که می‌گویند نوار کناری مستندات در پایین صفحات طولانی با پیمایش از دید خارج می‌شود.

    این رخداد بر این کامپوننت‌ها تأثیر گذاشت: textjs.org.

    تحلیل پس از رخداد

    صفحات دارای نوار کناری چسبان (مستندات و فصل‌های آموزش) پابرگ را در ستون محتوای خود رندر می‌کنند. صفحات دیگر پابرگ مشترک را نگه می‌دارند.

    اصلاح: 131ac96 · گزارش تغییرات: 1.0.0

  • نام بستهٔ textjs در npm در دسترس نیست14 اکتبر – 15 اکتبر 2026 · رفع‌شده
    1. رفع‌شده

      این رخداد برطرف شده است.

    2. در حال پایش

      بستهٔ فریم‌ورک و CLI اکنون @textjs/next است و در همان محدودهٔ @textjs/core و @textjs/react قرار دارد. واردکردن‌ها از textjs به @textjs/next تغییر می‌کنند.

    3. شناسایی‌شده

      نام textjs از 25 مارس 2016 متعلق به بستهٔ دیگری در npm بوده است.

    4. در حال بررسی

      انتشار بستهٔ فریم‌ورک textjs در npm با خطای 403 Forbidden شکست می‌خورد.

    تحلیل پس از رخداد

    از ⁦Text.js 1.0⁩، برنامه‌ها به‌جای textjs از @textjs/next وارد می‌کنند و پل OpenCode دستور bunx @textjs/app proxy است که از هر دایرکتوری اجرا می‌شود.

    ⁦Text.js 1.0⁩: یک تغییر نام · گزارش تغییرات: 1.0.0

سپتامبر 2026

  • لایه‌های رسم خالی در شکست ردیف‌ها15 سپتامبر – 16 سپتامبر 2026 · رفع‌شده
    1. رفع‌شده

      این رخداد برطرف شده است.

    2. در حال پایش

      اصلاحی مستقر شده است. شکست ردیف‌هایی که دنباله‌ای را ادامه نمی‌دهند اکنون ابتدا %c را به سبکی خالی بازنشانی می‌کنند تا DevTools یک خط جدید ساده تولید کند. هر فریم یک پرده دارد.

    3. شناسایی‌شده

      وقتی یک دنبالهٔ دارای سبک در شکست ردیف پایان می‌یابد، \n درون span مربوط به %c آن دنباله نوشته می‌شود. DevTools در شکست خط، span را تقسیم می‌کند و بخش خالی باقی‌مانده به یک span با display: inline-block و contain: paint تبدیل می‌شود که لایهٔ رسم خودش را می‌گیرد.

    4. در حال بررسی

      در حال بررسی عناصر خالی <span> در بیشتر شکست ردیف‌های فریم‌های DevTools و دو برابر شدن span پرده در برخی فریم‌ها هستیم.

    این رخداد بر این کامپوننت‌ها تأثیر گذاشت: Turbolog encoder.

    تحلیل پس از رخداد

    ⁦span⁩هایی با سبک یکسان همچنان در دو سوی شکست ردیف‌ها ادغام می‌شوند. پرده نیز به خطی جدا منتقل شد: DevTools پیوند منبع (VM12:1) را در سمت راست خط اول پیام شناور می‌کند و پردهٔ درون‌خطی آن پیوند را کنار ردیف 0 باقی می‌گذاشت و عرض ردیف را کم می‌کرد.

    گزارش تغییرات: 1.0.0

اوت 2026

  • افزایش تأخیر نمایش پس از console.clear27 اوت – 31 اوت 2026 · رفع‌شده
    1. رفع‌شده

      میانهٔ تأخیر نمایش در bench/devtools برابر با 10.4 ms است. این اصلاح در ⁦Text.js 1.0⁩ عرضه می‌شود.

    2. در حال پایش

      اصلاحی مستقر شده است. پس از هر فریمی که پاک‌سازی می‌کند، رندرکننده یک بار 110 ms صبر می‌کند تا فریم‌های بعدی بیش از 50 ms پس از تازه‌سازی قبلی DevTools برسند و مسیر فوری آن را طی کنند.

    3. شناسایی‌شده

      پس از پاک‌سازی، DevTools ردیف «کنسول پاک شد» را درج می‌کند. این ردیف جایگاه فوری محدودکننده را می‌گیرد و فریم بعدی را به زمان‌سنج 50 ms می‌فرستد. با فاصلهٔ 66 ms میان فریم‌ها، همهٔ فریم‌های بعدی روی همان زمان‌سنج می‌مانند.

    4. در حال بررسی

      پس از پاک شدن کنسول، bench/devtools میانهٔ تأخیر نمایش را 63 ms گزارش می‌کند. تأخیر برای همهٔ فریم‌های بعدی در همین سطح می‌ماند.

    این رخداد بر این کامپوننت‌ها تأثیر گذاشت: DevTools Throttler, console.clear.

    تحلیل پس از رخداد

    ورودی گسسته همچنان در صورت اجازه دادن فاصلهٔ فریم‌ها، به‌صورت همگام رندر می‌شود.

    شکستن قفل فاز · گزارش تغییرات: 1.0.0

  • برهم‌خوردن تراز ردیف‌ها با نشانگر چرخان در کنسول DevTools11 اوت – 12 اوت 2026 · رفع‌شده
    1. رفع‌شده

      این رخداد برطرف شده است. این اصلاح در ⁦Text.js 1.0⁩ عرضه می‌شود.

    2. در حال پایش

      اصلاحی مستقر شده است. نشانگر چرخان پیش‌فرض dots اکنون بلوک‌های ربعی (▘ ▝ ▗ ▖) رسم می‌کند که هر کدام در Menlo یک سلول هستند. فریم‌های بریل با variant="braille" برای ترمینال‌ها در دسترس‌اند.

    3. شناسایی‌شده

      نشانگر چرخان پیش‌فرض الگوهای بریل (⁦U+2800⁩ تا ⁦U+28FF⁩) را رسم می‌کند. Text.js هر کدام را یک سلول اندازه می‌گیرد، اما Menlo، قلم کنسول DevTools در macOS، نویسه‌های بریل ندارد. نویسهٔ جایگزین از یک سلول عریض‌تر است و بقیهٔ ردیف را به راست می‌راند.

    4. در حال بررسی

      در macOS، ردیف‌های دارای <Spinner> در DevTools تراز نیستند. سلول‌های سمت راست نشانگر چرخان خارج از شبکه قرار می‌گیرند.

    این رخداد بر این کامپوننت‌ها تأثیر گذاشت: console.log.

    تحلیل پس از رخداد

    کامپوننت LineChart به همین دلیل به‌طور پیش‌فرض نقطه‌های ربعی رسم می‌کند. بریل با marker="braille" در دسترس است.

    گزارش تغییرات: 1.0.0

مهٔ 2026

  • افزایش رسم‌های خالی در کنسول DevTools5 مه – 19 مه 2026 · رفع‌شده
    1. رفع‌شده

      این اصلاح در ⁦Text.js 0.4.0⁩ منتشر شده است. رسم‌های خالی به ⁦1.0%⁩ رسیده‌اند که همگی در فریم اول رخ می‌دهند.

    2. در حال پایش

      ⁦textjs.org⁩ اکنون فریم‌ها را به‌جای پاک‌سازی به انتها می‌افزاید. یک span پرده با عرض صفر فریم‌های قبلی را از دید خارج نگه می‌دارد و فریم‌ها با فاصلهٔ دست‌کم 66 ms اجرا می‌شوند.

    3. شناسایی‌شده

      ⁦DevTools⁩ دستور console.clear() را همگام اعمال می‌کند، اما پیام‌های جدید را با محدودیت زمانی 50 ms رسم می‌کند. هر فریم بلافاصله فریم قبلی را حذف می‌کند و تا 50 ms بعد رسم می‌شود. در bench/devtools، داشبوردی با ابعاد ⁦100×32⁩ در ⁦70.6%⁩ از رسم‌های DevTools با نرخ 15 fps و ⁦81.1%⁩ با نرخ 60 fps خالی بود.

    4. در حال بررسی

      در حال بررسی گزارش‌هایی از خالی شدن لحظه‌ای کنسول 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 · رفع‌شده
    1. رفع‌شده

      این رخداد برطرف شده است.

    2. در حال پایش

      اصلاحی مستقر شده است. رمزگذار یک ⁦word joiner⁩ ‏(⁦U+2060⁩) در متن path:line، //host:port و data: درج می‌کند، مگر اینکه سلول اجازهٔ پیوند بدهد.

    3. شناسایی‌شده

      ⁦DevTools⁩ نشانی‌های اینترنتی، متن path:line و //host:port را در پیام‌های کنسول به پیوند تبدیل می‌کند و رنگ‌های پوستهٔ خود را به آن‌ها تحمیل می‌کند. رمزگذار از قبل :// و www. را جدا می‌کرد، اما path:line و //host:port پس از طرح نشانی همچنان مطابقت دارند.

    4. در حال بررسی

      متن‌هایی مانند src/app.tsx:12 و http://localhost:3000 به‌جای سبک %c خود با رنگ پیوند DevTools رندر می‌شوند.

    این رخداد بر این کامپوننت‌ها تأثیر گذاشت: Turbolog encoder.

    تحلیل پس از رخداد

    متن‌های :// و www. از نسخهٔ 0.1.0 دارای ⁦word joiner⁩ بوده‌اند. سلول‌هایی که باید قابل کلیک بمانند ویژگی ⁦allow-link⁩ را تنظیم می‌کنند و بدون تغییر نوشته می‌شوند.

    گزارش تغییرات: 0.4.0

نوامبر 2025

  • تأخیر کلیدهای فشرده‌شده در برنامه‌های کنسول4 نوامبر – 18 نوامبر 2025 · رفع‌شده
    1. رفع‌شده

      این اصلاح در ⁦Text.js 0.3.0⁩ منتشر شده است.

    2. در حال پایش

      اصلاحی مستقر شده است. ورودی گسسته، مانند فشردن کلید یا جای‌گذاری، اکنون به‌صورت همگام در همان وظیفه رندر می‌شود. سایر به‌روزرسانی‌ها همچنان در requestAnimationFrame ثبت می‌شوند.

    3. شناسایی‌شده

      هر به‌روزرسانی، از جمله فشردن کلید، تا requestAnimationFrame بعدی منتظر می‌ماند تا React تغییرات را ثبت کند و فریم در گزارش نوشته شود.

    4. در حال بررسی

      تایپ در برنامه‌های کنسول از صفحه‌کلید عقب می‌ماند؛ این مشکل در OpenCode روی textjs.org بیشتر دیده می‌شود.

    این رخداد بر این کامپوننت‌ها تأثیر گذاشت: textjs.org.

    تحلیل پس از رخداد

    فشردن کلیدها دیگر منتظر فریم بعدی انیمیشن نمی‌ماند. کامیت‌هایی که از ورودی نمی‌آیند، مانند تایمرها و داده‌های جریانی، همچنان در هر فریم انیمیشن دسته‌بندی می‌شوند.

    اصلاح: 8c2d1b1 · تغییرات: 0.3.0