معرفی کامل Bun - سه برار سریع تر از NodeJS

Bun - Fast JavaScript Runtime پی نوشت: الان که این متن رو دارم مینویسم تقریبا ۲ روز از انتشار نسخه آزمایشی Bun میگذره. بعد از ساعات اولیه انتشار، خیلی سریع شروع به ترند شدن کرده و بخاطر سرعت و پرفورمنس عجیبی که داره خیلی تو کامیونیتی برنامه نویسای جاواسکریپت معروف/محبوب شده!معرفی Bun خیلی کوتاه و مختصربان (Bun) یه Runtime مدرن برای زبان جاواسکریپت محسوب میشه که سرعت و پرفورمنس خیلی بیشتری نسبت به NodeJS و Deno داره و ادعا میکنه ۳ برابر از اونها سریع تره! با زبان سطح پایین Ziglang نوشته شده و مدیریت حافظه توی سطح پایین رو به خوبی انجام داده. همچنین برخلاف نود و دینو بجای V8 از engine قدرتمند JavaScriptCore (JSC) استفاده میکنه که کمپانی بزرگ Apple اون رو توسعه میده. تقریبا برعکس Deno توی این Runtime میشه پکیج های NPM رو نصب و استفاده کنیم. یه قابلیت عجیب دیگه ای ام داره که امکان اجرای ماژول های native نود مثل fs یا path رو به ما میده و از TypeScript و JSX هم built-in پشتیبانی میکنه ( یه Transpiler داخلی خیلی قدرتمند داره‌ ). و یه Bundler قوی و سریع ام داره که توی ادامه بیشتر با این تکنولوژی نوظهور آشنا میشیم. ( این تیکه واسه تنبلا بود... )بررسی عملکرد عمیق Bunاین Runtime سریع و قدرتمند روی ۳ اصل مهم و اساسی تمرکز کرده:ابعاد جدیدی از پرفورمنس و سرعت بالاتر به کمک موتور JavaScriptCoreتوسعه ابزار های قدرتمند مثل Transpiler و Bundler ها و پکیج منیجرسرعت بخشیدن به فرایند توسعهبرای ساخت NodeJS از زبان ++C و برای Deno از زبان Rust استفاده شده ولی Bun با تفاوت خیلی زیادی از زبان سطح پایین و قدرتمند Ziglang که رقیب مهم C به حساب میاد کمک گرفته. توی این زبان مدیریت حافظه به صورت دستی انجام میشه، جالبه بدونید که از سال ۲۰۱۶ درحال توسعه ست و هنوز ورژن پایداری از این زبان منتشر نشده، اما توی دنیای برنامه نویسی ازش استفاده میشه و کامیونیتی خوبی داره. موتور یا Engine این Runtime برخلاف نود و دینو V8 نیست! و از JSC یا JavaScriptCore استفاده کردن که نسبت به V8 عملکرد بهتری داره، کمپانی Apple توسعه اش میده و همچنین Engine مرورگر Saffari ام هست! به گفته سازنده Bun اکثر قسمت ها از صفر نوشته شده و مستقیما بدون هیچ پکیج خارجی میتونیم فایل های ts و jsx رو اجرا کنیم و سرعت خیلی بالایی رو توی فرایند توسعه ببینیم. آقای Jarred Sumner توسعه دهنده اصلی Bun توی توییتر اعلام کرده که پکیج منیجر این Runtime برای نصب Next.js نسبت به npm حدود ۴۰ برابر سریع تر کار میکنه و نسبت به yarn هم ۲۰ برابر سرعت بیشتری داره! توی ۱ ثانیه میتونه یک میلیون خط جاواسکریپت رو bundler داخلی خودش باندل کنه. ( لینک توییت ) تعدادی از ویژگی های مهم این Runtime :سرعت و پرفورمنس خیلی بالا - ۳ برابر سریع تر از NodeJS و Denoپکیج منیجر قدرتمند و پرسرعت بصورت built-in و امکان دانلود و استفاده از پکیج های npm قابلیت اجرایی ماژول های native نود مثل fs و os توسط Runtimeدارای Transpiler قدرتمند برای TypeScript و JSX بصورت built-inدارای تابع های قدرتمند و سریع سیستمیدسترسی به متغیر های .env بدون پکیج خارجی مثل dotenvدارای SQLite Client قدرتمند و ۳ برابر سریع تر نسبت به Deno و NodeJS بصورت built-inدارای Bundler قدرتمند بصورت built-in و حذف سرطانی به نام Webpackدارای قابلیت هایی مثل Fetch و WebSocket و ReadableStream بصورت built-inمقایسه پرفورمنس Bun رو Linux و macOS جالب تر از همه اینه که روی سیستم عامل macOS نسبت به Linux بهتر کار میکنه![ فک میکنم بخاطر JavaScriptCore باشه، چون خود Apple توسعه داده با macOS سازگاری بهتری داره ]اجرای عملیات cat سریع تر از linux حتی توی داکیومنت ادعا کرده که با Bun میشه عملیات cat رو ۲ برابر سریع تر از دستور cat لینوکس انجام داد!و همینطور جا داره بگم که توی تصویر بالا ماژول path از NodeJS ایمپورت شده و براحتی توی Bun اجرا میشه.آقای Jarred Sumner میگه که سرعت بالای Bun رو مدیون وقت زیادی که روی پروفایلینگ، بنچمارکینگ و بهینه سازی که گذاشتم بدونید. عوامل زیاد دیگه ای هم توی این پرفورمنس تاثیر داشن اما مهم ترین اون ها مدیریت دستی حافظه و hidden control flow توسط زبان Ziglang بوده.ما توی بنچمارک های زیر خیلی راحت میتونیم سرعت و پرفورمنس بالای Bun رو درک کنیم.۱. بنچمارک ساخت پروژه Reactمقایسه Bun با NPM برای ساخت پروژه React ۲. بنچمارک ساخت پروژه Next.jsمقایسه Bun با NPM برای ساخت پروژه Next۳. مقایسه با Babel توی Transpile کردن کد های Reactمقایسه سرعت Babel و Bun توی transpile کد های react۴. بنچمارک نصب پکیج با npmمقایسه سرعت npm و Bun توی نصب پکیج ها ۵. مقایسه با سرعت وحشتناک Viteمقایسه سرعت vite و Bun توی سرور توسعه نصب و اجرای سلام دنیانصب این Runtime خیلی ساده ست، دستور زیر روی توی ترمینال کپی/پیست کنید:curl https://bun.sh/install | bashصبر کنید تا نصب بشه و بعد دستوراتی که به شما میگه رو بزنید( این مرحله خیلی مهمه! )با دستور زیر هم نصب بودنش رو چک کنید:bun helpیه فایل با نام index.js بسازید و کد های زیر رو بنویسید:const msg = &quotHello World - Bun&quot console.log(msg);و بعد با دستور bun run index.js میتونید کد ها رو براحتی اجرا کنید و خروجی رو ببینید!برای TypeScript و JSX هم همینقدر فرایند ساده ای دارید:// bun run index.ts const msg: string = &quotHello World - TS- Bun&quot console.log(msg); // bun run index.jsx const name = &quotJSX - Bun&quot console.log(<div>{name}</div>)اگه توی اجرای فایل های JSX به ارور خوردید با دستور bun add react باید react رو نصب کنیدو همچنین برای نصب پکیج از npm دستور ساده زیر رو داریم:bun install lodashو برای حذف پکیجی که نصب کردیم میتونیم از bun remove lodash استفاده کنیم.ساخت http سرور با کمک بان خیلی آسونه، کد های زیر رو توی فایل http.js بنویسید:// http.js export default { port: 3000, fetch(request) { return new Response(&quotWelcome to Bun!&quot); }, };با دستور bun run http.js سرور رو استارت کنید و توی مرورگر آدرس localhost:3000 رو هم بالا بیارید.تبریک میگم، خوش اومدی به بان!نتیجه گیری و نظر شخصیهمونطور که اول متن نوشتم، الان ( ۱۷ تیر ۱۴۰۱‌ ) فقط ۲ روز از انتشار نسخه آزمایشی این Runtime میگذره! کل توییتر و برنامه نویسای جاواسکریپت داره تازه اون رو بررسی میکنه و هنوز این تکنولوژی هیچ کامیونیتی و داکیومنتی کاملی براش درست نشده. بنظرم Bun پتانسیل خیلی بیشتری نسبت به Deno داره ولی هنوز باید صبر کنیم تا نسخه پایدار اون منتشر بشه تا بتونیم بیشتر تحلیل کنیم.ودر آخر بگم حتی اگه بتونه NodeJS رو کنار بزنه باید مسیر خیلی طولانی و زمان زیادی رو طی کنه تا این اتفاق بیوفته پس اصلا ذهنتون رو درگیر این مسئله نکنید :)درضمن این اولین مقاله فارسی درباره Bun محسوب میشه ( پز اینو حتما باید میدادم XD )باهمدیگه میتونیم چیزای زیادی یاد بگیریم منو توی شبکه های اجتماعی دنبال کن!the-pesar.github.io۱۶/۱۷ تیر ۱۴۰۱ - ساعت ۱۴:۴۰