به طراح وب خوش آمدید.
اگرچه Node.js با اختلاف زیادی پرکاربردترین زمان اجرا سمت سرور جاوا اسکریپت باقی می ماند، زمان اجراهای جایگزینی مانند Deno و Bun با تلاش برای بهبود مفهوم Node.js مورد توجه قرار گرفته اند.
Deno، محبوبتر از دو زمان اجرا جدید، به برخی از مسائل امنیتی ذاتی Node.js میپردازد و پشتیبانی بهتری از فناوریهایی مانند TypeScript و WebAssembly ارائه میدهد.
در این مقاله، اصول Deno را یاد می گیرید، نحوه مقایسه آن با Node.js و Bun را یاد می گیرید و یک دمو عملی را دنبال می کنید که از Deno برای ایجاد یک وب سرور HTTP ساده استفاده می کند.
دنو چیست؟
همانطور که توسعه دهندگان با جاوا اسکریپت آشنا شدند، پتانسیل آن را برای برنامه نویسی بر روی ماشین های محلی دیدند. بنابراین آنها زمانهای اجرا سمت سرور را ایجاد کردند – محیطهایی که به کد جاوا اسکریپت اجازه میدهند بدون نیاز به مرورگر روی ماشینها اجرا شوند.
رایان دال Node.js را برای این منظور توسعه داد و بعدها ایجاد کرد خیر برای رفع برخی از مشکلاتی که با طراحی اصلی Node.js داشت. برخی از کاستی های قابل توجه عبارتند از اتکای آن به یک مدیر بسته متمرکز مانند npm، عدم وجود کتابخانه استاندارد و تنظیمات امنیتی پیش فرض ضعیف.
برخی از مزایای اصلی Deno شامل موارد زیر است:
- باامنیت پیش فرض – کاربر باید صراحتا اجازه بدهید برای کد دسترسی به شبکه، سیستم فایل یا محیط.
- پشتیبانی داخلی از TypeScript و WebAssembly. – اجرای برنامه های TypeScript و WebAssembly در Deno به آسانی اجرای برنامه های جاوا اسکریپت است. Runtime زبان ها را درست مانند جاوا اسکریپت کامپایل می کند.
- به بیرونمتمرکز مدیر بسته – به جای تکیه بر یک مخزن بسته مانند npm یا مدیر بسته Bun، Deno می تواند کد را مستقیماً از URL ها وارد کند. این قابلیت به این معنی است که میتوانید وابستگیها را از هر جایی که میزبانی میکنند، از جمله مخزن GitHub، سرور یا CDN خود دانلود کنید. Deno نیز ارائه می دهد سرویس میزبانی اسکریپت برای دسترسی آسان تر
- مطابقت با استانداردهای وب – هدف Deno پیروی از API های مشابه مرورگرها است، به این معنی که کد نوشته شده برای مرورگرها به راحتی به زمان اجرا ترجمه می شود.
شرکت های بزرگ و بازیگران بزرگ صنعت مانند Slack، نت لایفو subbase Deno را پذیرفت، اما پذیرش آن در بین توسعه دهندگان وب کمتر رایج بود. مطابق با Stack Overflow Poll 2022تنها ۱٫۴۷٪ از توسعه دهندگان حرفه ای که در نظرسنجی شرکت کردند از Deno استفاده کردند، در حالی که ۴۶٫۳۱٪ از Node.js استفاده کردند.
دنو چیکار میکنه؟
مانند هر زمان اجرا جاوا اسکریپت، Deno به توسعه دهندگان اجازه می دهد جاوا اسکریپت را در سمت سرور اجرا کنند. در نتیجه، میتوانید از Deno برای کارهای مختلف برنامهنویسی استفاده کنید.
Deno برای کارهایی مانند توسعه برنامه های کاربردی سرور که به درخواست های کاربران از اینترنت پاسخ می دهند، مناسب است. برای مثال، اگر در حال ساختن یک کتابفروشی آنلاین هستید، میتوانید از Deno برای ایجاد برنامهای استفاده کنید که اطلاعات را از پایگاه داده PostgreSQL میگیرد، صفحهای را ایجاد میکند که کاربر میخواهد آن را مشاهده کند و آن را برای نمایش به مرورگر ارسال میکند.
همچنین می توانید از Deno برای کارهای برنامه نویسی سطح پایین تر مانند ایجاد یک ابزار خط فرمان برای مدیریت وظایف خود از طریق ترمینال استفاده کنید. به عبارت دیگر، میتوانید از Deno برای رسیدن به همان اهدافی که با زبانهایی مانند پایتون یا روبی استفاده میکنید، استفاده کنید.
دنو در مقابل گره
Deno متعهد است که بهتر از Node.js باشد و این وعده را در چندین زمینه کلیدی انجام می دهد. Deno با ارائه کنترل دسترسی دقیق تر برای ماژول های کد مختلف، امنیت را بهبود می بخشد. همچنین بر روی انطباق با APIهای استانداردهای وب متمرکز است و به توسعه دهندگان این امکان را می دهد که از کد یکسانی در سمت مرورگر و سمت سرور استفاده کنند.
برای تیمهایی که روی پروژههای جاوا اسکریپت سمت سرور کار میکنند، Deno به یک جایگزین مناسب برای Node تبدیل شده است. و در حالی که عملکرد مشابه آنها برخی از توسعه دهندگان را متقاعد کرده است که Deno می تواند جایگزین Node.js شود، این امکان به چندین دلیل کلیدی بعید است.
Node.js محبوبترین زمان اجرا جاوا اسکریپت با اکوسیستم بزرگی از بستههای از پیش نوشته شده و یک جامعه کاربر فعال بزرگ است. این منابع ارزشمند به Node.js کمک می کند تا زمان اجرا بسیار جذابی داشته باشد.
در مقابل، Deno جدید است: نسخه ۱٫۰ در ماه مه ۲۰۲۰ منتشر شد، بنابراین تعداد کمی از توسعه دهندگان فرصت بازی با آن را داشته اند. یادگیری یک ابزار جدید زمان توسعه را طولانی می کند. علاوه بر این، مشخص نیست که آیا Deno مزایای قابل توجهی برای بسیاری از پروژه های ساده به همراه خواهد داشت یا خیر.
اما اگر در زمینهای مانند امور مالی، برنامهای میسازید که امنیت آن مهم است، قابلیتهای امنیتی Deno میتواند این انتقال را ارزشمند کند.
دنو در مقابل هود
سابق باند مهندس جرد سامنر اولین بار منتشر شد نان در جولای ۲۰۲۲ برای آزمایش بتا. Bun یک زمان اجرا آزمایشی تر از Deno است و بر خلاف Deno، به گونه ای طراحی شده است که به طور کلی با Node.js سازگار باشد.
Bun همچنین دارای عملکرد فوق العاده سریع است، از Node.js و Deno پیشی گرفت. توابع اصلی ویژگی های زیر را ارائه می دهند:
- بهترین موتور – به جای گوگل V8 موتور جاوا اسکریپت و اسمبلی وب، Ban از سریعتر و کارآمدتر استفاده می کند JavaScriptCore به عنوان موتور اصلی جاوا اسکریپت.
- کنترل بیشتر روی کد – روی نان نوشته شده است زیگیک زبان سطح پایین که کنترل بیشتری بر اجرای کد نسبت به جاوا اسکریپت فراهم می کند.
- راندمان تنظیم شده دقیق – تیم Bun اولویت بندی کرده است. پروفایل، محک گذاری و بهینه سازی در طول توسعه برای اطمینان از کارایی کد.
این ممنوعیت آنقدر جدید است که پشتیبانی جامعه در عیب یابی نسبتاً جزئی است. با این حال، آزمایش Ban می تواند جالب باشد. تیم هایی با نیازهای عملکردی خاص ممکن است Bun را برای پروژه های خود مفید بدانند، اما توسعه وب اغلب عوامل دیگر را بر عملکرد اولویت می دهد.
شروع کار با Deno
اکنون که کمی در مورد Deno و مقایسه آن با سایر زمانهای اجرا محبوب جاوا اسکریپت آموختهاید، وقت آن است که نحوه عملکرد آن را ببینید. در این بخش، نحوه ایجاد یک سرور ساده در Deno را یاد می گیرید که به درخواست های HTTP «Hello from the server!» پاسخ دهد.
نصب دنو
شما می توانید Deno را بر روی یک ماشین به عنوان یک فایل اجرایی باینری با استفاده از آنها نصب کنید دستورالعمل نصب و راه اندازی از اسناد رسمی به عنوان مثال، در macOS، می توانید Deno را با دستور نصب کنید brew install deno
.
راه دیگر برای شروع با Deno این است که آن را به عنوان یک بسته npm نصب کنید، مانند:
یک پوشه برای پروژه خود بسازید (deno_example maybe) و دستور را اجرا کنید npm init
داخل. (شما می توانید تمام گزینه های پیش فرض پیشنهاد شده توسط init
زیرا پایه و اساس را ایجاد می کند package.json فایل.)
پس از مقداردهی اولیه برنامه، آن را اجرا کنید npm install deno-bin
برای نصب بسته باینری Deno. اکنون می توانید به روز رسانی کنید package.json فایلی که اجازه می دهد برنامه با آن اجرا شود npm start
. خط پررنگ زیر را به ویژگی شی «scripts» در فایل default package.json اضافه کنید:
"scripts": {
"start": "deno run --allow-net app.ts",
"test": "echo \"Error: no test specified\" && exit 1"
},
این اسکریپت به Deno اجازه می دهد تا ماژول app.ts را با امتیازات شبکه اجرا کند (--allow-net
). به یاد داشته باشید که هنگام کار با Deno، باید به صراحت اجازه دسترسی به شبکه یا سیستم فایل را بدهید.
اکنون شما آماده ایجاد هستید app.ts ماژولی که مسئول گوش دادن به پورت و سرویس دهی به درخواست های کاربر است.
ایجاد ماژول App.ts
ایجاد یک سرور پایه در Deno بسیار آسان است. ابتدا ایجاد کنید app.ts فایل و کد زیر را قرار دهید:
import { serve } from "https://deno.land/[email protected]/http/server.ts";
serve((_req) => new Response("Hello from the server!"), { port: 8000 });
کد استفاده می کند serve
تابع از server.ts Deno library
در وب سایت رسمی Deno.land ذخیره شده است. این کد نیز ارائه می دهد serve
کنترل کننده تابع برای درخواست های دریافتی تابع کنترل کننده به هر درخواست “سلام از سرور!”
serve
این تابع همچنین پارامترهای اختیاری مانند شماره پورتی را که میخواهید روی آن ارائه شود، میپذیرد. در اینجا کد نمونه از این تنظیمات برای ارائه پورت ۸۰۰۰ استفاده می کند.
سپس سرور را با اجرا راه اندازی کنید npm start
. این باید سروری را که در حال گوش دادن است راه اندازی کند localhost:8000
و به درخواست ها با سلام پاسخ می دهد.
اگر می خواهید سرور را به یک API کاملاً کاربردی گسترش دهید، احتمالاً باید اتصال پایگاه داده را اضافه کنید. انجام این کار آسان است زیرا انجمن Deno درایورهایی را ایجاد کرده است که از پایگاه داده های محبوب مانند MariaDB/MySQL، PostgreSQL، MongoDB و غیره پشتیبانی می کنند.
خلاصه
زمان اجرا از معمول و قابل اعتماد تا بسیار آزمایشی متفاوت است. انتخاب مناسب برای پروژه بستگی به پروژه شما دارد و اینکه چگونه می خواهید زمان اجرا به شما در دستیابی به اهدافتان کمک کند.
Node.js برای اکثر پروژه ها مناسب است. این یک اکوسیستم بزرگ و یک جامعه بزرگ است که می تواند با طیف گسترده ای از سناریوهای عیب یابی کمک کند.
مزیت Deno امنیت بیشتر و تجربه بهتر توسعه دهنده است. در عین حال، بهترین گزینه برای تیمهای با تجربه است، زیرا مزایای آن بیشتر از زمان و تلاشی است که برای یادگیری یک محیط اجرا ناآشنا میباشد.
در نهایت، اگرچه Bun برای اکثر پروژههای حرفهای کمی بیش از حد آزمایشی است، اما زمان اجرا منحصربهفرد و سرگرمکنندهای است که میتوان آن را برای یک پروژه شخصی یا برای توسعه انتخاب کرد.
به طور کلی، Deno بین مزایای Node.js و ویژگی های تجربی Bun تعادل برقرار می کند. در حالی که Node.js یک انتخاب مفید برای اکثر پروژه ها است، Deno ممکن است در خط مقدم توسعه وب در آینده باشد.
در عین حال، با ثبت نام در ردیف سرگرمی میزبانی برنامه Kinsta، مهارت های Deno خود را تمرین کنید – اکنون کد کنید، بعداً مقیاس کنید.