Benos
مباشرBenos إطار عمل واجهات أمامية دقيق التفاعل منشور على npm في عشر حزم: نواة تفاعلية (إشارات وقيم محسوبة وتأثيرات وملكية)، ومحرّك عرض DOM مع وقت تشغيل للمكوّنات، ومترجم TypeScript/JSX مع إضافة Vite، وموجّه مسارات مُنمَّط تُستنتج معاملاته من نص المسار، وموارد غير متزامنة مملوكة مع Suspense والانتقالات، ومكوّنات واجهة أساسية يسهل الوصول إليها مبنية على Zag.js، وسجل مكوّنات مملوكة المصدر مع أداة سطر أوامر خاصة به، وإضافة ESLint، وقالب بدء create-benos. تعمل المكوّنات مرة واحدة، ويحدّث تغيير الإشارة الروابط التي تقرأها فقط.

لماذا يتميّز
المكوّنات تعمل مرة واحدة
المكوّن دالة عادية تُنفَّذ مرة واحدة فقط. وعند تغيّر إشارة تُحدَّث روابط DOM التي تقرأها تحديداً: لا إعادة عرض ولا مقارنة Virtual DOM.
الملكية افتراضياً
التأثيرات والمستمعون والمراجع وعمليات التنظيف تنتمي إلى المالك الذي أنشأها وتُزال معه، فيصبح التفكيك حتمياً لا مجرد انضباط.
TypeScript هي مدخل التصميم
تُستنتج معاملات المسار من نص المسار، وتمر معاملات البحث عبر مرمّزات مُنمَّطة، وتغطي أنواع HTML وSVG المولَّدة كتابة TSX. والمعامل الخاطئ أو الناقص خطأ ترجمة.
صغير ومُقاس
حجم النواة نحو 4.3 كيلوبايت، والنواة مع DOM نحو 11 كيلوبايت. تعمل ميزانيات الحجم وحارس أداء مقابل Preact Signals وAlien Signals وSolid في التكامل المستمر عند كل تغيير.
عمليات غير متزامنة تلغي نفسها
تأخذ الموارد مصدراً متتبَّعاً ودالة جلب قابلة للإلغاء، وتحتفظ بالقيم القديمة أثناء إعادة التحميل، وتتجاهل الاستجابات المتجاوَزة. ويكشف Suspense المحتوى دفعة واحدة ويؤجل التأثيرات حتى الظهور.
واجهة يسهل الوصول إليها وتملكها أنت
19 مكوّناً مبنية على آلات حالة Zag.js مع سلوك لوحة المفاتيح والتركيز ودعم RTL. تنسخ أداة سطر الأوامر مصدراً قابلاً للتعديل إلى مشروعك بدل إخفائه في اعتمادية.
ابدأ الآن
01أنشئ تطبيقاً. يعمل القالب مع npm وpnpm وYarn وBun ويأتي مع TypeScript وVite وVitest وESLint وPrettier.
npm create benos@latest my-app02ثبّت الاعتماديات وشغّل خادم التطوير.
cd my-app && npm install && npm run dev03أو أضف Benos إلى مشروع Vite قائم. يجب أن تعمل إضافة Vite قبل أي تحويل JSX آخر.
npm install @benosjs/core @benosjs/dom @benosjs/compiler @benosjs/vite04اختيارياً أضف نظام الواجهة: هيّئ الرموز ثم انسخ المكوّنات التي تحتاجها.
npx benos init && npx benos add button input dialog
مثال
مكوّن أول. تعمل الدالة مرة واحدة، ويتحدّث رابط العدّاد في مكانه، ويتولى <Show> و<For> العرض الشرطي والعرض المفتاحي.
import { signal } from '@benosjs/core'
import { For, Show, render } from '@benosjs/dom'
const count = signal(0)
const items = signal(['one', 'two'])
function App() {
return (
<main>
<button onClick={() => count.update((value) => value + 1)}>
Count: {count()}
</button>
<Show when={count() > 0} fallback={<p>Start counting</p>}>
<p>There is a count.</p>
</Show>
<For each={items()} by={(item) => item}>
{(item) => <span>{item()}</span>}
</For>
</main>
)
}
render(() => <App />, document.querySelector('#app') as HTMLElement)ما الذي تتضمنه الحزم
@benosjs/coreالإشارات والقيم المحسوبة والتأثيرات والملكية.@benosjs/domمحرّك عرض DOM دقيق التفاعل ووقت تشغيل المكوّنات.@benosjs/compilerمترجم TypeScript وJSX.@benosjs/viteتكامل Vite مع المترجم.@benosjs/routerمسارات مُنمَّطة ومحمّلات وتنقل.@benosjs/asyncموارد مملوكة وSuspense وانتقالات.@benosjs/primitivesمكيّفات آلات Zag.js سهلة الوصول.benosمكوّنات واجهة مملوكة المصدر وسجل وأداة سطر أوامر.@benosjs/eslint-pluginقواعد لاصطلاحات المكوّنات والخصائص.create-benosينشئ تطبيق Benos جديداً بـ TypeScript.
اعرف المزيد
- المشكلة
- أطر الـ Virtual DOM تعيد تشغيل المكوّنات وتقارن الأشجار عند كل تغيير، ومعظم البدائل دقيقة التفاعل تترك أعمار العناصر ضمنية: فالتأثيرات والمستمعون والمراجع تعيش بعد الواجهة التي أنشأتها ما لم يتذكر المطوّر تنظيفها. أردتُ إطاراً تكون فيه TypeScript مدخل التصميم لا طبقة فوقه، ويكون فيه خطأ معامل المسار خطأ ترجمة، ويكون لكل عنصر تفاعلي مالك يتولى التخلص منه.
- الحل
- صمّمتُ النواة قبل كتابتها: لكل من التفاعلية والجدولة والملكية وثيقة معمارية، ويُلزَم التنفيذ بها في التكامل المستمر. بنيتُ المترجم وإضافة Vite ليُترجَم TSX العادي إلى روابط DOM مباشرة، ثم أضفتُ الموجّه (مسارات مُنمَّطة وتخطيطات متداخلة ومحمّلات وحالة تنقل معلّق وإدارة التركيز والتمرير) والطبقة غير المتزامنة (الموارد وSuspense والانتقالات) فوق نقاط تهيئة في النواة. ويتبع نظام الواجهة نموذج الملكية نفسه: آلات Zag.js مكيّفة مع Benos، وسجل من 19 مكوّناً مملوك المصدر، وأداة سطر أوامر للتهيئة والإضافة والمقارنة والتحديث.
- التحديات
- كان الأصعب هو الأداء دون التخلي عن الضمانات. يشغّل حارس في التكامل المستمر النواة الإنتاجية مقابل Preact Signals وAlien Signals وSolid ويفشل إذا تجاوز Benos ضعف Preact في أي حمل عمل، فكان على كل رابط اعتمادية واعٍ بالملكية وكل طبقة تأثيرات أن تستحق كلفتها؛ تبقى النواة تحت ميزانية 4.6 كيلوبايت، والنواة مع DOM تحت 11.3 كيلوبايت. كما كشفت عمليات الالتزام المرحلية لـ Suspense والموجّه أخطاء دقيقة حيث كانت التحديثات اللاحقة تهبط في جزء منفصل.
- النتيجة
- عشر حزم منشورة بالإصدار 0.4.0، مع قالب بدء يعمل عبر npm وpnpm وYarn وBun. النواة ضمن ضعف Preact في كل اختبار أداء وأسرع من Alien Signals في القراءات والكتابات المتساوية. تغطي الوحدات المنشورة التفاعلية والعرض والترجمة والتوجيه والعمليات غير المتزامنة ومكوّنات الواجهة الأساسية والسمات بأوضاع فاتحة وداكنة ودعم RTL والأدوات؛ أما العرض من جهة الخادم والبث فمصمّمان وهما التاليان على خارطة الطريق.