این مطلب یکی از مقالات پرونده ویژه«جاوااسکریپت آینده است» شماره 198 ماهنامه شبکه است. علاقهمندان میتوانند کل این پرونده ویژه را از روی سایت شبکه دانلود کنند.
تاریخچهای مختصر از جاوا اسکریپت
در اواسط سال 1990، شرکت سان میکروسیستمز (که در سال 2010 به مالکیت اوراکل درآمد) با شعار فریبنده «یک بار بنویس، همه جا اجرا کن» پا به میدان گذاشت تا جاوا را برای توسعه در سکوهای مختلف معرفی کند. در روزهای نخستين وب، یکی از ویژگیهای برجسته جاوا این بود که میتوانست از طریق اپلتها داخل مرورگر اجرا شود. چنین ایدهای به نظر عالی میرسید بهاستثنای اینکه در واقع کاری که باید را انجام نمیداد. اپلتهای جاوا ضعیف، کند و ناامن بودند. هرچند درنهایت جاوا وظیفه خود را درست انجام داد. بهلطف هادوپ، اسپارک، Flink و سایر سکوهای دادههای بزرگ، ماشین مجازی جاوا (JVM) به یک محیط اجرایی کامل برای اپلیکیشنهای دادههای بزرگ تبدیل شده است. از طرف دیگر جاوا از طریق اندروید روی بیش از یک میلیارد دستگاه در حال اجرا است.
اما جاوا اسکریپت صرف نظر از شباهت اسمی (هرچند کمک بزرگی به معروفیت آن کرد) هیچ ارتباطی با جاوا ندارد. این زبان اسکریپتنویسی در اصل بهعنوان یک مفسر زبان سبک داخل مرورگر برای برنامهنویسان غیرحرفهای طراحی شده بود، اما طی سالها به یک زبان برتر برای توسعه وب تبدیل شد. در واقع امروز توسعه سمت کلاینت با HTML, CSS و جاوا اسکریپت مترادف شده است. در ابتدا جاوا اسکریپت به تغییرات ظاهری صفحات در مرورگر مثل رنگ پسزمینه و ظاهر دکمهها محدود بود، اما امروز اپلیکیشنهای وب نوشته شده با جاوا اسکریپت تجربهای شبیه به اپلیکیشنهای دسکتاپ را برای کاربر فراهم میکند. برای نمونه در جیمیل بیش از 400،000 خط کد جاوا اسکریپت به کار گرفته شده است. در سمت کلاینت، جاوا اسکریپت خیلی بیشتر به شعار «یک بار بنویس، همه جا اجرا کن» جاوا نزدیک شده است. تقريباً میتوان گفت اپلیکیشنهای وب جاوا اسکریپت همیشه و در هر شرایطی کار میکنند. روی تراشه Intel یا ARM، تقريباً تمام سیستم عاملها و اغلب مرورگرها میتوان کدهای جاوا اسکریپت را اجرا کرد.
تاخت و تاز جاوا اسکریپت در سرورها
برای مدتی ما در یک جهان دوقطبی پایدار زندگی میکردیم. جاوا اسکریپت در مرورگر و سمت کلاینت حضور داشت و جاوا موقعیت برتر خود در سمت سرور را حفظ کرد. REST API نیز بین سرور و کلاینت نقش سکوی زبان میانجی را بازی میکند. تا اینجا همه چیز خوب بود تا اینکه بعضی از توسعهدهندگان با این پرسش که «چه میشود اگر ما جاوا اسکریپت را هم در سرور اجرا کنیم؟» این توازن را برهم زدند. ایده جاوا اسکریپت سمت سرور از همان ابتدا مطرح بود، اما تا اواسط سال 2000 جدی گرفته نشد. با ظهور موتور جاوا اسکریپت منبع باز V8 گوگل (https://developers.google. com/v8/) راه برای جاوا اسکریپت سمت سرور مهیا شد. با محیط اجرایی منبع باز معروف Node.js تمام ویژگیهای مورد نیاز برای جاوا اسکریپت سمت سرور نیز فراهم شد. نمونههای موفقی از تغییر جهت بهسمت Node.js وجود دارد. بخش موبایل لینکداین از Ruby on Rails به اجرای Node.js تغییر کرد و توانست 30 سرور خود را به 3 سرور (با ترافیک یکسان) کاهش دهد.
اوبر، نتفلکیس، پیپال و خیلیهای دیگر حالا کاربران بزرگ Node.js هستند.
جاوا اسکریپت و بزرگ دادهها
تا اینجا ما درباره راهاندازی اپلیکیشنهای کاربرپسند با استفاده از جاوا اسکریپت در هر دو سمت سرور و کلاینت صحبت کردیم. در ادامه قصد داریم به دلایل سازگاری جاوا اسکریپت با اپلیکیشنهای دادههای بزرگ در هر دو سمت کلاینت و سرور بپردازیم. در مقايسه با اپلیکیشنهای کاربردی و کاربرپسند، اپلیکیشنهای داده بزرگ کاربردهای داخلی داشته و اغلب توسط متخصصان داده در سازمانها استفاده میشوند. به بیان واضحتر، وقتی صحبت از سمت کلاینت یا سطح رویی (front end) ارتباط میشود منظور ابزاری است که متخصصان داده از آن استفاده میکنند تا به قابلیتهای تحلیلی در حجم عظیمی از مجموعه دادهها دسترسی پیدا کنند و سمت سرور یا سطح زیرین (back end) ارتباط بهمعنای زیرساختهای پردازش توزیع شده (برای مثال، هادوپ و اسپارک) است که این نوع از قابلیتها را ممکن میکند.
ممکن است مرورگر نیز به یک سکوی اصلی برای تجزیه و تحلیل داده تبدیل شود و نباید فراموش کرد که جاوا اسکریپت نیز در قلب مرورگر جای دارد
اما سطح رویی برای متخصصان داده شامل چه چیزهایی است؟ طی سالهای اخیر نوتبوکهای مبتنی بر مرورگر (مثل Jupyter) توسط متخصصان داده محبوبیت فوقالعادهای به دست آوردهاند. بنا به دلایل گوناگونی از جمله یکپارچهسازی کد و افزایش راندمان خروجی فرآیند تحلیل داده به دلیل اینکه خود نوتبوک را میتوان بهصورت سریالی درآورد، دوباره بارگذاری کرد و به اشتراک گذاشت نوتبوکها محبوب هستند. توانایی دستکاری، تنظیم مجدد و تکه کردن کد (در سلولها) با توجه به ماهیت تکراری علم دادهها و طیف گستردهای از وظایف تجزیه و تحلیل توسط یکپارچهسازی نوتبوکهای مبتنی بر مرورگر و سکوهای تجزیه و تحلیل داده گسترشپذیر، کدهای نوشته شده در یک نوتبوک تحت مرورگر را میتوان روی یک کلاستر اجرا کرد و برای کارهای بعدی نتایج را روی نوتبوک دستکاری کرد. سکوهای تجاری Databrick نشاندهنده آن هستند که تحیلگرهای تحت وب دادههای بزرگ آینده را در دست خواهند گرفت.
این به این معنا است که ممکن است مرورگر نیز به یک سکوی اصلی برای تجزیه و تحلیل داده تبدیل شود و نباید فراموش کرد که جاوا اسکریپت نیز در قلب مرورگر جای دارد. علاوه بر این، محصولات نهایی علم داده اغلب تجسمی از یک سناریو هستند. در خیلی از موارد آنها تعاملی بوده به متخصصان داده این امکان را میدهند تا درک بهتری از دادهها به دست آورند. به بیان دیگر، خروجی علم داده یک اپلیکیشن وب سفارشیسازی شده است که نتایج تحلیلی را در یک مکان جمعآوری میکند. یکی از این ابزارهای تجسمی ( D3.js (https://d3js.orgاست که از قضا جاوا اسکریپت هم است. به این شکل دادههای بزرگ کاربرپسند (با مجموعهای متفاوت از کاربران) نیز میشوند. در حال حاضر خط سیر تحلیل دادههای بزرگ چیزی شبیه این است: کلاسترهای اسپارک در حال اجرا در مراکز داده (سطح زیرین) با اسپارک کلاینت (یا اسکالا، پایتون یا آر) که ممکن است در مرورگر (نوتبوکها) اجرا شود، به نحوی به یک اپلیکیشن وب متصل شده است (همان تجسم تعاملی D3.js) که محصول تحلیلی نهایی را به وجود میآورد. ارتباط بین کلاسترهای اسپارک و آر/ پایتون/ اسکالا بهخوبی توسعه پیدا کرده است، اما رابطه تعاملی با D3.js هنوز کامل نیست. حالا میتوان این مسیر ارتباطی را با جاوا اسکریپت کامل کرد.
تصور کنید ما چیزی شبیه به Spark.js داشتیم که میشد کدهای اسپارک را با جاوا اسکریپت نوشت. اساساً چنین چیزی تفاوتی با PySpark که بر پایه Py4J (www.py4j.org) طراحی شده است ندارد. این همان پلی است که ارتباط بین برنامههای پایتون در حال اجرا در مفسر پایتون را با جاوا در JVM برقرار میکند. به همین شکل میتوان Spark.js را با کمک (www.mozilla.org/ rhino) که جاوا اسکریپت نوشته شده در جاوا را پیادهسازی میکند کدنویسی کرد. در Spark.js آبجکتهای JVM باید بتوانند به آبجکتهای جاوا اسکریپت تبدیل و برای یکپارچه شدن با D3.js آماده شوند. تمام این فرآيند در مرورگر یا Node.js اجرا خواهد شد.
توجه داشته باشید كه فرآیند اجرای تجزیه و تحلیل دادههای بزرگ هنوز در اسپارک و درون JVM اتفاق میافتد. Spark.js فقط ادغام جاوا اسکریپت را راحت میکند. اما چرا یک گام جلوتر نرفته و Spark را کاملاً با موتور تحلیلگر اصلی جاوا اسکریپت جایگزین نکنیم؟ ما نمیدانیم سکوی تحلیل دادههای بزرگ نوشته شده به سبک میکروسرویسها به چه شکلی خواهد بود. شاید چنین ایدهای خیلی هم بلندپروازانه نباشد، زیرا چنین سکویی نقطه پایانی منطقی برای دیدگاه «جاوا اسکریپت در همه جا» است.
برای بررسی امکانسنجی دیدگاه «جاوا اسکریپت در همه جا» اخیراً یک نمونه اولیه از RDBMS تحلیلی بهنام Afterburner را در جاوا اسکریپت پیادهسازی کردهایم. کل این سیستم بدون هیچگونه وابستگی خارجی (یا نیاز به Node.js) تماماً داخل مرورگر اجرا میشود. Afterburner طرحهای کوئریگیری کامپایل شده را توليد میکند که از دو قابلیت جاوا اسکریپت typed arrays و asm.js بهره میبرد. این نوع از آرایهها در جاوا اسکریپت میتوانند هر نوع دادهای را در خود ذخیره کنند، زیرا عناصر متوالی ممکن است پیوسته نباشند. علاوه بر این خود آرایه نیز میتواند به طور پویا پر و خالی شود. این انعطافپذیری سبب میشود تا این ساختار داده برای برنامهنویسان تازهکار قابل دسترس باشد، اما بهینهسازی موتورهای جاوا اسکریپت در زمان کامپایل و اجرا را با محدودیت مواجه میکند.
در حال حاضر مرورگرهای مدرن با بهرهگیری از توانایی موتورهای قدرتمند جاوا اسکریپت میتوانند ابزارهای مورد نیاز را بهصورت بیدرنگ اجرا و بازیهای چندنفره آنلاین را مدیریت کنند
در حال حاضر مرورگرهای مدرن با بهرهگیری از توانایی موتورهای قدرتمند جاوا اسکریپت میتوانند ابزارهای مورد نیاز را بهصورت بیدرنگ اجرا و بازیهای چندنفره آنلاین را مدیریت کنند. یکی از شاهکارها در این زمینه (QuakeJS (www.quakejs.com نام دارد که بازی تیراندازی اول شخص Quake 3 را تماماً در مرورگر اجرا میکند. کدهای اصلی C با استفاده از (Emscripten (http://emscripten.org داخل asm.js کامپایل میشود. این بازی با فریم ریت قابل قبول اجرا میشود و کاملاً قابل بازی کردن است. اما بهعنوان یک نقطه ضعف، کدهای C کامپایل شده در asm.js (یا همان جاوا اسکریپت) تقريباً با سرعتی نصف برنامههای معمولی C (به عنوان مثال اجرای مستقیم در لینوکس) اجرا میشوند که برای خیلی از اپلیکیشنهای اجرا شده در مرورگر حائز اهمیت است.
از تقسیم اعداد تا اتصال به یخچال
دوباره یادآوری میکنیم که یکی از مزایای بزرگ «جاوا اسکریپت در همه جا» حذف کردن تمایز بین کدهای سمت کلاینت و سمت سرور است. یک متخصص داده میتواند بعضی از کارهای تحلیلی را روی کلاستر انجام دهد، سپس دادههای میانی را به مرورگر خود منتقل کند و بدون وقفه به کار خود ادامه دهد. بهصورت کاملاً یکپارچه میتوان کدهای سمت کلاینت را بهسمت سرور هدایت و کدهای سمت سرور را نیز میتوان در کلاینت استفاده کرد.
تحت چنین شرایطی خود متخصص داده تصمیم میگیرد که کدام بخش از کوئریهای خود را در کجا اجرا کند. گام منطقی بعدی مربوط به بهینهسازی کوئریگیری است. در واقع محققان به این ایده در همان سال 1990 رسیدگی کردهاند. در برخی موارد جایگذاری عملگرهای کوئری در سمت کلاینت عملکرد بهتری را به همراه دارد و مسلماً فشار کاری سرور را نیز کم میکند. جاوا اسکریپت ایده تقسیم اجرای کوئری بین کلاینت و سرور را مطرح میکند. مزیت بزرگ جاوا اسکریپت در فراگير بودن آن است. هرجا مرورگر وجود داشته باشد، جاوا اسکریپت هم هست.
حالا دیگر روی تلفنها هم مرورگر وجود دارد.
Afterburner را نیز میتوان روی یک گوشی هوشمند اجرا کرد. یک سناریوی محتمل این است که برای دستکاری داده چیزی شبیه به Afterburner را روی یک تبلت اجرا کنیم. فراموش نکنید که ما قبلاً نیز صفحه گستردهها را روی تبلت اجرا کردهایم. اما تفاوت اینها در چیست؟ تصور کنید که یک کار Spark را از داخل مرورگر روی تبلت خود اجرا میکنید تا کمی داده از کلاستر استخراج کنید. حالا بعد از سوار شدن به هواپيما بهصورت کاملاً آفلاین کار روی این دادهها را ادامه میدهید. اگر تا اینجا سناریوی جاوا اسکریپت در همه کجا را پذیرفته باشید، این دیدگاه را درباره آینده اینترنت اشیا نیز میتوان تصور کرد. برای مثال سری به Node-RED (http://nodered. org) بزنید. در آیندهای نه چندان دور تصور کنید به خانه هوشمند پر از لوازم متصل به شبکه خود برمیگردید و از خود میپرسید «چرا طبقه دوم اینقدر گرم است؟» و کوئری زیر را داخل مرورگر کنسول یخچال خود وارد میکنید:
SELECT room, temp FROM sensors
WHERE floor = 2 and time = NOW;
این کوئری به تمام حسگرهای موجود در خانه فرستاده میشود و نتایج جمعآوری شده دوباره به یخچال شما برمیگردد و بهعنوان یک نقشه گرمایش بررسی میشود. جالب اینجا است که همه این مراحل توسط جاوا اسکریپت انجام خواهد شد. تعجب نکنید، همین حالا چیزی شبیه به این با عنوان شبکه حسگرهای توزیع شده با نام TinyDB تولید و مستقر شده است. تنها تفاوت در اینجا این است که ما پیشنهاد دادیم تا همه کارها توسط جاوا اسکریپت انجام شود. مثال دیگری را در نظر بگیرید: شما در فروشگاه هستید و نمیدانید که آیا باید شیر هم بخرید یا نه. تلفن خود را از جیب درمیآورید و از یخچالتان میپرسید:
SELECT COUNT(*) FROM fridge
WHERE item = “milk”;
مسلماً این کوئری SQL در پشت یک رابط گرافیکی کاربرپسند در یک اپلیکیشن پنهان میشود، اما در پشت صحنه این جاوا اسکریپت است که کارها را انجام میدهد.
یک مزیت بزرگ دیدگاه «جاوا اسکریپت در همه جا» این است که با از بین رفتن تفاوت بین کدهای سمت کلاینت و سرور ما به طور بالقوه میتوانیم پیچیدگیهای ساخت راهکارهای توزیع شده را کاهش دهیم که به از بین بردن خطرات متمرکز نبودن داده کمک میکند. به بیان دیگر، جاوا اسکریپت میتواند به تمرکز دوباره وب کمک کند
در واقع چنین دیدگاهی از اینترنت اشیا تنها یکی از مزایای قابل توجه این رویکرد است. این روزها تقریباً تمام گجتهای اینترنت اشیا، از جمله ردیابهای تناسب اندام شخصی تمام دادههای جمعآوری شده را به کلاود ارسال میکنند و بعد کاربر با استفاده از یک رابط (یا API) به دادههای خود دسترسی پیدا میکند. در چنین شرایطی مسلماً شرکتهای ارائهکننده این خدمات نیز میتوانند هر زمان که مایل باشند این دادهها را تغییر دهند و بهعبارتی کنترل تمام دادههای شخصی شما را در دست داشته باشند. چنین چیزی چقدر میتواند وحشتناك باشد؟ تلویزیونهای هوشمند سامسونگ به یک سیستم تشخیص صوت مجهز هستند که به شما اجازه میدهد از فرامین صوتی برای کنترل تلویزیون استفاده کنید. هرچند چنین قابلیتی خوشایند به نظر میرسد، اما عواقب امنیتی آن را نیز نباید نادیده گرفت.
یک مزیت بزرگ دیدگاه «جاوا اسکریپت در همه جا» این است که با از بین رفتن تفاوت بین کدهای سمت کلاینت و سرور ما به طور بالقوه میتوانیم پیچیدگیهای ساخت راهکارهای توزیع شده را کاهش دهیم که به از بین بردن خطرات متمرکز نبودن داده کمک میکند. به بیان دیگر، جاوا اسکریپت میتواند به تمرکز دوباره وب کمک کند. از خیلی از جهات جاوا اسکریپت شبیه کوتولههای عصر میانی فیلم ارباب حلقهها است: هر دو به کند بودن، بیکفایتی و ضعف محکوم بودند. اما با وجود این دوستداشتنی هم هستند (یادگیری جاوا اسکریپت راحت است)، آنها در محدودهای کوچک و در اقامتگاههای دوستداشتنی خود به دور از خطر (تجسمات D3.js)، در یک محدوده متمرکز (سطح زیرین یا سرور) زندگی میکنند. اما وقتی مورد آزمايش قرار گرفتند (Node.js) ثابت کردند که ارزش بالایی دارند. اما برخلاف پایان نافرجام در فیلم، آینده درخشانی در انتظار جاوا اسکریپت است.
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