هر چند وقت یکبار، فناوریهای جدیدی ظاهر میشوند که شما را به شدت تحتتأثیر قرار میدهند. در این مواقع معمولاً فکر میکنید چنین چیزی باید زودتر معرفی میشد و حال که معرفی شده، گامی مهم و سرآغاز تحولاتی شگرف خواهد بود. آخرین باری که این اتفاق برای من افتاد، زمانی بود که درباره پروژهای بهنام Node.JS یا Node (همانطور که باینری آن با این نام خوانده میشود) کنجکاوی کردم و به کسب اطلاعات پرداختم. اگر یک توسعهدهنده وب هستید و بهویژه اگر با جاوا اسکریپت سروکار دارید، باید نود را بهشدت جدی گرفته و اخبار توسعه آن را پیگیری کنید. با اینکه کمتر از دو سال از معرفی این پلتفرم میگذرد، توجه بسیاری از کاربران را به خود جلب کرده و ابزارهای بسیاری براساس آن یا برای آن توسعه داده شده است. پلتفرم نود، یک گام بسیار بزرگ و تأثیرگذار به عقب (زمانی که نت اسکیپ به معرفی جاوااسکریپت سمت سرور پرداخت)است که آینده را به شدت متحول خواهد کرد.
Node.js چیست: بازگشت به جاوا اسکریپت شکل 1- نمایی از پلتفرم Node.js در حال نصب روی ویندوز چرا پلتفرم نود مهم است؟ برای روشنشدن میزان سودمندی نود، مثالی ذکر میکنیم. تصور کنید در یک سایت اینترنتی، هزاران کاربر با واردکردن URL سایت وارد آن شده و بسیاری دیگر، درخواستهای AJAX بی شماری به وب سرور سایت مذکور ارسال میکنند. در این شرایط، هر درخواست یک رشته یا thread جدید در برنامه وب سرور مورد استفاده (که عموماً آپاچی خواهد بود) ایجاد کرده تا اسکریپتی را، برای نمونه PHP که به احتمال، حاوی پرسوجو از پایگاهداده یا چیزی شبیه به آن است، اجرا کند و نتیجه این اجرا را برای مرورگر درخواستکننده ارسال کند. در این کاربرد دو مفهوم اصلی از اهمیت ویژهای برخوردار هستند: یکی حافظه و دیگری ورودی/خروجی بلوکهکننده. زیرا هر thread اجرایی، حافظه بسیار زیادی را اشغالکرده و تعدد کاربران، امکان پرشدن حافظه سیستم و از کار افتادن خدمات مربوط را پیشمیآورد. همچنین، هر کدام از این رشتههای پردازشی به عملیات ورودی/خروجی مانند دسترسی به پایگاهداده نیاز دارند که هرکدام به زمانی مشخص برای تکمیلشدن نیازمند است. در بیشتر موارد نیز به دلیل بزرگبودن جدولهای دادهای و نتایج پرسوجوهای انجام شده، اسکریپت اجراکننده مجبور است تا بازگردانی دادهها از طرف پایگاهداده منتظرمانده و پس از دریافت، به اجرای بقیه دستورها بپردازد. به همین دلیل، این عملیات، عملیات ورودی/خروجی بلوکه کننده نامیده میشود وتأثیری بسیار منفی روی عملکرد کلی سرور خواهد داشت. نکته منفی این رویداد علاوه بر انتظار اسکریپت برای بازگردانی دادههای درخواست شده، مصرف توانپردازشی و حافظه درحین انتظار است که در صورتی که در مقیاس بالا اتفاق بیفتد، باعث ناکارآمدی کلی سیستم خواهد شد (شکل2). شکل 2- معماری گذشته وبسرورها حال اگر راهی باشد که بتوان این رشتههای پردازشی را حذف کرده و همه را در یک انباره بزرگ قرار داد، مشکل مصرف حافظه برطرف خواهد شد. همچنین، در صورتی که بتوان تا زمانی که برای بازگردانی نتایج ورودی/خروجی (پرسوجو از پایگاهداده) منتظر هستیم، به انجام امور دیگر در اسکریپت خود بپردازیم مشکل بلوکه شدن نیز حذف شده و سرعت عملکرد به طور قابل توجهی افزایش خواهد یافت. این دو مورد دقیقاً کارهایی است که Node.js به انجام آنها مبادرت ورزیده و به همین دلیل، اهمیت بالایی در آینده برنامههای کاربردی وب خواهد داشت. یک سرور مبتنی بر Node.js، تمام اتصالهای ورودی را در یک انباره مدیریت کرده و فریمورک پس زمینه نود، میتواند حالات و شرایط این اتصالها را مدیریت کرده و برای نمونه، یک اتصال را به حالت «در حال انتظار» تبدیل کند. همچنین، در پلتفرم نود از پارادیم حلقه رویداد و Callback برای انجام امور پرسوجو از پایگاه داده استفاده شده است تا انتظار برای پاسخ از پایگاه داده، منابع ارزشمند سیستم را بلوکه نکند. در این حالت، فرآیند Callback به دادههای بازگشتی از پایگاهداده تخصیص داده شده وهمزمان، نود به انجام امور دیگر میپردازد که خود از هدر رفتن سیکلهای CPU بیشتری جلوگیری میکند. با استفاده از این روش، مرورگر سمت کلاینت تا فراهمشدن نتایج در حالت انتظار باقیمیماند و با حالت درخواست دادهها از سرور threaded سنتی، هیچ تفاوتی احساس نمیکند. پس از آماده شدن نتایج پرسوجو از پایگاهداده، کد مشخص شده بهعنوان Callback اجرا شده، اتصال مربوط را از انباره انتخابکرده و حالت آن را از وضعیت «درحال انتظار» خارج کرده و با استفاده از آن، دادههای لازم را به مرورگر ارسال میکند. استفاده از چنین ساختاری علاوه بر کاهش مصرف حافظه، سرعت اجرای بالایی را نیز به ارمغان میآورد (شکل3). شکل 3- معماری قدیمی، اکنون با استفاده از node.js تغییر یافته است.
همانطور که میدانید، برنامههای تحت وب امروزی که بر مبنای AJAX کار میکنند، بار کاری سنگینی را به سرورهای خود تحمیل میکنند. در صورتی که به برنامههای گفتوگو یا بازیهای تحت مرورگر چند بازیکنی توجه کنیم، متوجه خواهیم شد که آنها اتصالهای همزمان بسیاری را ایجاد میکنند که زمان کم پاسخگویی به هر کدام از آنها بسیار مهم و حیاتی است. در چنین کاربردهایی است که قوت Node.js مشخص شده و روش مورد استفاده آن برای مدیریت امور بسیار پر اهمیتتر از گذشته بهنظر میآید. اگرچه تلاشهای انجام شده برای استفاده از AJAX و Comet برای بهترکردن تجربه وب بسیار ارزنده بوده و سوکتهای HTML5 نیز تلاش قابل تقدیری برای توسعه و ایجاد سهولت در پاسخ به این نیازمندیها بودند، اما تکمیلکننده این حلقه، استفاده از فناوریهای جدید در سمت سرور بود که با معرفی و توسعه روزافزون Node.js به خوبی در حال شکلگیری است (شکل4). شکل 4- جایگاه کنونی نود در بازار سرورها در هر صورت، برای مقبولیت و گسترش روزافزون Node.js به اندکی زمان نیاز است تا توسعهدهندگانی که در چند سال اخیر و تاکنون بر مبنای پارادایمهای سنتی AJAX به توسعه کد میپرداختند، با روش جدید تطبیق پیدا کرده و به سوی آن گرایش پیدا کنند. زمانی که سایتهای معروف و برنامههای وب مبتنی بر AJAX هر کدام سرور اختصاصی خود را داشته باشند، چندان دور نیست. در صورتی که تجربه کار با AJAX، COMET یا جاوااسکریپت را داشتهاید، تجربه کار با Node.js را از دست ندهید. مطمئن باشید که پس از آن، هیچ علاقهای برای بازگشت به استفاده از PHP نخواهید داشت.
Node.js در یک نگاه توسعه وب با استفاده از یک زبان داینامیک (جاوااسکریپت) که روی یک ماشین مجازی خیلی سریع با نام V8 اجرا میشود. سرعت اجرای آن از Ruby ،Python و Perl بسیار بیشتر است. توانایی مدیریتکردن هزاران اتصال همزمان، با کمترین سربار و با استفاده از یک نرمافزار.شایستگی ذاتی جاوااسکریپت در کار با event loopها با داشتن اشیای درجه یک، قابل استفاده در توابع و همچنین نحوه بستنآنها که سالها توسط برنامهنویسان مختلف روی مرورگرها تمرین شده است. تعدد افرادی که برنامهنویسی با استفاده از جاوااسکریپت را میدانند یا در آن حرفهای هستند. به جرأت میتوان جاوااسکریپت را محبوبترین زبان برنامهنویسی حال حاضر استفاده از جاوااسکریپت در سمت سرور به همراه استفاده از آن در سمت کلاینت، احتمال ناهمخوانی و بروز مشکلات و معضلات محیطهای ناهمگون برنامهنویسی را کاهشداده و امکان برقراری ارتباط دادهای با استفاده از JSON میان هر دو طرف را فراهم میسازد. استفاده از یک کد اعتبارسنجی فرم چه در سمت سرور و چه در سمت کلاینت واقعاً لذتبخش است.
مزایا معایب |