عناوین
سرآغاز معروفیت جاوا اسکریپت
جاوا اسکریپت اولین بار در ماه می ۱۹۹۵ توسط نتاسکیپ بهعنوان یک زبان اسکریپتنویسی تکرشتهای معرفی شد تا کمک حال مرورگر آنها باشد. معروفیت این زبان اسکریپتنویسی طی ۵ سال اخیر بهواسطه چند عامل توسعه کلیدی صورت گرفته است. نمودار شکل ۱ دادههای جمعآوری شده توسط ردمونک را نشان میدهد که در آن جاوا اسکریپت به نسبت سایر زبانهای مطرح و برجسته از محبوبیت بیشتری برخوردار بوده است. ابزار بهتر، پشتیبانی و پیشرفت بیشتر در این زبان سبب شد تا بهآهستگی موقعیت خود را بهعنوان یک بازیگر شاخص در صنعت توسعه نرمافزار مستحکم کند. برای نمونه در نمودار شکل ۲ که توسط Githut ایجاد شده است، وضعیت حضور زبانهای برنامهنویسی در پروژههای منبع باز را نشان میدهد.
شکل ۱
وقتی مرورگر و سرور اطلاعات یکسانی را ذخیره میکنند، ناخودآگاه مشکل دوبارهنویسی پیش میآید که اغلب ناشی از استفاده از زبانهای مختلف در سیستمهای توزیع شده است. تنها راه حل این مشکل این است که در هر دو سمت از کدهای مشترک استفاده کنید. اما چنین امکانی وجود ندارد، زیرا ما آنها را با زبانهای مختلف نوشتهایم و جاوا اسکریپت تنها زبان قابل فهم توسط مرورگر است.
دلایل استفاده از جاوا اسکریپت
دلیل نخست:
برای معماریهای توزیعپذیر مناسبتر است
یکی از بزرگترین مشکلات در زمان نوشتن یک نرمافزار، ضرورت نیاز به دوبارهنویسی آن است. بهمحض اینکه دوبارهنویسی اتفاق میافتد، بلافاصله هزینههای توسعه نیز افزایش پیدا میکند، زیرا هر تغییری که در نسخه اصلی صورت میگیرد باید دو بار انجام شود. متأسفانه با فراگیر شدن معماریهای توزیعپذیر (برای مثال، اپلیکیشنهای یکصفحهای و میکروسرویسها) این دوبارهنویسیها شایعتر شده است و همین باعث پیچیدهتر شدن و سخت شدن نگهداری اپلیکیشنها میشود. برای مثال، اجازه دهید نگاهی به یک اپلیکیشن تکصفحهای داشته باشیم. در اینجا شما یک رابطه کلاینت سرور دارید. در سمت کلاینت (همان مرورگر) شما نیاز به ذخیره فهرستی از سیاستگذاریهای امنیتی در برابر برخی از موارد پیش رو دارید. این سیاستگذاریهای امنیتی بسیار حیاتی هستند. آنها ممکن است شامل مواردی باشند که هم قابل پاک شدن و هم بهروزرسانی هستند. آنها به این دلیل مهم هستند که شما نمیخواهید کارهایی که انجامناپذیر هستند توسط کاربران قابل مشاهده باشد. مشکل اینجا است که شما باید این اطلاعات را روی سرور نیز ذخیره کنید. زیرا اگر شما این سیاستگذاریها را روی سرور نیز اعمال نکرده باشید، هر فردی که کمی با دانش فنی آشنا باشد میتواند درخواستهای جعلی به آن ارسال کند. بنابراین، شما در وضعیتی قرار دارید که یک اپلیکیشن مرورگر نوشته شده با جاوا اسکریپت دارید که سمت انتهایی (سرور) آن با چیزی شبیه جاوا نوشته شده است. در شکل ۳ نموداری را مشاهده میکنید که هم سرور (در بالا) و هم کلاینت (در پایین) اطلاعاتی یکسان را نگهداری میکنند. از آنجا که آنها با دو زبان مختلف نوشته شدهاند، این اطلاعات باید دوبارهنویسی شوند. به سیاستگذاریهای امنیتی قرمز رنگ در هر دو ناحیه توجه کنید.
شکل ۲
یادگیری جاوااسکریپت برای توسعهدهندگان وب از نان شب واجبتر است!
وقتی مرورگر و سرور اطلاعات یکسانی را ذخیره میکنند، ناخودآگاه مشکل دوبارهنویسی پیش میآید که اغلب ناشی از استفاده از زبانهای مختلف در سیستمهای توزیع شده است. تنها راه حل این مشکل این است که در هر دو سمت از کدهای مشترک استفاده کنید. اما چنین امکانی وجود ندارد، زیرا ما آنها را با زبانهای مختلف نوشتهایم و جاوا اسکریپت تنها زبان قابل فهم توسط مرورگر است.
شکل ۳
راه نجات:
جاوا اسکریپت سمت سرور
اکوسیستم جاوا اسکریپت بهسرعت در حال رشد است و این سرعت با ظهور یک ابزار میزبانی سمت سرور بهنام Node.js که تحت موتور Google Chrome v8 اجرا میشود، شتاب بیشتری گرفته است. نود به جاوا اسکریپت اجازه میدهد تا روی یک وب سرور اجرا شود. چنین قابلیتی نهتنها گزینههای طراحی و معماری نرمافزار را افزایش میدهد، بلکه با توجه به ماهیت عملکرد این زبان مشخص شده است که بسیار گسترشپذیر است. خیلی از شرکتهای بزرگ مثل نتفلیکس و والمارت تصمیم گرفتند بهجای استفاده از گزینههای معمول سمت سرور مثل رابی، پیاچپی، سی شارپ، جاوا وغیره معماریهای پایه خود را با نود انجام دهند. با در اختیار داشتن گزینه استفاده از جاوا اسکریپت در هر دو سمت معماری نرمافزار شما میتوانید سیستمهای توزیعپذیری را توسعه دهید که میتوانند از ماژولهای مشترک استفاده کنند. در شکل ۴ نمودار قبلی گسترده شده است و نشان میدهد این سیاستگذاریها (قرمز رنگ) حالا در یک مکان واحد تثبیت شدهاند. استفاده از جاوا اسکریپت سمت سرور همچنین به طراحی میکروسرویسها نیز کمک میکند، زیرا همان تکنیک یکسان را میتوان برای ساخت میکروسرویسهایی که از کدهای مشترک استفاده میکنند به کار گرفت.
شکل ۴
دلیل دوم:
برای استفاده در سکوهای مختلف بسیار کارآمد است
امروزه طرح تحول دیجیتال در بین سکوهای مختلف به یک موضوع مهم تبدیل شده است. حالا دیگر برنامهنویس باید بتواند یک بار کدنویسی و اپلیکیشن خود را در هر محیطی مستقر کند. جاوا اسکریپت بهآرامی در حال سازگار شدن با خیلی از سکوها است. حتی در سال ۲۰۰۷ جف آتوود در یک پست وبلاگی معروف اعلام کرده بود که جاوا اسکریپت درنهایت به هر اپلیکیشنی که به آن اجازه دهد وارد خواهد شد. او گفته بود: «هر اپلیکیشنی را که بتوان با جاوا اسکریپت نوشت، سرانجام با جاوا اسکریپت نوشته خواهد شد.»
جاوا اسکریپت در حال تبدیل شدن به یک ابزار کامل است و از سه ناحیه عمده مورد علاقه توسعهدهندگان یعنی وب، دسکتاپ و موبایل پشتیبانی میکند. در ادامه نگاهی اجمالی به تنها چند نمونه از فریمورکهایی که از جاوا اسکریپت بهعنوان یک زبان چندسکویی قدرت میگیرند خواهیم داشت. سکو موبایل (IOS و آندروید) – React Native و NativeScript دو نمونه از فریمورکهای اصلی هستند که اجازه میدهند کدهای جاوا اسکریپت روی موبایل اجرا شود. React توسط فیسبوک برای سکوی موبایل استفاده میشد. سکوی دسکتاپ (مک و ویندوز) – NW.js و Electron به توسعهدهندگان اجازه میدهد تا مجموعهای از ابزارهای مورد نیاز برای اپلیکیشنهای وب تحت سکوی دسکتاپ را در اختیار داشته باشند.
وب (تمام مرورگرها) – Angular و Meteor مثالهایی از فریمورکهای اپلیکیشن تکصفحهای هستند که از جاوا اسکریپت استفاده میکنند و به اپلیکیشنهای تجاری پیچیده اجازه میدهد تا داخل مرورگر اجرا شوند.
دلیل سوم:
کاملاً گسترشپذیر است
جالب اینجا است که بزرگترین نقطه ضعف جاوا اسکریپت حالا به یک قدرت چشمگیر برای آن تبدیل شده است. تفاوت اصلی بین جاوا اسکریپت با اغلب زبانهای دیگر مثل Ruby, Java و C# در تکرشتهای بودن آن است. اگر شما توسعهدهنده نباشید، این مسئله چندان اهمیتی برای شما ندارد. به همین دلیل ما سعی میکنیم تنها به توضیح مختصری درباره آن بسنده کنیم.
اغلب زبانها قابلیتی دارند که به آنها اجازه میدهد تا بیش از یک مورد از خود را اجرا کنند. آنها دستورالعملها را در یک فهرست بلند از کارهایی که باید انجام شود قرار میدهند. سپس در فرآیند پردازشی این دستورالعملها یک به یک اجرا میشوند. به چنین ساختاری فرآیند چندرشتهای گفته میشود و برنامهنویس در هنگام کدنویسی میتواند از مزایای این قابلیت استفاده کند. از جمله قابلیتهای چندرشته بودن میتوان به نوشتن وب سرورهایی که نیاز به پردازش همزمان تعداد بسیار زیادی کاربر دارند اشاره کرد.
اما چنین امکانی معایب خاص خود را هم دارد: تمام این جابهجایی بین پردازشها بهدلیل نیاز به ورود و خروج مداوم دستورالعملها و وظایف به حافظه زمان پردازنده را هدر میدهد.
جاوا اسکریپت ذاتاً یک ساختار تکرشتهای دارد. به این معنا که برنامهنویس امکان بهرهمندی از قابلیت پردازش چندرشتهای را از دست میدهد و تمام کدهای جاوا اسکریپت در یک رشته اجرا میشوند.
از آنجا که چنین ساختاری طراحان سیستم را محدود میکند، آنها باید کدها را بهگونهای بنویسند که فرآیند پردازش را مختل نکند. نام این راهکار معماری non-blocking است. چنین ساختاری کار را برای برنامهنویس مشکلتر میکند، زیرا آنها باید کدهایی را بنویسند که بهجای دستورات خطی با رویدادها سر و کار دارد. نتیجه کار این گونه خواهد شد که برنامهنویس بهجای محیطهای چندرشتهای که منابع در آن در یک صف پردازش قرار میگیرند، کدهایی را مینویسد که بلافاصله منابع را آزاد و از مسدود شدن رشته توسط جاوا اسکریپت جلوگیری میکند.
این کار باعث افزایش قابل توجه عملکرد اپلیکیشنهایی که پردازشهای سنگین را اجرا میکنند میشود و آن را برای محیط وب ایدهآل میکند. این بار نیز چنین شیوهای با معایبی همراه است. به همین دلیل است که جاوا اسکریپت در انجام درخواستهایی که نیاز به نگه داشتن پردازنده برای انجام وظایف طولانی مدت دارند خوب نیست. (برای مثال نوشتن دادههای استریم شده طولانی روی دیسک یا پردازش گرافیک لحظهای از قبیل بازیهای آنلاین)
ماهیت تکرشتهای جاوا اسکریپت شیوهای از طراحی نرمافزار را فراهم میکند که درنهایت باعث افزایش عملکرد و گسترشپذیری خیلی از پروژههای نرمافزاری و خدمات تحت وب خواهد شد. چنین قابلیتی جاوا اسکریپت را به یک ابزار قدرتمند برای استفاده در سازمانهایی که به گسترش ترافیک خود با حداقل قیمت را دارند، تبدیل کرده است
نتیجهگیری
در این مقاله ما نگاهی به جاوا اسکریپت و سه قابلیت جالب توجه در آن داشتیم. همین قابلیتها بودند که این زبان برنامهنویسی را تا این اندازه معروف و محبوب کرده است. این ویژگیها را میتوان این گونه خلاصه کرد.
جاوا اسکریپت سمت سرور: میتوان آن را با استفاده از Node.js روی سرور اجرا کرد و امکان یکپارچهسازی اپلیکیشنها را بهشکل یک کد واحد فراهم ساخت. این کار پیچیده شدن اپلیکیشنهای بزرگ را کم میکند. طراحی و معماریهای پیچیده با این روش بهتر قابل انجام است، زیرا دیگر مشکل دوبارهنویسی کدها را نخواهیم داشت.
پشتیبانی ذاتی از چند سکو: با پیشرفت این زبان حالا امکان پشتیبانی از سکوهای IOS، آندروید و حتی محیط دسکتاپ ویندوز و مک نیز فراهم شده است و حالا برنامهنویسان میتوانند محدودیتهای سازگاری برنامههای خود را کمتر کنند.
گسترشپذیری در محیطهای پرتراکم و سنگین: ماهیت تکرشتهای جاوا اسکریپت شیوهای از طراحی نرمافزار را فراهم میکند که درنهایت باعث افزایش عملکرد و گسترشپذیری خیلی از پروژههای نرمافزاری و خدمات تحت وب خواهد شد. چنین قابلیتی جاوا اسکریپت را به یک ابزار قدرتمند برای استفاده در سازمانهایی که به گسترش ترافیک خود با حداقل قیمت را دارند، تبدیل کرده است.