چرا جاوا اسکریپت مناسبترین گزینه برای اینترنت اشیا است؟
سه شنبه 24 بهمن 1396 4:04 PM
در این مقاله به طور مختصر به شما خواهیم گفت چرا جاوا اسکریپت این پتانسیل را دارد تا در اکوسیستم اینترنت اشیا حضور درخشانی داشته باشد.
اینترنت اشیا از مؤلفههای مختلف بسیاری پدید آمده است. اشیایی که به صورت یکپارچه با یکدیگر کار میکنند تا به کاربران خدمترسانی کنند. نرمافزارها، سختافزارها و راه حلهای میانافزاری همگی در تعامل با یکدیگر اکوسیستم اینترنت اشیا را به حرکت درمیآورند. اما در این میان نباید از مقوله برنامهنویسی اینترنت اشیا غافل شویم. تمامی اشیایی که در اکوسیستم اینترنت اشیا به کار گرفته میشوند، بهشکلی مستقیم یا غیرمستقیم وامدار زبانهای برنامهنویسی هستند. در حالی که نگاه اکثر برنامهنویسان در زمان ساخت برنامههای کاربردی برای گجتهای اینترنت اشیا بهسمت زبانهای بزرگی همچون سی پلاس پلاس یا پایتون دوخته شده است، اما به نظر میرسد در این میان جاوا اسکریپت حرفهای بسیاری برای گفتن دارد. جاوا اسکریپت یکی از برترین زبانهای اسکریپتنویسی است که برای ساخت هر دو گروه برنامههای تحت وب و دستگاههای موبایلی مورد استفاده قرار میگیرد. اما جاوا اسکریپت این پتانسیل را دارد تا به بهترین شکل به اکوسیستم اینترنت اشیا کمک و برنامههای اینترنت اشیای قدرتمندی را خلق کند.
جاوا اسکریپت در طول این سالها ثابت کرده است که در دنیای برنامهنویسی وب و در هر دو بخش کلاینت و سرور توانمند است. اما چرا جاوا اسکریپت این پتانسیل را دارد در صنعت اینترنت اشیا به کار گرفته شود؟ جاوا اسکریپت یک زبان برنامهنویسی سطح بالای پویا، تفسیر شده و نوعگذاری نشده (untyped) است. HTML ،CSS و جاوا اسکریپت سه فناوری مرکزی و زیرساختی وب هستند. اکثر سایتها از آن استفاده میکنند و تمام مرورگرها بدون آنکه به افزونهای نیاز داشته باشند، از آن پشتیبانی میکنند. جاوا اسکریپت چهارچوبهای مختلفی همچون آنگولار جیاس، آنگولار 2 و ReactJS را دارد. این چهارچوبها بهمنظور ساخت برنامههای ترکیبی موبایلی برای سکوهای مختلفی همچون اندروید، ویندوز و iOS مورد استفاده قرار میگیرند. آنگولار جیاس یک چهارچوب وب است که طراحان برای ساخت برنامههای تک صفحهای از آن استفاده میکنند. جاوا اسکریپت با چهارچوب Apache Cordova بهمنظور ساخت برنامههای موبایلی چندسکویی مورد استفاده قرار میگیرد. برنامههایی که از یک رابط کاربری کاملاً دوستانه استفاده میکنند و به سادهترین شکل قابل استفاده هستند. جاوا اسکریپت در ارتباط با توسعه برنامههای web Bluetooth نیز بهشکل گستردهای مورد استفاده قرار میگیرد. Node.js یک محیط متن باز جاوا اسکریپت است که بهمنظور طراحی انواع مختلفی از ابزارها و برنامههای سمت سرور مورد استفاده قرار میگیرد. Node.js به طراحان اجازه میدهد با استفاده از جاوا اسکریپت ابزارهای شبکه و وب سرورها را ایجاد کنند. برنامههای Node.js روی سکوهای ویندوز، لینوکس و مک OS قابل اجرا هستند. اما تعاملی بودن جاوا اسکریپت به این زبان اجازه داده است تا از دستگاههای فیزیکی و سکوهای اینترنت اشیا پشتیبانی کند.
کل صنعت اینترنت اشیا حول یک مفهوم ساده در حال حرکت است. ما بهدنبال آن هستیم تا طیف وسیعی از دستگاههای جدید را به اینترنت متصل کنیم، به طوری که این دستگاهها بتوانند با سرورها و دستگاههایی که در سراسر جهان مستقر شدهاند ارتباط برقرار کنند. در حالی که ما هنوز بهدرستی نمیدانیم موج بزرگ بعدی دستگاههای اینترنت اشیایی که جهان ما را دستخوش تغییرات اساسی قرار خواهند داد چگونه هستند؟ (تقریباً این ماهیت طبیعی فناوری است که از این موضوع اطلاعی نداشته باشیم.) اما تقریباً از یک موضوع اطمینان خاطر داریم که سنگ بنای فناوریهای احتمالی آینده وب خواهد بود؛ واسطهای برنامهنویسی تحت وب ستونهایی هستند که دستگاههای آینده روی آنها قرار خواهند گرفت و به اینترنت متصل خواهند شد. فناوریهایی که امیدوار هستیم گرهای از مشکلات جوامع باز کنند. اما این تعریف ما را به یک پرسش چالشیتر هدایت میکند. در حال حاضر کدامیک از زبانهای برنامهنویسی میتوانند به صفحات وب و برنامههای کاربردی کمک کنند تا با یکدیگر صحبت کنند؟ جواب این پرسش جاوا اسکریپت است. کاملاً منطقی است بهدنبال توسعه یک سکوی استاندارد برای اینترنت اشیا باشیم. این سکو باید دو خصیصه مهم داشته باشد. اول آنکه بتواند به طیف بسیار گستردهای از دستگاهها اجازه دهد با یکدیگر ارتباط برقرار کنند و دوم آنکه به همه دستگاهها اجازه دهد با زبان واحدی با یکدیگر صحبت کنند.
توانایی جاوا اسکریپت در هر بخشی عظیم است. زمانی که در نظر دارید شبکهای از دستگاهها را به سرور خود متصل کنید، برای آنکه با دشواریهای متعددی روبهرو نشوید، سعی میکنید آنها را بهگونهای پیکربندی کنید که همه آنها با زبان واحدی با یکدیگر صحبت کنند. حال تصور کنید طیف بسیار گستردهای از دستگاههای مختلف متصل به شبکه را در اختیار دارید که همه آنها قادر هستند جاوا اسکریپت را درک کنند. شما نیز سروری را آماده کردهاید که Node.Js روی آن اجرا میشود. در این حالت برای آنکه پیچیدگیها را به حداقل برسانید و بتوانید توابعی را به اشتراک قرار دهید که عملکردهای مشابهی را روی دستگاههای مختلف به اشتراک میگذارند، چه گزینهای بهتر از جاوا اسکریپت در اختیارتان قرار دارد؟ با استفاده از جاوا اسکریپت ضمن آنکه بهکارگیری مجدد توابع کار سهلالوصولی خواهد بود، به همان شکل دستگاهها نیز سادهتر با یکدیگر در ارتباط خواهند بود. به عبارت دیگر، یک بار طراحی کنید و بارها از آن استفاده کنید.
جاوا اسکریپت مجموعهای بسیار عظیم از کتابخانهها، افزونهها و واسطهای برنامهنویسی در اختیار دارد. مجموعهای عظیم که بعضی از آنها بدون تغییر و بعضی دیگر با حداقل تغییرات ممکن در اکوسیستم اینترنت اشیا قابل استفاده هستند. در حالی که افزونههای جیکوئری قدیمی را در اکثر کدهای سمت غیرکلاینت نمیتوان دو مرتبه استفاده کرد، اما در نقطه مقابل ماژولهای nmp جاوا اسکریپت در حال تکامل هستند. ماژولهایی با قابلیت استفاده مجدد که بسیاری از آنها راه حلهای خوبی در سمت سرور، کلاینت و فراتر از آن را ارائه میکنند. برنامهنویسان فعال در حوزه اینترنت اشیا بهراحتی میتوانند از کتابخانههای کاربردی جاوا اسکریپت همچون Underscore.js، loadash، traverse و Async در طیف گستردهای از دستگاههای مختلفی که دارای یکسری نقاط مشترک هستند استفاده کنند. یکسری توابع بسیار قدرتمند درون این ماژولها وجود دارد که برای پروژههای اینترنت اشیا کاملاً کاربردی هستند. Socket.io مثال خوب دیگری از یک ماژول قدرتمند جاوا اسکریپت است که برای اینترنت اشیا کاملاً ایدهآل است. ماژولی که میتواند یک ارتباط رویدادمحور بیدرنگ را برای برقراری ارتباط چند دستگاه ایجاد کند. بهجای آنکه برای انجام یکسری کارهای پایه و زیربنایی به ساخت انواع مختلفی از کتابخانهها و افزونهها نیاز داشته باشیم، میتوانیم از راه حلهای موجود استفاده کنیم و آنها را برای تطابق بیشتر با اهداف خود توسعه دهیم. رویکردی که به ما کمک میکند درگیر مباحثی همچون بهینهسازی کدها از پایه و برطرف کردن اشکالات اولیه نشویم.
جاوا اسکریپت در زمینه ساخت برنامههای رویدادمحور سابقه خوبی دارد. برنامههای رویدادمحور نوع خاصی از برنامهها هستند که به انتظار مینشینند تا دستگاهی رویدادی را تولید کند و در ادامه به آن پاسخ دهند. این برنامهها قادر هستند به رویدادهای مختلفی که از سوی دستگاهها اجرا میشود بهخوبی پاسخ دهند. Socket.io در این زمینه عالی عمل میکند. Node حلقهای از رویدادها را در اختیار دارد. Node به ما اجازه میدهد یکسری از وظایف را بهگونهای اجرا کنیم که برای کامل شدن آنها در یک صف به انتظار ننشینیم. به عبارت دقیقتر با استفاده از Node میتوانیم وظایف مختلف را به گونهای اجرا کنیم که هریک بدون آنکه در انتظار پایان یافتن وظیفه دیگری باشند اجرا شوند. ما میتوانیم رویدادها را دریافت کنیم و به آنها پاسخ دهیم. در ادامه از طریق یک روال بازگشتی به انتظار بنشینیم تا یک رویداد به ما اعلام دارد فرآیند اجرای آن تکمیل شده است. این به معنای آن است که ما میتوانیم به رویدادها بهمحض آنکه اتفاق میافتند پاسخ دهیم و همزمان به مدیریت وظایف زیادی بپردازیم که در حال وارد شدن هستند. دستگاههای متعدد نیز میتوانند به رخدادهای مشابه پاسخ دهند. این رویکرد بهسادگی در اینترنت اشیا کار میکند.
برای درک بهتر یک اکوسیستم رویدادمحور مورد استفاده در اینترنت اشیا اجازه دهید سناریویی را مورد بررسی قرار دهیم. بیایید تصور کنیم که شما یک خانه متصل به اینترنت را تحویل گرفتهاید که یک هاب هوشمند در آن قرار دارد و یکی از وظایف آن پر کردن آب درون یک وان هوشمند زمانی است که در خارج از خانه هستید. شما از طریق گوشی هوشمند خود پیامی را در این خصوص ارسال میکنید و در ادامه هر 5 دقیقه یک بار سیگنالهایی را از خانه خود دریافت میکنید. در این زمان وان خانه شما رویدادی را تولید میکند تا به شیرهای آب اجازه دهد به طور خودکار باز شوند و آن را پر کنند. شما متوجه میشوید که آخرین بخش سریال مورد علاقهتان قرار است پخش شود، یک برنامه کاربردی را روی گوشی هوشمند خود باز میکنید و گزینه دانلود و پخش آخرین قسمت سریال را روی آن انتخاب میکنید. به گونهای که برنامه کاربردی این درخواست را برای تلویزیون بزرگی که در حمام خانه نصب شده و از طرفی به وان حمام نیز متصل است به نمایش درآورد. وان حمام این رویداد را دریافت و شروع به جستوجوی اپیزودهایی میکند که برای شما به نمایش درآورد. در این زمان ناگهان متوجه میشوید که فراموش کردهاید شیر بخرید. مجبور هستید بهسمت نزدیکترین سوپر مارکت بروید. در این زمان گوشی شما تغییر جهت را تشخیص میدهد و پیامی را برای خانه ارسال میکند، با این مضمون که شما در نزدیکی خانه قرار ندارید. وان این رویداد را دریافت میکند و فرآیند پر شدن با آب را متوقف میکند. در این حالت وان بهجای آنکه صبر کند تا آخرین سریال مورد علاقه شما کامل دانلود شود، بهسرعت درخواست بستن شیر آب را صادر میکند. زمانی که در حال بازگشت به خانه هستید، گوشی شما سیگنال دیگری را ارسال میکند. وان متوجه این سیگنال میشود و دو مرتبه فرآیند باز کردن شیر آب را به مرحله اجرا درمیآورد، در حالی که هنوز هم در حال دانلود اپیزود سریال است. شما به خانه وارد میشوید و یک وان داغ آماده را همراه با سریالی که آماده پخش است دریافت میکنید. همان گونه که در این سناریو مشاهده کردید، وان آب صبر نکرد تا دانلود یک سریال کامل شود و در ادامه درخواست بستن شیر آب را صادر کند.
همچنین، در زمان پر شدن مخزن زمانی که متوجه شد شما مسیر خود را تغییر دادهاید باز هم صبر نکرد تا مخزن کامل پر شود و سپس به رخداد شما رسیدگی کند. این همان قابلیت قدرتمند برنامهنویسی رویدادمحوری است که جاوا اسکریپت در اختیار اینترنت اشیا قرار میدهد.
هنوز هم تصور غلط رایجی در ارتباط جاوا اسکریپت وجود دارد که اعلام میدارد این زبان برای انجام یکسری از کارها بیش از اندازه شلوغکاری میکند. من با این دیدگاه مخالف هستم. امروزه با استفاده از روشهای مدرن طراحان میتوانند کدهای پایه بسیار تمیزی را بنویسند که نگهداری آنها به سهولت هرچه تمامتر امکانپذیر باشد. جاوا اسکریپت زبانی است که به بلوغ کامل رسیده است و دیگر نباید محدود به ساخت یکسری برنامههای ساده کلاینت باشد. از مدتها پیش ابزارهایی همچون JSHint را در اختیار داشتیم که به ما اطمینان میدادند کدهایی که نوشتهایم با استانداردهای خاص هماهنگی دارند. همچنین چهارچوبهای آزمایش جاوا اسکریپت شبیه به Mocha نیز برای گسترش چنین وظایفی در حوزه اینترنت اشیا در اختیار ما قرار گرفتهاند.
هر زبان برنامهنویسی خصوصیات خاص خود را دارد. در نتیجه کار کردن با زبانهای مختلف روی دستگاههای مختلف مستلزم داشتن اطلاعات کافی درباره آن زبان است. در اغلب موارد شما مجبور هستید دادهها را به قالبهایی تبدیل کنید که در زبانهای برنامهنویسی مورد استفاده قرار میگیرند و بر عکس همین کار را برای ارسال دادهها انجام میدهید. تعدادی از زبانها در زمینه مدیریت، تبدیل و ارسال دادهها بهتر از سایرین عمل میکنند. حال تصور کنید همه دستگاههای شما بتوانند به یک شکل نوعهای دادهای را درک کنند. در این حالت عملاً به یک فرآیند اضافی تبدیل دادهها نیازی نخواهیم داشت، بهواسطه آنکه همه آنها از یک زبان واحد استفاده میکنند.
طراحان جاوا اسکریپت برای آنکه بتوانند از آن استفاده کنند، به محیط توسعه یکپارچه خاص یا سیستم عامل واحدی نیاز ندارند. نیازی نیست برای دسترسی به آن یا انتشار برنامههای خود حق اشتراک سالانه پرداخت کنید.
هیچ شرکت خاصی نیست که یکسری کدهای مخفی یا حالتهای پنهان از دید سایر طراحان را درون آن قرار داده باشد. جاوا اسکریپت یک استاندارد کاملاً باز است که میتواند از طریق انواع مختلفی از موتورهای جاوا اسکریپتی اجرا شود.
مواردی که به آنها اشاره کردیم همگی دست به دست هم دادهاند تا جاوا اسکریپت را به یکی از ایدهآلترین زبانهای برنامهنویسی اکوسیستم اینترنت اشیا تبدیل کنند.
بسیاری از کارشناسان بر این باور هستند که گزینههای مختلفی پیش روی طراحان اینترنت اشیا قرار دارد. اما جاوا اسکریپت یکی از معدود گزینههایی است که با کمترین دردسر در دسترس آنها قرار دارد.
جاوا اسکریپت زبانی است که یادگیری آن برای تازهکاران ساده است، اما در مقابل مهارتهایی آنها را بهسرعت افزایش میدهد. به طوری که در یک بازه زمانی کوتاه طراحان میتوانند یک سیستم گسترشپذیر را بهمعنای واقعی کلمه ایجاد کنند.
انجمنهای جاوا اسکریپت بهسرعت در حال رشد هستند. همه ماژولها و تکنیکهای هیجانبرانگیزی که به دنیای جاوا اسکریپت وارد میشوند همراه با خود انجمنها و گروههای مختلفی را به همراه میآورند که بر روند تکامل آنها تأثیر مثبت میگذارند.
حجم بسیار بالای انجمنهای ساخته شده برای جاوا اسکریپت باعث شده است تا روند ورود جاوا اسکریپت به اینترنت اشیا بهسادگی امکانپذیر باشد. بسیاری از طراحان جاوا اسکریپت جزء برنامهنویسان کهنهکاری هستند که در زمینه ساخت برنامههای جاوا اسکریپت ماژولار متبحر هستند و علاقه وافری به یادگیری دارند.
افرادی که در کوتاهترین زمان قادر هستند برنامههای تعاملی را برای دستگاههای جدید ایجاد کنند. واقعیت این است که فرآیند ورود از مدتها قبل آغاز شده است، تقریباً چند سالی است دستگاههای اینترنت اشیا مبتنی بر جاوا اسکریپت به بازار وارد شدهاند.
این رشد روزافزون به ما اعلام میدارد که در سالهای آتی جاوا اسکریپت به یکی از بازیگران اکوسیستم اینترنت اشیا تبدیل خواهد شد.