این مطلب یکی از مقالات پرونده ویژه«جاوااسکریپت آینده است» شماره ۱۹۸ ماهنامه شبکه است. علاقه‌مندان می‌توانند کل این پرونده ویژه را از روی سایت شبکه دانلود کنند.


تاریخچه‎ای مختصر از جاوا اسکریپت 

در اواسط سال ۱۹۹۰، شرکت سان میکروسیستمز (که در سال ۲۰۱۰ به مالکیت اوراکل درآمد) با شعار فریبنده «یک بار بنویس، همه جا اجرا کن» پا به میدان گذاشت تا جاوا را برای توسعه در سکو‎های مختلف معرفی کند. در روزهای نخستين وب، یکی از ویژگی‎های برجسته جاوا این بود که می‎توانست از طریق اپلت‎ها داخل مرورگر اجرا شود. چنین ایده‎ای به نظر عالی می‎رسید به‌استثنای اینکه در واقع کاری که باید را انجام نمی‎داد. اپلت‎های جاوا ضعیف، کند و ناامن بودند. هرچند درنهایت جاوا وظیفه خود را درست انجام داد. به‌لطف هادوپ، اسپارک، Flink و سایر سکو‎های داده‎های بزرگ، ماشین مجازی جاوا (JVM) به یک محیط اجرایی کامل برای اپلیکیشن‎های داده‎های بزرگ تبدیل شده است. از طرف دیگر جاوا از طریق اندروید روی بیش از یک میلیارد دستگاه در حال اجرا است.
اما جاوا اسکریپت صرف نظر از شباهت اسمی‎ (هرچند کمک بزرگی به معروفیت آن کرد) هیچ ارتباطی با جاوا ندارد. این زبان اسکریپت‎نویسی در اصل به‌عفاکتورین یک مفسر زبان سبک داخل مرورگر برای برنامه‌نویسان غیرحرفه‎ای طراحی شده بود، اما طی سال‎ها به یک زبان برتر برای توسعه وب تبدیل شد. در واقع امروز توسعه سمت کلاینت با HTML, CSS و جاوا اسکریپت مترادف شده است. در ابتدا جاوا اسکریپت به تغییرات ظاهری صفحات در مرورگر مثل رنگ پس‌زمینه و ظاهر دکمه‎ها محدود بود، اما امروز اپلیکیشن‎های وب نوشته شده با جاوا اسکریپت تجربه‎ای شبیه به اپلیکیشن‎های دسکتاپ را برای کاربر فراهم می‎کند. برای نمونه در جی‎میل بیش از ۴۰۰،۰۰۰ خط کد جاوا اسکریپت به کار گرفته شده است. در سمت کلاینت، جاوا اسکریپت خیلی بیشتر به شعار «یک بار بنویس، همه جا اجرا کن» جاوا نزدیک شده است. تقريباً می‎توان گفت اپلیکیشن‎های وب جاوا اسکریپت همیشه و در هر شرایطی کار می‎کنند. روی تراشه Intel یا ARM، تقريباً تمام سیستم عامل‎ها و اغلب مرورگرها می‎توان کدهای جاوا اسکریپت را اجرا کرد.

مطلب پیشنهادی

دانلود کنید: پرونده ویژه " جاوااسکریپت آینده است"

تاخت و تاز جاوا اسکریپت در سرورها

