وب اسمبلی (WebAssembly) نوع جدیدی از کد است که میتواند در مرورگرهای وب مدرن اجرا شود.. با استفاده از WebAssembly JavaScript API، میتوانید ماژولهای وب اسمبلی را در یک برنامه جاوا اسکریپت بارگذاری کنید و عملکرد را بین این دو به اشتراک بگذارید. این به شما امکان می دهد از عملکرد و قدرت وب اسمبلی و بیان و انعطاف پذیری جاوا اسکریپت در همان برنامهها استفاده کنید. وب اسمبلی سرعت(Speed)، قابل حمل بودن(Portability)، انعطافپذیری(Flexibility) را به ارمغان میآورد.
اهمیت وب اسمبلی در طراحی وبسایت
برای اینکه اهمیت کدهای وب اسمبلی معلوم شود، لازم است مزایا و ویژگیهای آن در طراحی سایت شمرده شود. وب اسمبلی چه امکانات و ویژگیهایی را در اختیار طراح سایت میگذارد که تا پیش از سال ۲۰۱۷ و تولد آن، در طراحی وب امکانپذیر نبوده است؟
- بعد از وب اسمبلی، طراح سایت از هر زبانی که بخواهد میتواند برای کدنویسی استفاده کند. او کدها را مینویسد و خیالش راحت است که وقتی آنها را به کدهای Wasm تبدیل کرد، در مرورگر اجرا میشوند. همین ویژگی دست طراحان سایت و وب اپلیکیشنها را برای توسعهی پروژههای پیچیده و سنگین (مثل Google Earth یا بازیهای سه بعدی و سایتها و وب اپهای واقعیت مجازی و واقعیت افزوده) باز میگذارد.
- Wasm عملکرد سایت را بهینه میکند چون کدهایش سبکتر است، پس سریعتر در مرورگر اجرا میشوند و زمان بارگذاری کمتری را نیاز دارند. این یعنی طراح سایت میتواند صفحات پیچیدهتر و پرجزئیاتتری را طراحی کند اما نگران زمان بارگذاری صفحه و معطل شدن کاربر نباشد. اما مگر جاوا اسکرپیت همان ویژگیها را ندارد؟ بله، اما در همهی موارد و همهی پروژهها جاوا اسکریپت سرعت و عملکرد لازم را، مخصوصا برای تسکهای خیلی سنگین، فراهم نمیکند.
- درست است که توسعهدهنده یا برنامهنویس کدهای Wasm را نمینویسد، اما میتواند آنها را بخواند و در صورت لزوم ویرایش یا اصلاح کند (debugging). از دو فایل اکستنشن برای ذخیرهی کدهای وب اسمبلی استفاده میشود: wat. که برای داشتن text فرمت کدهاست وwasm. برای فرمت binary کدها. توسعهدهنده به راحتی قادر است فرمت متنی را ویرایش کند.
Wasm & JavaScript
چه ارتباطی میان جاوا اسکریپت (JS) و وب اسمبلی وجود دارد؟ وب اسمبلی و جاوا اسکریپت یکدیگر را تکمیل میکنند. JS زبانی است ۲۶ ساله که کتابخانهها و پلاگینهای زیادی دارد. همچنین مرورگرها برای پردازش و اجرای کدهای جاوا اسکریپت زیرساختهایی قوی دارند. در کل، جاوا اسکریپت زبانی قدیمی و قوی است. اما همانطور که اشاره شد، جاوا اسکریپت محدودیتهایی دارد و قدرتش برای همهی پروژهها کافی نیست.
وب اسمبلی زبان بسیار جدیدی است و امکانات و ویژگیهایی دارد که آن را از جاوا اسکریپت متمایز میکند.
بازی زندگی (Life Game)
این بازی بدون بازیکن است و قواعد سادهای دارد:
- تنها ورودی بیرونی، حالت اولیه است.
- تعامل سلول جاری با سلول همجوار افقی، عمودی و قطری حالت کنونی سلول را تعیین میکند.
- یک سلول زنده که کمتر از دو همسایه آن زنده باشند، میمیرد.
- یک سلول زنده که دو یا سه همسایهاش زنده باشند، برای نسل بعدی زنده میماند.
- یک سلول زنده که بیش از سه سلول همسایهاش زنده باشند، میمیرد.
- یک سلول مرده که دقیقاً سه سلول همسایهاش زنده باشند، زنده میشود.
بنابراین طرح ما این است که یک ماتریس بزرگ داشته باشیم و آن را با مقادیر تصادفی (0 یا 1) پر کنیم و این حالت اولیه را ارسال کرده و نتیجه را رندر کنیم، سپس حالت بعدی را محاسبه کرده و آن را مجدداً رندر کنیم و این مرحله اخیر را چندین بار تکرار کنیم.
ما میخواهیم این راهحل را با سه راهبرد پیادهسازی کنیم: جاوا اسکریپت خالص، وباسمبلی، و وب ورکرها. پیچیدگی زمانی الگوریتم ما روی همه رویکردها برابر با (O(m*m است که n عرض دنیا و m ارتفاع آن است. از آنجا که رندر برای هر سه رویکرد یکسان است، آن را در اندازهگیریهای خود لحاظ نمیکنیم.
کاربردهای عملی وب اسمبلی
چندین پروژهی جدید در دنیای وب ایجاد شدهاند که پیش از WebAssembly بسیار دور از ذهن یا گاهی ناممکن بودهاند برای مثال کتابخانهی Opus & Wave Recorder با استفاده از جاوااسکریپت و Web Audio API، صدای کاربر را ضبط میکند و در همان محیط مرورگر آن را به OGG تبدیل میکند.
کتابخانههای دیگری نیز فعالیتهایی که پیش از این در محیط مرورگر امکانپذیر نبودند را در دسترس قرار دادهاند.
محدودیتهای WebAssembly
WebAssembly با هدف ایجاد مزیت سرعت در کنار جاوااسکریپت طراحی شده است و قصد ندارد جایگزین جاوااسکریپت شود. به همین دلیل محدودیتهایی نیز دارد که مهمترین آن، عدم دسترسی به DOM است. به عبارت دیگر، کدهای مدیریت و کنترل صفحات وب میبایست توسط جاوااسکریپت نوشته شوند و از سرعت و تواناییهای wasm جهت انجام محاسبات یا پردازشهای سنگین به ویژه در نرمافزارها یا بازیهای تحت وب کمک گرفته شود.
در آخر نکته مهم اینه که که بدونین این تکنولوژی محکوم به اینه که آینده وب باشه!
یعنی حتی اگه این زبان از خودش هیچ آورده ای هم نداشته باشه بازم مسیر توسعه وب در آینده به سمت اون هدایت میشه (توسط دست های پشت پرده :دی) .
چرا؟ چون توسط بنیاد W3C (کنسرسیوم جهانی وب) به عنوان یه استاندارد شناخته شده و نیز شرکتای غولی همچون Google و Microsoft و Mozilla و Apple و Intel و Red Hat و… روش سرمایه گذاری شده
میگن اگه میخوای پیش گوی خوبی باشی، آینده رو پیش بینی نکن، اون رو بساز. و این ها در واقع کسانی هستند که مسیر توسعه وب رو پیش بینی نمیکنند بلکه اون رو خودشون میسازند