نود.جی‌اس

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
Node.js
Node.js logo.svg
نویسنده(های) اصلی Ryan Dahl
توسعه‌دهنده(ها) توسعه‌دهندگان نود.جی‌اس، جوینت، مشارکت‌کنندگان
انتشار پایدار ۸.۷.۰ و ۶.۱۱.۴ (اِل‌تی‌اِس) / ۱۱ اکتبر، ۲۰۱۷؛ ۱۰ روز پیش (۲۰۱۷-۱۰-11) و ۳ اکتبر، ۲۰۱۷؛ ۱۸ روز پیش (۲۰۱۷-۱۰-03)
وضعیت توسعه فعال (لیست کامل نسخه‌های منتشر شده)
نوشته‌شده به C++، C، جاوااسکریپت
سیستم‌عامل لینوکس، مک اواس، سولاریس، فری‌بی‌اس‌دی، اپن‌بی‌اس‌دی، ویندوز (ورژن‌های قدیمی نیاز به سیگوین دارند)، وب او اس، نان‌استاپ‌او‌اس
گونه برنامه‌نویسی رویدادمحور شبکه
پروانه پروانه ام‌آی‌تی[۱]
وب‌گاه nodejs.org

نود.جی‌اس (به انگلیسی: Node.js) یک محیط اجراییِ سمت سرورِ متن‌باز و چندسکویی برای زبان جاوااسکریپت است. از لحاظ تاریخی از جاوا‌اسکریپت در درجه‌ی اول به عنوان یک زبان اسکریپت‌نویسی سمت کاربر به این صورت استفاده می‌شد که اسکریپت‌های نوشته شده با جاوااسکریپت درون صفحات اچ‌تی‌ام‌ال جاسازی می‌شدند و سپس این اسکریپت‌ها توسط یک موتور جاوا‌اسکریپت در مرورگر وب کاربر پردازش می‌شد. نود.جی‌اس امکان استفاده از جاوااسکریپت برای نوشتن اسکریپت‌های سمت سرور را فراهم می‌کند تا بدین صورت بتوان با آن صفحات وب پویا را قبل از فرستادن آن به مرورگر کاربر تولید کرد. در نتیجه نود.جی‌اس به یکی از المان‌های اصلی در پارادایمِ «جاوااسکریپت در همه جا» [۲] تبدیل شده است که در آن به جای استفاده از زبان‌های برنامه‌نویسی مختلف در نوشتن اسکریپت‌های سمت سرور، از یک زبان واحد برای توسعه‌ی برنامه‌های کاربردی وب استفاده می‌شود.

اگرچه به صورت قراردادی از js. به عنوان پسوند نام پرونده‌های جاوااسکریپت استفاده می‌شود اما این عبارت در نام نود.جی‌اس (به انگلیسی: Node.js) اشاره به پرونده‌ی خاصی ندارد و صرفا قسمتی از نام این محصول است. معماری نرم‌افزاری نود.جی‌اس یک معماری مبتنی بر رخداد است که توانایی ارتباط ورودی/خروجی ناهمگام (مسدودنشدنی) را دارد. هدفِ استفاده از این نوع طراحی نرم‌افزاری، بهینه‌سازی توان عملیاتی و مقیاس‌پذیری در برنامه‌های کاربردی وبی که عملیات ورودی/خروجی زیادی دارند و همچنین برنامه‌های کاربردی وب بلادرنگ (مانند برنامه‌های ارتباط بلادرنگ یا بازی‌های تحت مرورگر) است.

پروژه‌ی توسعه‌ی توزیع‌شده‌ی نود.جی‌اس تحت نظارت بنیاد نود.جی‌اس (به انگلیسی: Node.js Foundation) [۳] قراردارد که جزئی از برنامه‌ی پروژه‌های جمعی بنیاد لینوکس نیز می‌باشد.

شرکت‌های استفاده کننده از نود.جی‌اس شامل شرکت‌هایی مثل آی‌بی‌ام، لینکد‌این، مایکروسافت، نت‌فلیکس، پی‌پل، یاهو! و سیسکو می‌شود.

