رفتن به محتوای اصلی
Koohestun
توضیح کوهستانمعماری وبکالبدشکافی· 4 دقیقه مطالعه· در فناوری

کالبدشکافی WebAssembly: مرورگر شما واقعاً چگونه نرم‌افزارهای سنگین دسکتاپ را اجرا می‌کند؟

فناوری WebAssembly به مرورگرها اجازه می‌دهد تا کدهای نوشته‌شده به زبان‌هایی مانند C++ و Rust را با سرعتی نزدیک به نرم‌افزارهای بومی اجرا کنند. این استاندارد جدید، اجرای برنامه‌های سنگینی چون فتوشاپ و فیگما را بدون نیاز به نصب در وب ممکن کرده است.

به قلم آیدا امینی

توسعه‌دهندگان وب 35%مهندسان سیستم و بک‌اند 35%شرکت‌های نرم‌افزاری سنتی 30%
توسعه‌دهندگان وب
آن‌ها Wasm را ابزاری تخصصی برای پردازش‌های سنگین می‌دانند اما معتقدند جاوااسکریپت برای رابط کاربری بهترین انتخاب است.
مهندسان سیستم و بک‌اند
این گروه Wasm را یک فرمت باینری جهانی می‌بینند که با استاندارد WASI می‌تواند جایگزین کانتینرها در سرورها شود.
شرکت‌های نرم‌افزاری سنتی
برای این شرکت‌ها، Wasm راه نجاتی است تا کدهای قدیمی C++ خود را بدون بازنویسی به محیط وب بیاورند.

دیدگاه‌هایی که این گزارش پوشش نداده

  • توسعه‌دهندگان فریم‌ورک‌های جاوااسکریپت
  • متخصصان امنیت سایبری

«WebAssembly مرگ جاوااسکریپت است.» این شعار بازاریابی و رویای بسیاری از برنامه‌نویسان است. وعده این است که مرورگر شما به یک سیستم‌عامل جهانی تبدیل می‌شود که می‌تواند هر زبانی را با سرعت بومی C++ اجرا کند و نرم‌افزارهای سنگین دسکتاپ مانند فتوشاپ و فیگما را بدون هیچ نقصی به وب بیاورد.

در نقطه مقابل، شکاکان و طرفداران سرسخت جاوااسکریپت می‌گویند: «WebAssembly صرفاً یک ابزار حاشیه‌ای برای محاسبات سنگین ریاضی است.» آن‌ها استدلال می‌کنند که این فناوری حتی نمی‌تواند مستقیماً به ساختار صفحه (DOM) دسترسی پیدا کند، در یک محیط ایزوله زندانی است و برای ۹۹ درصد از توسعه وب، جاوااسکریپت همچنان سریع‌تر، ارزان‌تر و منطقی‌تر است.

واقعیت در میان این دو دیدگاه متضاد قرار دارد. طبق مستندات بنیاد موزیلا: «WebAssembly برای تکمیل جاوااسکریپت طراحی شده است، نه جایگزینی آن، و به توسعه‌دهندگان اجازه می‌دهد از نقاط قوت هر دو زبان بهره ببرند.» برای درک اینکه چگونه نرم‌افزاری مانند فیگما اکنون در یک تب مرورگر اجرا می‌شود، باید به اتفاقاتی نگاه کنیم که در موتور مرورگر هنگام دریافت کد رخ می‌دهد.[1]

جاوااسکریپت در سال ۱۹۹۵ برای افزودن تعاملات ساده به صفحات متنی طراحی شد. وقتی یک سایت مبتنی بر جاوااسکریپت را باز می‌کنید، موتور مرورگر (مانند V8 در کروم) باید متن کد را دانلود کند، آن را تجزیه کند، در لحظه (JIT) کامپایل کند و انواع داده‌ها را حدس بزند. این فرآیند برای رابط کاربری فوق‌العاده سریع است، اما برای پردازش‌های سنگین مانند رندرینگ سه‌بعدی یا رمزنگاری به شدت ناکارآمد است.[1]

فناوری WebAssembly (یا به اختصار Wasm) این مسیر طولانی را دور می‌زند. برخلاف نامش، این یک زبان برنامه‌نویسی نیست که شما آن را تایپ کنید؛ بلکه یک «هدف کامپایل» است. توسعه‌دهندگان، نرم‌افزارهای پیچیده خود را با زبان‌هایی مانند C++، Rust یا C# می‌نویسند و سپس آن را به یک فرمت باینری فشرده (فایل‌های .wasm) تبدیل می‌کنند.[1][2]

فناوری WebAssembly (یا به اختصار Wasm) این مسیر طولانی را دور می‌زند.

هنگامی که مرورگر این فایل باینری را دریافت می‌کند، دیگر نیازی به تجزیه متن یا حدس زدن متغیرها ندارد. کدهای Wasm معمولاً بین ۲۰ تا ۵۰ درصد حجم کمتری نسبت به کدهای معادل جاوااسکریپت دارند. مرورگر تنها کافی است آن را اعتبارسنجی کرده و تقریباً بلافاصله به زبان ماشینِ پردازنده شما ترجمه کند؛ فرآیندی که در پردازش‌های سنگین می‌تواند بین ۱.۵ تا ۲۰ برابر سریع‌تر از جاوااسکریپت عمل کند.[2]

