کالبدشکافی WebAssembly: مرورگر شما واقعاً چگونه نرمافزارهای سنگین دسکتاپ را اجرا میکند؟
فناوری WebAssembly به مرورگرها اجازه میدهد تا کدهای نوشتهشده به زبانهایی مانند C++ و Rust را با سرعتی نزدیک به نرمافزارهای بومی اجرا کنند. این استاندارد جدید، اجرای برنامههای سنگینی چون فتوشاپ و فیگما را بدون نیاز به نصب در وب ممکن کرده است.
به قلم آیدا امینی
این خبر را به اشتراک بگذارید
بهطور خلاصه
- WebAssembly یک زبان برنامهنویسی نیست، بلکه یک فرمت باینری (بایتکد) است که کدهای C++ یا Rust به آن کامپایل میشوند.
- مرورگرها کدهای Wasm را بسیار سریعتر از جاوااسکریپت اجرا میکنند زیرا نیازی به تفسیر و کامپایل در لحظه (JIT) ندارند.
- برنامههای سنگین مانند فتوشاپ و فیگما با استفاده از این فناوری توانستهاند نسخه تحت وب خود را با قدرت نسخه دسکتاپ ارائه دهند.
«WebAssembly مرگ جاوااسکریپت است.» این شعار بازاریابی و رویای بسیاری از برنامهنویسان است. وعده این است که مرورگر شما به یک سیستمعامل جهانی تبدیل میشود که میتواند هر زبانی را با سرعت بومی C++ اجرا کند و نرمافزارهای سنگین دسکتاپ مانند فتوشاپ و فیگما را بدون هیچ نقصی به وب بیاورد.
در نقطه مقابل، شکاکان و طرفداران سرسخت جاوااسکریپت میگویند: «WebAssembly صرفاً یک ابزار حاشیهای برای محاسبات سنگین ریاضی است.» آنها استدلال میکنند که این فناوری حتی نمیتواند مستقیماً به ساختار صفحه (DOM) دسترسی پیدا کند، در یک محیط ایزوله زندانی است و برای ۹۹ درصد از توسعه وب، جاوااسکریپت همچنان سریعتر، ارزانتر و منطقیتر است.
واقعیت در میان این دو دیدگاه متضاد قرار دارد. طبق مستندات بنیاد موزیلا: «WebAssembly برای تکمیل جاوااسکریپت طراحی شده است، نه جایگزینی آن، و به توسعهدهندگان اجازه میدهد از نقاط قوت هر دو زبان بهره ببرند.» برای درک اینکه چگونه نرمافزاری مانند فیگما اکنون در یک تب مرورگر اجرا میشود، باید به اتفاقاتی نگاه کنیم که در موتور مرورگر هنگام دریافت کد رخ میدهد.[1]
جاوااسکریپت در سال ۱۹۹۵ برای افزودن تعاملات ساده به صفحات متنی طراحی شد. وقتی یک سایت مبتنی بر جاوااسکریپت را باز میکنید، موتور مرورگر (مانند V8 در کروم) باید متن کد را دانلود کند، آن را تجزیه کند، در لحظه (JIT) کامپایل کند و انواع دادهها را حدس بزند. این فرآیند برای رابط کاربری فوقالعاده سریع است، اما برای پردازشهای سنگین مانند رندرینگ سهبعدی یا رمزنگاری به شدت ناکارآمد است.[1]
فناوری WebAssembly (یا به اختصار Wasm) این مسیر طولانی را دور میزند. برخلاف نامش، این یک زبان برنامهنویسی نیست که شما آن را تایپ کنید؛ بلکه یک «هدف کامپایل» است. توسعهدهندگان، نرمافزارهای پیچیده خود را با زبانهایی مانند C++، Rust یا C# مینویسند و سپس آن را به یک فرمت باینری فشرده (فایلهای .wasm) تبدیل میکنند.[1][2]
هنگامی که مرورگر این فایل باینری را دریافت میکند، دیگر نیازی به تجزیه متن یا حدس زدن متغیرها ندارد. کدهای Wasm معمولاً بین ۲۰ تا ۵۰ درصد حجم کمتری نسبت به کدهای معادل جاوااسکریپت دارند. مرورگر تنها کافی است آن را اعتبارسنجی کرده و تقریباً بلافاصله به زبان ماشینِ پردازنده شما ترجمه کند؛ فرآیندی که در پردازشهای سنگین میتواند بین ۱.۵ تا ۲۰ برابر سریعتر از جاوااسکریپت عمل کند.[2]
این دقیقاً همان مکانیزمی است که صنعت طراحی را دگرگون کرد. هسته اصلی موتور رندر فیگما به زبان C++ نوشته شده است. با کامپایل کردن این هسته به WebAssembly، آنها توانستند زمان بارگذاری برنامه را به میزان ۳ برابر بهبود بخشیدند و عملکردی معادل نرمافزارهای دسکتاپ را مستقیماً در مرورگر ارائه کنند.
شرکت ادوبی نیز مسیر مشابهی را طی کرد. آنها دههها کدنویسی پیچیده C++ در نرمافزار فتوشاپ را به جای بازنویسی کامل با جاوااسکریپت، مستقیماً به Wasm کامپایل کردند. این کار به آنها اجازه داد تا ابزارهای پردازش تصویر سنگین را بدون افت کیفیت به وب بیاورند.
آنها دههها کدنویسی پیچیده C++ در نرمافزار فتوشاپ را به جای بازنویسی کامل با جاوااسکریپت، مستقیماً به Wasm کامپایل کردند.
راز این عملکرد خیرهکننده در نحوه مدیریت حافظه نهفته است. در جاوااسکریپت، یک سیستم خودکار (Garbage Collector) دائماً در پسزمینه کار میکند تا حافظههای بیاستفاده را پاک کند که این امر باعث افت ناگهانی سرعت میشود. اما یک ماژول Wasm یک بلوک خام و پیوسته از حافظه (Linear Memory) را دریافت میکند و کدهای C++ یا Rust دقیقاً مانند یک برنامه بومی، مدیریت این حافظه را به صورت دستی بر عهده میگیرند.[1][2]
با وجود این قدرت، Wasm به شدت محدود و امن است. این کدها دقیقاً در همان محیط ایزوله (Sandbox) امنیتی جاوااسکریپت اجرا میشوند. یک ماژول Wasm نمیتواند فایلهای هارد دیسک شما را بخواند یا به وبکم دسترسی پیدا کند. در واقع، این فناوری حتی نمیتواند رنگ یک دکمه را در صفحه تغییر دهد؛ برای هر تغییری در رابط کاربری، باید از جاوااسکریپت درخواست کند تا این کار را برایش انجام دهد.[1][2]
مرز بعدی این فناوری، خروج از مرورگر است. با معرفی رابط سیستمی WebAssembly (WASI)، مهندسان اکنون کدهای Wasm را روی سرورها و شبکههای لبه (Edge) اجرا میکنند. از آنجا که یک ماژول Wasm در کمتر از ۵ میلیثانیه اجرا میشود، در حال تبدیل شدن به یک جایگزین سبکتر و سریعتر برای کانتینرهای داکر (Docker) در پردازشهای ابری است.[3]
علاوه بر این، استاندارد WebAssembly 3.0 و اضافه شدن اخیر قابلیت زبالهروب (WasmGC) به این اکوسیستم، راه را برای زبانهایی مانند جاوا و کاتلین باز کرده است تا بدون نیاز به انتقال کل موتور اجرایی خود، به Wasm کامپایل شوند. بحث بر سر اینکه آیا این فناوری جایگزین جاوااسکریپت میشود، یک آدرس غلط است؛ WebAssembly در حال جایگزینی سیستمعامل به عنوان بستر پیشفرض استقرار نرمافزارها است.[3]
اصطلاحات کلیدی
- WebAssembly (Wasm)
- یک فرمت باینری فشرده که به مرورگرها اجازه میدهد کدهای نوشتهشده به زبانهای مختلف را با سرعت بومی اجرا کنند.
- JIT Compiler (کامپایلر در لحظه)
- بخشی از موتور مرورگر که کدهای جاوااسکریپت را در زمان اجرا به زبان ماشین ترجمه میکند.
- Linear Memory (حافظه خطی)
- یک آرایه پیوسته از بایتها که Wasm برای مدیریت مستقیم و سریع حافظه از آن استفاده میکند.
- WASI
- رابط سیستمی که به برنامههای Wasm اجازه میدهد خارج از مرورگر اجرا شده و به فایلها یا شبکه دسترسی پیدا کنند.
- Sandbox (محیط ایزوله)
- یک محیط امنیتی محدود که از دسترسی کدهای مخرب به سیستمعامل کاربر جلوگیری میکند.
پرسشهای متداول
آیا WebAssembly جایگزین جاوااسکریپت میشود؟
خیر. این دو فناوری مکمل یکدیگرند. جاوااسکریپت برای رابط کاربری و تعاملات DOM عالی است، در حالی که Wasm برای پردازشهای سنگین ریاضی و گرافیکی استفاده میشود.
آیا اجرای کدهای باینری در مرورگر خطرناک نیست؟
خیر. کدهای Wasm دقیقاً در همان محیط ایزوله (Sandbox) امنی اجرا میشوند که جاوااسکریپت اجرا میشود و دسترسی مستقیمی به سیستم شما ندارند.
چگونه میتوانم برای WebAssembly کد بنویسم؟
معمولاً توسعهدهندگان به طور مستقیم Wasm نمینویسند، بلکه کدهای خود را به زبانهایی مانند Rust، C++ یا Go مینویسند و سپس آن را به فرمت .wasm کامپایل میکنند.
بررسی عمیق دیدگاهها
توسعهدهندگان وب
آنها Wasm را ابزاری تخصصی برای پردازشهای سنگین میدانند اما معتقدند جاوااسکریپت برای رابط کاربری بهترین انتخاب است.
از دیدگاه توسعهدهندگان فرانتاند، جاوااسکریپت و فریمورکهایی مانند React یا Vue برای ساخت رابط کاربری بهینهسازی شدهاند. WebAssembly نمیتواند مستقیماً به DOM دسترسی پیدا کند و هر بار که بخواهد عنصری را در صفحه تغییر دهد، باید از طریق یک پل ارتباطی به جاوااسکریپت پیام بفرستد. این سربار ارتباطی باعث میشود که برای کارهای ساده، Wasm در واقع کندتر از جاوااسکریپت عمل کند. بنابراین، استراتژی آنها استفاده ترکیبی است: رابط کاربری با جاوااسکریپت و پردازشهای سنگین با Wasm.
مهندسان سیستم و بکاند
این گروه Wasm را یک فرمت باینری جهانی میبینند که با استاندارد WASI میتواند جایگزین کانتینرها در سرورها شود.
برای مهندسان زیرساخت، جذابیت اصلی WebAssembly در امنیت و سرعت اجرای آن است. یک کانتینر داکر برای اجرای یک میکروسرویس ممکن است به چند صد میلیثانیه زمان نیاز داشته باشد، در حالی که یک ماژول Wasm در کمتر از ۵ میلیثانیه بوت میشود. با توسعه استاندارد WASI (رابط سیستم WebAssembly)، این ماژولها اکنون میتوانند به فایلها و شبکهها دسترسی پیدا کنند. این امر باعث شده تا شرکتهای ارائهدهنده خدمات ابری به شدت روی Wasm به عنوان آینده محاسبات بدون سرور (Serverless) سرمایهگذاری کنند.
شرکتهای نرمافزاری سنتی
برای این شرکتها، Wasm راه نجاتی است تا کدهای قدیمی C++ خود را بدون بازنویسی به محیط وب بیاورند.
شرکتهایی مانند ادوبی (Adobe) یا اتودسک (Autodesk) دهها سال زمان و میلیونها دلار هزینه صرف توسعه الگوریتمهای پیچیده به زبان C++ کردهاند. بازنویسی این حجم عظیم از کد به جاوااسکریپت برای اجرای تحت وب، عملاً غیرممکن و از نظر اقتصادی توجیهناپذیر است. WebAssembly به این شرکتها اجازه داده است تا همان کدهای بومی و تستشده خود را مستقیماً به فرمت قابل اجرا در مرورگر کامپایل کنند و محصولات پرچمدار خود را به عنوان سرویسهای ابری در دسترس کاربران قرار دهند.
- توسعهدهندگان وب
- آنها Wasm را ابزاری تخصصی برای پردازشهای سنگین میدانند اما معتقدند جاوااسکریپت برای رابط کاربری بهترین انتخاب است.
- مهندسان سیستم و بکاند
- این گروه Wasm را یک فرمت باینری جهانی میبینند که با استاندارد WASI میتواند جایگزین کانتینرها در سرورها شود.
- شرکتهای نرمافزاری سنتی
- برای این شرکتها، Wasm راه نجاتی است تا کدهای قدیمی C++ خود را بدون بازنویسی به محیط وب بیاورند.
دیدگاههایی که این گزارش پوشش نداده
- توسعهدهندگان فریمورکهای جاوااسکریپت
- متخصصان امنیت سایبری
منابع
[1]MDN Web Docsتوسعهدهندگان وبWebAssembly Concepts
مطالعه در MDN Web Docs →
[2]WebAssembly.orgمهندسان سیستم و بکاندWebAssembly
مطالعه در WebAssembly.org →
[3]Wikipediaشرکتهای نرمافزاری سنتیWebAssembly
مطالعه در Wikipedia →
[4]تیم سردبیری کوهستانمهندسان سیستم و بکاندتحلیل تیم سردبیری کوهستان
مطالعه در تیم سردبیری کوهستان →
بیشتر در فناوری
مشاهده همه →طراحی تراشه
کالبدشکافی معماری پردازندهها: چرا تراشههای موبایل (ARM) اینقدر کممصرفتر از تراشههای دسکتاپ (x86) هستند؟
6 منبع
فناوری نمایشگر
کالبدشکافی نمایشگرهای رنگی: چگونه سه رنگ اصلی میلیونها سایه را خلق میکنند؟
2 منبع
امنیت سختافزار
کالبدشکافی منطقه امن (Secure Enclave): گوشی شما واقعاً چگونه اثر انگشتتان را از خود سیستمعامل مخفی میکند؟
5 منبع
واقعیت ترکیبی
کالبدشکافی رایانش فضایی: هدستها واقعاً چگونه دنیای واقعی را به چشمان شما میدوزند؟
4 منبع
نظرات
هر زاویه. هر روز.
اخبار فناوری با پوشش کامل منابع و تحلیل دیدگاهها، هر روز و رایگان.