تاریخچه[ویرایش]

رایان دال، بنیان گذار نود.جی‌اس، در سال ۲۰۱۰
رایان دال، بنیان گذار نود.جی‌اس، در سال ۲۰۱۰

نود.جی‌اس در ابتدا در سال ۲۰۰۹ توسط رایان دال (به انگلیسی: Ryan Dahl) نوشته شد. ۱۳ سال قبل از آن نیز اولین محیط توسعه‌ی جاوااسکریپت در سمت سرور با نام LiveWire Pro Web توسط نت‌اسکیپ معرفی شده بود. نسخه‌ی اولیه‌ی نود.جی‌اس تنها از سیستم‌عامل لینوکس و مک‌او‌اس پشتیبانی می‌کرد. توسعه‌ و نگهداری نود.جی‌اس توسط رایان دال صورت می‌گرفت و سپس نیز توسط شرکت جویِنت حمایت شد.

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

رایان دال در سال ۲۰۰۹ به انتقاد از ضعفِ محبوب‌ترین سرور وب جهان یعنی آپاچی در زمینه‌ی رسیدگی به تعداد زیادی کانکشن (تا ۱۰،۰۰۰ کانکشن یا بیش‌تر) پرداخت و همچنین انتقاداتی را به متداول‌ترین روش کد‌نویسی یعنی برنامه‌نویسی ترتیبی (به انگلیسی: Sequential Programming) وارد کرد. در برنامه‌نویسی ترتیبی در مواجهه با کانکشن‌های همزمان یا کل فرآیند برنامه موقتاً متوقف می‌شود یا با‌لاجبار مقداری زیادی از حافظه‌ی اصلی به پشته‌ی فراخوانی اختصاص می‌یابد.

رایان دال پروژه‌ی نود.جی‌اس را در ۸ نوامبر سال ۲۰۰۹، در افتتاحیه‌ی همایش JSCond در اروپا به همگان معرفی کرد.[۴] نود.جی‌اس تشکیل شده بود از موتور جاوااسکریپت وی‌۸ (به انگلیسی: V8 Javascript engine) گوگل به همراه یک حلقه‌ی رخداد (به انگلیسی: Event loop) و نیز یک رابط برنامه‌نویسی کاربردی سطح پایین برای ورودی/خروجی. ارائه‌ی پروژه توسط رایال دال در همایش JSConf با تشویق ایستاده حاضرین روبرو شد.

در ژانویه‌ی ۲۰۱۰، سامانه مدیریت بسته ان‌پی‌ام (به انگلیسی: npm) برای نود.جی‌اس معرفی شد.[۵] ان‌پی‌ام فرآیند انتشار و به اشتراک‌گذاری کد منبعِ کتابخانه‌های نود.جی‌اس را آسان می‌کند و طراحی شده تا کار نصب، بروزرسانی و حذف کتابخانه‌های نرم‌افزاری را سهولت ببخشد.

در ژوئن ۲۰۱۱، مایکروسافت و جویِنت با همکاری یکدیگر کار پیاده‌سازیِ نسخه‌ی بومی نود.جی‌اس برای ویندوز را شروع کردند. اولین نسخه‌ی نود.جی‌اس که از سیستم‌عامل ویندوز پشتیبانی می‌کرد در ژولای ۲۰۱۱ منتشر شد.

در ژانویه‌ی ۲۰۱۲، رایان دال از مدیریت پروژه کناره‌گیری کرد و آن را به ایزاک اِشلوتر (به انگلیسی: Isaac Schlueter) که همکار او و نیز به وجود آورنده‌ی ان‌پی‌ام نیز بود، واگذار کرد. در ژانویه‌ی ۲۰۱۴ اشلوتر نیز اعلام کرد که تیموتی جِی فُنتِین (به انگلیسی:‌ Timothy J. Fontaine) پروژه را رهبری خواهد کرد.