برای مدتی ما در یک جهان دوقطبی پایدار زندگی می‎کردیم. جاوا اسکریپت در مرورگر و سمت کلاینت حضور داشت و جاوا موقعیت برتر خود در سمت سرور را حفظ کرد. REST API نیز بین سرور و کلاینت نقش سکوی زبان میانجی را بازی می‎کند. تا اینجا همه چیز خوب بود تا اینکه بعضی از توسعه‎دهندگان با این پرسش که «چه می‎شود اگر ما جاوا اسکریپت را هم در سرور اجرا کنیم؟» این توازن را برهم زدند. ایده جاوا اسکریپت سمت سرور از همان ابتدا مطرح بود، اما تا اواسط سال ۲۰۰۰ جدی گرفته نشد. با ظهور موتور جاوا اسکریپت منبع باز V8 گوگل (https://developers.google. com/v8/) راه برای جاوا اسکریپت سمت سرور مهیا شد. با محیط اجرایی منبع باز معروف Node.js تمام ویژگی‎های مورد نیاز برای جاوا اسکریپت سمت سرور نیز فراهم شد. نمونه‎های موفقی از تغییر جهت به‌سمت Node.js وجود دارد. بخش موبایل لینکداین از Ruby on Rails به اجرای Node.js تغییر کرد و توانست ۳۰ سرور خود را به ۳ سرور (با ترافیک یکسان) کاهش دهد. 
اوبر، نتفلکیس، پی‎پال و خیلی‎های دیگر حالا کاربران بزرگ Node.js هستند.

جاوا اسکریپت و بزرگ داده‎ها 

تا اینجا ما درباره راه‌اندازی اپلیکیشن‎های کاربرپسند با استفاده از جاوا اسکریپت در هر دو سمت سرور و کلاینت صحبت کردیم. در ادامه قصد داریم به دلایل سازگاری جاوا اسکریپت با اپلیکیشن‎های داده‎های بزرگ در هر دو سمت کلاینت و سرور بپردازیم. در مقايسه با اپلیکیشن‎های کاربردی و کاربرپسند، اپلیکیشن‎های داده بزرگ کاربردهای داخلی داشته و اغلب توسط متخصصان داده در سازمان‌ها استفاده می‎شوند. به بیان واضح‎تر، وقتی صحبت از سمت کلاینت یا سطح رویی (front end) ارتباط می‎شود منظور ابزاری است که متخصصان داده از آن استفاده می‎کنند تا به قابلیت‎های تحلیلی در حجم عظیمی‎ از مجموعه داده‎ها دسترسی پیدا کنند و سمت سرور یا سطح زیرین (back end) ارتباط به‌معنای زیرساخت‎های پردازش توزیع شده (برای مثال، هادوپ و اسپارک) است که این نوع از قابلیت‎ها را ممکن می‎کند.

ممکن است مرورگر نیز به یک سکوی اصلی برای تجزیه و تحلیل داده تبدیل شود و نباید فراموش کرد که جاوا اسکریپت نیز در قلب مرورگر جای دارد

اما سطح رویی برای متخصصان داده شامل چه چیزهایی است؟ طی سال‎های اخیر نوت‌بوک‎های مبتنی بر مرورگر (مثل Jupyter) توسط متخصصان داده محبوبیت فوق‌العاده‎ای به دست آورده‎اند. بنا به دلایل گوناگونی از جمله یکپارچه‌سازی کد و افزایش راندمان خروجی فرآیند تحلیل داده به دلیل این‌که خود نوت‌بوک را می‎توان به‌صورت سریالی درآورد، دوباره بارگذاری کرد و به اشتراک گذاشت نوت‌بوک‎ها محبوب هستند. توانایی دستکاری، تنظیم مجدد و تکه کردن کد (در سلول‎ها) با توجه به ماهیت تکراری علم داده‎ها و طیف گسترده‎ای از وظایف تجزیه و تحلیل توسط یکپارچه‌سازی نوت‌بوک‎های مبتنی بر مرورگر و سکو‎های تجزیه و تحلیل داده گسترش‌پذیر، کدهای نوشته شده در یک نوت‌بوک تحت مرورگر را می‎توان روی یک کلاستر اجرا کرد و برای کارهای بعدی نتایج را روی نوت‌بوک دستکاری کرد. سکو‎های تجاری Databrick نشان‌دهنده آن هستند که تحیلگرهای تحت وب داده‎های بزرگ آینده را در دست خواهند گرفت.

مطلب پیشنهادی

10 ویژگی جدید و جذاب جاوااسکریپت برای عاشقان وب

تکنیک‌های کاربردی ES6

این به این معنا است که ممکن است مرورگر نیز به یک سکوی اصلی برای تجزیه و تحلیل داده تبدیل شود و نباید فراموش کرد که جاوا اسکریپت نیز در قلب مرورگر جای دارد. علاوه بر این، محصولات نهایی علم داده اغلب تجسمی‎ از یک سناریو هستند. در خیلی از موارد آن‌ها تعاملی بوده به متخصصان داده این امکان را می‎دهند تا درک بهتری از داده‎ها به دست آورند. به بیان دیگر، خروجی علم داده یک اپلیکیشن وب سفارشی‌سازی شده است که نتایج تحلیلی را در یک مکان جمع‌آوری می‎کند. یکی از این ابزارهای تجسمی (‎ 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 (به عفاکتورین مثال اجرای مستقیم در لینوکس) اجرا می‎شوند که برای خیلی از اپلیکیشن‎های اجرا شده در مرورگر حائز اهمیت است.

مطلب پیشنهادی

راهنمای جامع چهارچوب‌های برتر Node.js

ویژه طرف‌داران جاوااسکریپت و طراحان وب

از تقسیم اعداد تا اتصال به یخچال 

دوباره یادآوری می‎کنیم که یکی از مزایای بزرگ «جاوا اسکریپت در همه جا» حذف کردن تمایز بین کدهای سمت کلاینت و سمت سرور است. یک متخصص داده می‎تواند بعضی از کارهای تحلیلی را روی کلاستر انجام دهد، سپس داده‎های میانی را به مرورگر خود منتقل کند و بدون وقفه به کار خود ادامه دهد. به‌صورت کاملاً یکپارچه می‎توان کدهای سمت کلاینت را به‌سمت سرور هدایت و کدهای سمت سرور را نیز می‎توان در کلاینت استفاده کرد.
تحت چنین شرایطی خود متخصص داده تصمیم می‎گیرد که کدام بخش از کوئری‎های خود را در کجا اجرا کند. گام منطقی بعدی مربوط به بهینه‌سازی کوئری‌گیری است. در واقع محققان به این ایده در همان سال ۱۹۹۰ رسیدگی کرده‎اند. در برخی موارد جایگذاری عملگرهای کوئری در سمت کلاینت عملکرد بهتری را به همراه دارد و مسلماً فشار کاری سرور را نیز کم می‎کند. جاوا اسکریپت ایده تقسیم اجرای کوئری بین کلاینت و سرور را مطرح می‎کند. مزیت بزرگ جاوا اسکریپت در فراگير بودن آن است. هرجا مرورگر وجود داشته باشد، جاوا اسکریپت هم هست.

مطلب پیشنهادی

این 15 زبان برنامه‌نویسی از سوی کدنویسان روی گیت‌هاب به کار گرفته می‌شود

زبان‌های برنامه‌نویسی محبوب از نگاه گیت‌هاب

 حالا دیگر روی تلفن‎ها هم مرورگر وجود دارد.
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) ثابت کردند که ارزش بالایی دارند. اما برخلاف پایان نافرجام در فیلم، آینده درخشانی در انتظار جاوا اسکریپت است.