alien-signals: سیستم ریاکتیویتی که به هسته Vue 3.6 راه پیدا کرد
خلاصهٔ کاملتر
alien-signals یه کتابخونهی کوچیک جاوااسکریپتیه که روی یه الگوریتم push-pull برای سیگنالهای واکنشپذیر (reactive signals) تمرکز داره. ایدهی پشتش اینه که بدون استفاده از Array/Set/Map و بدون بازگشت تابعی (function recursion) در هستهی الگوریتم، بشه به بهترین performance ممکن رسید. سازندهاش همون کسیه که سیستم ریاکتیویتی Vue رو هم نوشته و این پروژه رو برای ادامه دادن به تحقیقاتش جدا از Vue راه انداخته.
benchmarkها نشون میدن که alien-signals از Vue 3.4 سریعتره. مهمتر از اون، هستهی الگوریتمش به Vue 3.6 پورت شده و XState هم ازش برای پیادهسازی معماری atom استفاده کرده. این نشون میده که نه یه پروژهی آزمایشگاهیه، نه یه ابزار صرفاً آکادمیک — واقعاً در production بهکار گرفته شده.
API اصلی کتابخونه خیلی سرراسته: سه تابع signal، computed و effect. سیگنال یه مقدار واکنشپذیره، computed یه مقدار محاسبهشده از روی سیگنالهاست، و effect وقتی مقدار سیگنال عوض میشه اجرا میشه:
import { signal, computed, effect } from 'alien-signals';
const count = signal(1);
const doubleCount = computed(() => count() * 2);
effect(() => {
console.log(`Count is: ${count()}`);
}); // Console: Count is: 1
count(2); // Console: Count is: 2
console.log(doubleCount()); // 4یه قابلیت مفید دیگه effectScope ه که میذاره چند تا effect رو زیر یه scope جمع کنی و همه رو با یه فراخوانی متوقف کنی. وقتی stopScope() رو صدا میزنی، همهی effectهای داخل اون scope از کار میافتن و دیگه به تغییرات سیگنال واکنش نشون نمیدن.
تابع trigger() هم برای وقتیه که مستقیماً مقدار داخل یه سیگنال رو mutate کردی (مثلاً با .push() روی یه آرایه) و نیاز داری وابستگیها دستی بهروز بشن. میشه باهاش چند سیگنال رو با هم trigger کرد تا بهجای چند بار بهروزرسانی، یهبار همهچیز حساب بشه.
برای کسایی که میخوان روی این هسته، API خودشون رو بسازن، تابع createReactiveSystem() در دسترسه. پورتهای متعددی هم به زبانهای دیگه مثل Rust، Go، Java، C#، Dart و Lua انجام شده، که نشوندهندهی قابلحمل بودن الگوریتمه.
نکات کلیدی:
- الگوریتم push-pull بدون بازگشت تابعی، برای بیشینه کردن performance
- API ساده: signal، computed، effect، effectScope، و trigger
- هستهی الگوریتم به Vue 3.6 و XState پورت شده
- پشتیبانی از nested effects با cleanup خودکار
- قابل توسعه از طریق createReactiveSystem() برای ساختن API سفارشی
- پورتهای رسمی به Rust، Go، Java، C#، Dart و Lua موجودن