در دسامبر ۲۰۱۴ فدور اینداتنی (به انگلیسی: Fedor Indutny) انشعابی از نود.جی‌اس را با نام آی‌او.جی‌اس (به انگلیسی: io.js) شروع کرد. به خاطر اختلاف داخلی اعضا‌ی پروژه بر سر نظارت شرکت جویِنت روی پروژه، آی‌او.جی‌اس به عنوان یک پروژه‌ی جایگزین برای نود.‌جی‌اس با سیاست «حاکمیت [متن] باز» به همراه یک کمیته‌ی فنی جداگانه به وجود آمد. برخلاف نود.‌جی‌اس پدیدآورندگان آی‌او.جی‌اس تصمیم گرفتند تا نسخه‌ی موتور وی‌۸ استفاده شده در پروژه، همواره بروز و مطابق آخرین نسخه‌ی آن باشد.

در فوریه‌ی ۲۰۱۵، قصد ایجاد بنیادی بی‌طرف با نام بنیاد نود.‌جی‌اس اعلام شد. سپس در ژوئن همان سال، کمیته‌های هر دو پروژه رأی موافق به همکاری با یکدیگر تحت بنیاد نود.‌جی‌اس دادند.

در سپتامبر ۲۰۱۵، نسخه‌ی ۰.۱۲ نود.‌جی‌اس با نسخه‌ی ۳.۳ آی‌او.جی‌اس ادغام شد و تحت نام نود (به انگلیسی: Node) با ورژن ۴.۰ منتشر شد. این ادغام ویژگی‌های استاندارد ES6 موجود در موتور وی‌۸ و همچنین چرخه‌ی انتشار با پشتیبانی بلند‌مدت (به انگلیسی: Long-term support release cycle) را به نود.‌جی‌اس اضافه کرد. از سال ۲۰۱۶ به بعد، وب‌سایت آی‌او.جی‌اس در پیامی به بازدیدکنندگان پیشنهاد می‌کند تا در نتیجه‌ی ادغام دو پروژه و همچنین به خاطر عدم انتشار نسخه‌ی جدیدی از آی‌او.جی‌اس، دوباره به استفاده از نود.‌جی‌اس بازگردند.

مرور[ویرایش]

نود.جی‌اس امکان ساخت وب سرور‌ها و ابزارهای شبکه را با استفاده از زبان جاوااسکریپت و مجموعه‌ای از پیمانه‌ها (به انگلیسی: Modules) که قابلیت‌های پایه‌ای را عرضه می‌کنند، در اختیار استفاده کننده قرار می‌دهد. پیمانه‌ها برای فعالیت‌های مختلفی از جمله کار با ورودی/خروجی سیستم فایل، شبکه (DNS، HTTP، TCP، TLS/SSL یا UDP)، داده‌های دودویی، توابع رمزنگاری، جریان‌های داده (به انگلیسی: Data streams) و ... استفاده می‌شوند.[۶] رابط برنامه‌نویسی کاربردی‌ای (API) که پیمانه‌های نود.جی‌اس از آن استفاده می‌کنند به نحوی طراحی شده تا پیچیدگی نوشتن برنامه‌های کاربردی سمت سرور را کاهش دهد.

برنامه‌های کاربردی نوشته شده با نود.جی‌اس می‌توانند در سیستم‌عامل‌های لینوکس، مک‌او‌اس، مایکروسافت ویندوز، NonStop و سرور‌های یونیکس اجرا شوند. برنامه‌های کاربردی نود.جی‌اس را با کافی‌اسکریپت (می‌تواند به جای جاوااسکریپت استفاده شود)، زبان برنامه‌نویسی دارت، تایپ‌اسکریپت (یا هر شکل دیگر از جاوااسکریپت با وابستگی زیاد به نوع) یا هر زبان دیگری که قابل ترجمه به جاوااسکریپت باشد، می‌توان نوشت.[۷]

