برنامه نویسی

آیا تمپورال هنوز موقتی است؟ – انجمن DEV

Temporal استاندارد جدید جاوا اسکریپت برای دستکاری تاریخ است. سفر طولانی و دشواری دارد که می خواهم با شما در میان بگذارم. آیا آماده تولید است یا خیر؟ بیایید دریابیم!

معرفی

در 13 مه 2017، اولین commit Proposal موقت ساخته شد، که یک API جدید برای دستکاری تاریخ، با الهام از کتابخانه‌های محبوبی مانند moment.js و luxon، خبر داد.

هدف تمپورال اصلاح بسیاری از نقاط درد مرتبط با موجود است Date شی در جاوا اسکریپت، چارچوبی بهتر و قابل اعتمادتر برای مدیریت تاریخ و زمان ارائه می دهد. در طول سال ها، Temporal به طور قابل توجهی تکامل یافته است و ویژگی ها و پیشرفت های زیادی را در خود جای داده است.

تفاوت های کلیدی با تاریخ

Temporal چندین پیشرفت قابل توجه را نسبت به سنتی معرفی می کند Date هدف – شی:

  1. مدیریت صحیح منطقه زمانی: Temporal با مدیریت دقیق منطقه زمانی طراحی شده است و به توسعه دهندگان این امکان را می دهد تا سناریوهای منطقه زمانی متقاطع را به طور یکپارچه مدیریت کنند.
  2. Immutable API: API تغییرناپذیر است و اطمینان می دهد که اشیاء تاریخ به طور تصادفی تغییر نمی کنند و هر عملیات یک شی جدید را برمی گرداند.
  3. مدت زمان رسیدگی: Temporal شامل پشتیبانی قوی برای فواصل از طریق Duration شی، کار با مدت زمان را آسان تر می کند.

در اینجا یک مثال برای نشان دادن سهولت استفاده آورده شده است:

const start = Temporal.PlainDateTime.from('2024-01-01T10:00');
const duration = Temporal.Duration.from({ hours: 3, minutes: 15 });
const end = start.add(duration);

console.log(start.toString()); // 2024-01-01T10:00
console.log(end.toString()); // 2024-01-01T13:15
console.log(duration.toString()); // PT3H15M
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

و مثالی دیگر:

const date1 = Temporal.PlainDate.from('2024-01-01');
const date2 = Temporal.PlainDate.from('2024-12-31');

const difference = date1.until(date2);

console.log(difference.toString()); // P11M30D (11 months and 30 days)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مدل موجودیت جامع

طراحی تمپورال شامل یک مدل جامع برای موجودیت های تاریخ و زمان است:

  • PlainDate: نشان دهنده تاریخ بدون منطقه زمانی است.
  • PlainTime: زمانی از روز را بدون تاریخ یا منطقه زمانی نشان می دهد.
  • PlainDateTime: ترکیبی از تاریخ و زمان را بدون منطقه زمانی نشان می دهد.
  • ZonedDateTime: نشان دهنده تاریخ و زمان در یک منطقه زمانی خاص است.
  • مدت زمان: نشان دهنده یک بازه زمانی است.
  • فوری: نشان دهنده یک لحظه دقیق در زمان است.

در اینجا می توانید در مورد شماتیک موجودیت های کلیدی بیشتر بخوانید.

توضیحات تصویر

توسعه فعال و Polyfill

در سال 2020، کار فشرده ای روی پلی فیل انجام شد. ایگالیا نقش مهمی را ایفا کرد و تلاش قابل توجهی را در روند توسعه سرمایه گذاری کرد. آنها آزمایش‌های گسترده‌ای نوشتند، ایمنی نوع را تضمین کردند، و ادعاهای زمان اجرا متعددی را اضافه کردند – با رعایت دقیق بهترین شیوه‌ها.

من شخصاً به مدت یک سال در حین توسعه یک پروژه Node.js از این polyfill استفاده کردم و بسیار راضی بودم. من با هیچ اشکالی مواجه نشدم و حتی یک PR برای بهبود تایپ ارسال کردم. خوشحال کننده است که در چنین پروژه بزرگی مشارکت کوچکی داشته باشیم.