این دقیقاً همان مکانیزمی است که صنعت طراحی را دگرگون کرد. هسته اصلی موتور رندر فیگما به زبان C++ نوشته شده است. با کامپایل کردن این هسته به WebAssembly، آن‌ها توانستند زمان بارگذاری برنامه را به میزان ۳ برابر بهبود بخشیدند و عملکردی معادل نرم‌افزارهای دسکتاپ را مستقیماً در مرورگر ارائه کنند.

شرکت ادوبی نیز مسیر مشابهی را طی کرد. آن‌ها دهه‌ها کدنویسی پیچیده 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]

نکات کلیدی

  1. WebAssembly یک زبان برنامه‌نویسی نیست، بلکه یک فرمت باینری (بایت‌کد) است که کدهای C++ یا Rust به آن کامپایل می‌شوند.
  2. مرورگرها کدهای Wasm را بسیار سریع‌تر از جاوااسکریپت اجرا می‌کنند زیرا نیازی به تفسیر و کامپایل در لحظه (JIT) ندارند.
  3. برنامه‌های سنگین مانند فتوشاپ و فیگما با استفاده از این فناوری توانسته‌اند نسخه تحت وب خود را با قدرت نسخه دسکتاپ ارائه دهند.
  4. Wasm جایگزین جاوااسکریپت نیست؛ این دو در کنار هم کار می‌کنند و Wasm در یک محیط ایزوله (Sandbox) امن اجرا می‌شود.

چرا مهم است

تا پیش از این، وب محدود به صفحات متنی و برنامه‌های سبک بود، اما WebAssembly این محدودیت را شکسته است. درک این فناوری نشان می‌دهد که چرا دیگر برای کارهای حرفه‌ای مانند ویرایش ویدیو، طراحی سه‌بعدی یا بازی‌های سنگین نیازی به خرید کامپیوترهای گران‌قیمت یا نصب نرم‌افزارهای حجیم ندارید.

اصطلاحات کلیدی

WebAssembly (Wasm)
یک فرمت باینری فشرده که به مرورگرها اجازه می‌دهد کدهای نوشته‌شده به زبان‌های مختلف را با سرعت بومی اجرا کنند.
JIT Compiler (کامپایلر در لحظه)
بخشی از موتور مرورگر که کدهای جاوااسکریپت را در زمان اجرا به زبان ماشین ترجمه می‌کند.
Linear Memory (حافظه خطی)
یک آرایه پیوسته از بایت‌ها که Wasm برای مدیریت مستقیم و سریع حافظه از آن استفاده می‌کند.
WASI
رابط سیستمی که به برنامه‌های Wasm اجازه می‌دهد خارج از مرورگر اجرا شده و به فایل‌ها یا شبکه دسترسی پیدا کنند.
Sandbox (محیط ایزوله)
یک محیط امنیتی محدود که از دسترسی کدهای مخرب به سیستم‌عامل کاربر جلوگیری می‌کند.

پرسش‌های متداول

آیا WebAssembly جایگزین جاوااسکریپت می‌شود؟

خیر. این دو فناوری مکمل یکدیگرند. جاوااسکریپت برای رابط کاربری و تعاملات DOM عالی است، در حالی که Wasm برای پردازش‌های سنگین ریاضی و گرافیکی استفاده می‌شود.

آیا اجرای کدهای باینری در مرورگر خطرناک نیست؟

خیر. کدهای Wasm دقیقاً در همان محیط ایزوله (Sandbox) امنی اجرا می‌شوند که جاوااسکریپت اجرا می‌شود و دسترسی مستقیمی به سیستم شما ندارند.

چگونه می‌توانم برای WebAssembly کد بنویسم؟

معمولاً توسعه‌دهندگان به طور مستقیم Wasm نمی‌نویسند، بلکه کدهای خود را به زبان‌هایی مانند Rust، C++ یا Go می‌نویسند و سپس آن را به فرمت .wasm کامپایل می‌کنند.

منابع

پوشش منابع

4 منبع

3 دیدگاه شناسایی‌شده

توسعه‌دهندگان وب 35%مهندسان سیستم و بک‌اند 35%شرکت‌های نرم‌افزاری سنتی 30%
  1. [1]MDN Web Docsتوسعه‌دهندگان وب

    WebAssembly Concepts

    مطالعه در MDN Web Docs
  2. [2]WebAssembly.orgمهندسان سیستم و بک‌اند

    WebAssembly

    مطالعه در WebAssembly.org
  3. [3]Wikipediaشرکت‌های نرم‌افزاری سنتی

    WebAssembly

    مطالعه در Wikipedia
  4. [4]تیم سردبیری کوهستانمهندسان سیستم و بک‌اند

    تحلیل تیم سردبیری کوهستان

    مطالعه در تیم سردبیری کوهستان

نظرات

همیشه در جریان باشید

هر زاویه. هر روز.

دریافت فناوری اخبار همراه با پوشش کامل منابع و تحلیل دیدگاه‌ها، مستقیم در صندوق ورودی شما.