نود.جی‌اس در وهله‌ی اول برای نوشتن برنامه‌های تحت شبکه مانند سرور‌های وب استفاده می‌شود. بزرگترین تفاوت میان نود.جی‌اس و پی‌اچ‌پی (به انگلیسی: PHP) در این است که برخلاف پی‌اچ‌پی که در آن بیشتر توابع تا تمام شدن کار مسدود می‌شوند (به این معنا که دستور‌ها تنها زمانی اجرا می‌شوند که دستور‌های قبلی انجام شده باشند)، توابع در نود.جی‌اس به گونه‌ای طراحی شده‌اند تا ناهمگام باشند و در نتیجه مسدود نشوند (به این معنا که دستور‌های همروند یا حتی به صورت موازی قابل اجرا هستند و برای اعلام موفقیت یا شکست در اجرا از بازخوان‌ها (به انگلیسی: Callbacks) استفاده می‌کنند).[۸][۹]

معماری پلت‌فرم[ویرایش]

نود.جی‌اس امکان برنامه‌نویسی رویداد‌محور را به سرور‌های وب عرضه می‌کند که در نتیجه امکان توسعه‌ی وب‌سرور‌های سریع در جاوااسکریپت فراهم می‌شود. با نود.جی‌اس توسعه‌دهندگان قابلیت توسعه‌ی سرور‌هایی با مقیاس‌پذیری بالا را بدون نیاز به ریسه‌ها (به انگلیسی: Threads) و تنها با استفاده از مدل ساده شده‌ی برنامه‌نویسی رویداد‌محور و استفاده از باز‌خوان‌ها دارند. نود.جی‌اس پُلی است میان راحتی استفاده از یک زبان برنامه‌نویسی اسکریپتی (مثل جاوااسکریپت) و قدرت برنامه‌نویسی شبکه‌ای در یونیکس.

از آنجا که موتور جاوااسکریپت وی‌۸ گوگل به صورت متن باز و تحت پروانه‌ی بی‌اس‌دی منتشر شده بود و فوق‌العاده سریع بود و نیز توانایی فوق‌العاده‌ای در تکنولوژی‌های پایه‌ی اینترنت مثل HTTP، DNS و TCP داشت، نود.جی‌اس نیز بر مبنای آن نوشته شد. همچنین به خاطر شناخته شده بودن جاوااسکریپت، نود.جی‌اس به سرعت برای اجتماع توسعه‌دهنگان وب قابل استفاده بود.

V8[ویرایش]

V8 موتور اجرای جاوا اسکریپت ساخته شده برای گوگل کروم و انتشار یافته است به صورت متن باز که نوشته شده توسط گوگل با زبان C++ و machine code به جای تفسیر آن در زمان واقعی است.

Node.js و با استفاده از libuv که مسئولیت رسیدگی به حوادث ناهمزمان است کار میکند. Libuv یک لایه انتزاعی برای شبکه و سیستم فایل قابلیت در هر دو ویندوز و پازیکس ایجاد میکند - که سیستم های مبتنی بر مانند لینوکس، مک OS X، OSS در بدون توقف و یونیکس.

قابلیت های اصلی Node.js ساکن بودن در یک کتابخانه جاوا اسکریپت است. اتصالات Node.js و، نوشته شده در زبان C ++، این فناوری به یکدیگر و به سیستم عامل ارتباط برقرار کنند.


نمونه‌ها[ویرایش]

نسخهٔ Hello World کارساز HTTP در Node.js:

var http = require('http');

http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World\n');
    console.log('Server running on port 8000');
}).listen(8000);

نمونهٔ دیگری با یک کارساز TCP که پورت ۷۰۰۰ را می‌شوند و و هر چیزی را که می‌فرستید بازپخش (به انگلیسی: echo) می‌کند:

var net = require('net');

var server = net.createServer(function (stream) {
    stream.write('hello\r\n');

    stream.on('data', function (data) {
        stream.write(data);
    });

    stream.on('end', function () {
        stream.end('goodbye\r\n');
    });
});

server.listen(7000, 'localhost');

منابع[ویرایش]

پیوند به بیرون[ویرایش]