خوب بالاخره نسخه ی استیبل Deno معرفی شد. نمیدونم Deno رو میشناسید یا نه. ولی خوب Deno برای این بوجود اومده که اشتباهات Node.js رو جبران کنه. اینو من نمیگم ! اینو آقای Ryan Dahl میگه. همونی که برامون Node.js رو ساخته. اتفاقا Deno هم دستپخت ایشونه.
اساسا هر دوی این Runtime ها مشابه هم هستن.
- هر دو از موتور V8 جاوااسکریپت استفاده میکنن. اگه نمیدونین v8 چی هست خیلی مختصر میتونم بگم که وظیفش تبدیل کد جاوااسکریپت به کد های ماشین هست.
- هر دو از مکانیسم ٍevent loop استفاده میکنن. در مورد Node.js اینکار با libuv اتفاق می افته و در مورد Deno با tokyo
زبانی که Node.js باهاش توسعه داده شده ++c هست و در مورد Deno هم Rust.
تا اینجای کار که تفاوت محسوسی دیده نمیشه . پس میشه گفت که Deno نسخه ی متعالی Node.js هست.
اما آیا واقعا هست ؟ آیا میتونه ؟
ویژگی های جذاب Deno رو براتون میشمارم :
- دینو قابلیت اجرای sandbox داره. منظور اینه که به صورت پیش فرض نمیتونین توی یه اپلیکیشنی که با Deno توسعه داده شده به io یا نتورک دسترسی داشته باشید. بلکه باید حتما اجازه ی این دسترسی ها رو بدید. این موضوع باعث میشه که بر خلاف Node.js امنیت بیشتری داشته باشیم .
- دنو به صورت پیش فرض از تایپ اسکریپت استفاده میکنه. دیگه خبری از ts-node نیست. و خب این خیلی جذابه. اگه دولپر بکندی باشید میدونین که type safety تو بکند چقدر مهمه ! البته باید بگم که دینو همچنان جاوااسکریپت رو هم ساپورت میکنه. پس اگه هنوز به تایپ اسکریپت مهاجرت نکردید بازم میتونین از دینو استفاده کنید.
- اگه تو دنو Uncaught Exception اتفاق بیفته سرویس از کار میافته ! به عنوان یه برنامه نویس بکندی میدونین که دراپ شدن سرویس خیلی بهتر از با خطا کار کردن همون سرویسه . چون ممکنه باعث مشکلاتی بشه که هزینه های سنگینی روی دستتون بزاره.
- توی دنو میتونین کل کدتون رو باندل کنین. یه چیزی تو مایه های کارایی که فرانتندیها با وب پک میکنن.
- دیگه خبری از npm نیست! بله درست شنیدید ! دنو از ریپازیتوری npm پشتیبانی نمیکنه. به عبارتی دیگه node_modules وجود نداره. حتی package.json هم وجود نداره. ممکنه بگید که پس چطوری ماژول اضافه کنیم ؟ ورژنینگ چی میشه پس ؟ شما میتونید ماژول رو به راحتی از طریق سورس گیت پروژه و هر url ای امیپورت کنید
import * as log from "https://deno.land/std/log/mod.ts";
ورژنینگ رو هم توی همین url میتونین هندل کنید.
خوب حالا که این ویژگی های کول رو براتون شماردم. بزارید یکم دقیق تر هر کدوم رو بررسی کنیم :
۱ : آخه مگه وظیفه ران تایمه که بخواد سکوریتی رو این مدلی هندل کنه ؟اینکارو نمیتونیم تو کانتینر ها انجام بدیم ؟ من ندیدم هیچ ران تایمی رو که از این کارا بکنه ! نمیگم بده. ولی خوب واقعا بود و نبودش فرقی نداره. من ترجیح میدم داکر این کارها رو برام انجام بده!
۲ : دنو تایپ اسکریپت ساپورت میکنه . دمش گرم. ولی خوب هر پروژه ای Node.js ای هم میتونه تایپ اسکریپت رو ساپورت کنه. الان من از فرم ورک Nest.js استفاده میکنم. همه ی پروژه هام دیگه روی تایپ اسکریپته و این مورد هم تو دنو دردی رو از من دوا نمیکنه.
۳ : در مورد Uncaught Exception هم حرفی ندارم بزنم :) میتونم تو کل پروژه هندلش کنم که هر موقع اتفاق افتاد سرویس بسته بشه.
۴ : دنو باندل میکنه . خیلی هم خوب. ولی سمت سرور نیازی داریم اصلا ؟ نمیدونم واقعا مزیت به حساب میاد و یا خیر
۵ : این مورد ساپورت نکردن npm خیلی موضوع مهمیه . من فک نمیکنم با این حجم فوق العاده ی کامیونیتی npm بشه باهاش رقابت کرد. ضمن اینکه اصلا کلا این استایل مدیریت ماژول ها همین الانشم تو go برای من خیلی جذاب نیست. احتمال بروز خطا رو زیاد میکنه. من راه حل هایی رو دیدم که مثلا با وب پک میان پکیج npm ای رو به ماژول دنو تبدیل میکنن. ولی خوب صادقانه پشتوانه ی Node.js همین فرانتند دولپر هایی هستن که سال هاست دارن با جاوااسکریپت کار میکنن.مجاب کردن این کامیونیتی بسیار گسترده برای پورت کردن ماژول هاشون برای دنو فک میکنم کار سختی باشه .
در آخر نتیجه گیری من اینه که فک میکنم دنو آینده ای لااقل به این زودی ها نداره. از نظر پرفورمنسی هم تفاوت چشمگیری با Node.js نداره. فرم ورک های Node.js هم بعد از حدود ده سال چنان پایدار هستند که فرم ورک های تازه وارد دنو توانایی رقابت باهاشون رو ندارن. من فک میکنم دنو هنوز درد بزرگی رو دوا نمیکنه. پس دلیلی برای مهاجرت به دنو نمیبینم.
ممنونم که خوندین :)