چرا زمانی؟

تا سال 2021، من پروپوزال Temporal و polyfill آن را به خوبی فکر شده ترین ابزار برای دستکاری تاریخ در نظر گرفتم و هنوز هم این دیدگاه را دارم. با این حال، پلی‌فیل 200 کیلوبایت (50 کیلوبایت gzip) وزن دارد که آن را برای استفاده در جلو تا حدودی سنگین می‌کند. با این وجود، شایان ذکر است که هنگامی که Temporal به صورت بومی در مرورگرها پشتیبانی می‌شود، می‌توانید به سادگی پلی‌فیل را بدون تغییر کد خود حذف کنید – این لوکس با کتابخانه‌های تاریخ دیگر از NPM در دسترس نیست.

با این حال، من نمی توانستم چنین کتابخانه سنگینی را به هر برنامه وب بکشم، و برای مدتی Temporal را فراموش کردم. سه سال از زمانی که از پلی فیل خوش ساخت استفاده کردم می گذرد، پس چرا هنوز به همه مرورگرها ارسال نشده است؟

موانع برای تبدیل شدن به یک استاندارد

یکی از ویژگی های کلیدی API جدید مدیریت منطقه زمانی پیچیده است. با این حال، به دلیل نارسایی در استاندارد منطقه زمانی موجود، این امکان به طور کامل اجرا نشد. Ujjwal، یک کارمند Igalia و توسعه‌دهنده اصلی Temporal، پیشنهاد کرد استاندارد تاریخ زمان اینترنت را برای اطلاعات بیشتر گسترش دهد. به عنوان مثال، در حالی که قانون هاوایی یک زمان استاندارد واحد را الزامی می کند، مردم محلی اغلب از منطقه زمانی متفاوتی پیروی می کنند. این موضوع تئوری نیست. این یک مشکل واقعی برای دوست من، یک توسعه دهنده بود. تمدید پیشنهادی نه تنها منطقه زمانی، بلکه «تقویم» خاص را نیز مشخص می‌کند که چنین تفاوت‌هایی را در نظر می‌گیرد.

پذیرش این پیشنهاد نقطه عطف مهمی بود. از 23 اکتبر 2023، این پیشنهاد تصویب شد!

پشتیبانی از پلتفرم

پیش‌بینی اینکه چه زمانی Temporal به یک استاندارد تبدیل می‌شود و در همه مرورگرها در دسترس خواهد بود دشوار است، اما پیشرفت‌هایی وجود دارد. به عنوان مثال، اجرای V8 Temporal اکنون بیش از 2.6٪ از باینری را اشغال می کند، و شما می توانید از آن در Deno استفاده کنید.

وضعیت فعلی و چشم انداز آینده

توسعه در تمپورال ادامه دارد و ظاهراً هیچ مسدودکننده اصلی باقی نمانده است. شما می توانید وضعیت فعلی را در اینجا ردیابی کنید: مسائل GitHub – Proposal Temporal.

به عنوان مثال، اخیرا (مه 2024)، یک روش حذف شد – یک تغییر جالب برای یک پیشنهاد در راه تبدیل شدن به یک استاندارد. آیا این به این معنی است که Temporal هنوز آماده نیست؟ نه، من فکر می کنم برای مدت طولانی می توانیم Temporal را به عنوان یک کتابخانه تاریخ بالغ تصور کنیم که به آرامی تکامل می یابد و توسعه می یابد، درست مانند هر کتابخانه NPM دیگری.

بنابراین، چه چیزی بهتر است – یک کتابخانه با APIهای خاص بدون ویژگی، یا Temporal – یک چارچوب تاریخ جامع و کامل با پیشرفت‌های مداوم؟

پلی پر

تنها پیچیدگی Temporal اندازه پلی فیل است. با این حال، یک پلی‌فیل جایگزین برای مدتی در حال توسعه است – پلی‌فیل موقت توسط FullCalendar. اندازه آن بسیار جذاب تر است: 60.7 کیلوبایت تا 21.7 کیلوبایت (gzip). و من قصد دارم از آن در پروژه بعدی خود استفاده کنم! در مورد شما چطور؟

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا