WebAssembly: Ý nghĩa, Ưu điểm, Trường hợp sử dụng và hơn thế nữa

Bạn có bị cuốn vào cơn sốt WebAssembly nhưng không biết chính xác nó là gì không? Sau đây là thông tin chi tiết.

WebAssembly hay Wasm là định dạng mã nhị phân để tạo các chương trình có thể chạy trên bất kỳ kiến ​​trúc máy tính nào.

Hệ thống bao gồm một máy ảo và một trình biên dịch có chức năng dịch mã máy tính từ các ngôn ngữ lập trình như C hoặc C++ sang định dạng .wat dễ đọc và định dạng nhị phân .wasm.

Mục tiêu ban đầu của WebAssembly là cho phép các lập trình viên phát triển các ứng dụng hiệu suất cao cho các trang web bằng cách cho phép tốc độ thực thi gần như gốc bên trong trình duyệt. Nhưng công nghệ này hiện có vẻ đang phát triển vượt ra ngoài trình duyệt và tiến vào đám mây.

Hướng dẫn này sẽ chỉ cho bạn mọi thông tin cần biết về công nghệ đang phát triển này, điểm mạnh, điểm yếu cũng như tiềm năng trong tương lai của nó.

WebAssembly là gì?

lắp ráp web là định dạng mã nhị phân chạy trên máy ảo và các ngôn ngữ khác nhau có thể biên dịch thành. Định dạng này được thiết kế để có thể di động và có thể chạy trên trình duyệt web hoặc dưới dạng ứng dụng máy chủ.

Được phát hành lần đầu tiên vào năm 2017, WebAssembly được W3C khuyến nghị kể từ năm 2019 và được nhiều bên đóng góp duy trì, bao gồm Mozilla, Google, Microsoft, Red Hat và nhiều bên khác.

Mục tiêu ban đầu là phát triển tốc độ thực thi gần như gốc như bạn thấy với các ứng dụng C/C++ bên trong trình duyệt. Nó cũng được coi là một chuẩn web an toàn, mở, có thể gỡ lỗi và không có phiên bản, tương thích ngược và tuân thủ JavaScript.

WebAssembly hoạt động như thế nào?

WebAssembly được thiết kế như một công cụ chạy thời gian thực, chẳng hạn như Java hoặc JavaScript, có thể được nhúng vào trình duyệt hoặc môi trường máy chủ để chạy mã máy tính được biên dịch ở định dạng nhị phân .wasm hoặc định dạng văn bản .wat.

Để viết mã cho việc thực thi WebAssembly, nhà phát triển viết chương trình bằng bất kỳ ngôn ngữ nào được hỗ trợ. Sau đó biên dịch bằng trình biên dịch WebAssembly AOT (Ahead of Time) hoặc JIT (just in time).

Mã này có thể thực hiện hầu hết công việc trong môi trường thực thi, nhưng không thể truy cập hoặc sửa đổi các đối tượng DOM của trình duyệt. Bất kỳ tương tác nào như vậy phải thông qua JavaScript.

Cách tạo một ứng dụng WebAssembly mẫu

Bạn có thể tạo một ứng dụng Wasm đơn giản cho trình duyệt web chỉ bằng một vài bước như bạn có thể thấy bên dưới:

  1. Tải về và cài đặt SDK Emscripten.
  2. Viết mẫu của bạn hellowworld.c viết mã hoặc thực hiện bằng C++/Rust nếu bạn thích.
  3. chạy emcc helloworld.c -s WASM=1 -s helloworld.html trong một thiết bị đầu cuối để biên dịch mã thành WebAssembly với Emscripten. Nó sẽ tạo các tệp nhị phân Wasm, HTML và JavaScript mà bạn cần (mã keo).
  4. Phục vụ trang helloworld.html thông qua trình duyệt web của bạn.

Ưu điểm của WebAssembly

Có nhiều lý do để áp dụng WebAssembly và các công nghệ liên quan, bao gồm:

  • Hiệu suất gần như bản địa – WebAssembly có thiết kế ở cấp độ thấp đến mức nó cung cấp hiệu suất tương tự như các ngôn ngữ cấp thấp như C và C++.
  • Bảo mật – Hệ thống được thiết kế bảo mật bằng cách cô lập hệ thống trong môi trường ảo với quyền truy cập hệ thống hạn chế.
  • Tiêu chuẩn mở – Nhiều tổ chức và cá nhân đang đóng góp cho WebAssembly và đây là khuyến nghị chính thức của W3C.
  • Trọng lượng nhẹ – WebAssembly biên dịch thành mã nhị phân để thực thi trong máy ảo. Mã này có thể di chuyển và không cần hoặc không đi kèm với tệp hệ thống.
  • Hỗ trợ đa ngôn ngữ – Hơn 50 ngôn ngữ có thể biên dịch thành WebAssembly.
  • Nền tảng độc lập – Máy ảo WebAssembly được thiết kế cho từng kiến ​​trúc để trình bày cùng một môi trường thời gian chạy. Tất cả những gì nhà phát triển phải làm là viết mã cho WebAssembly.

Những hạn chế của WebAssembly

  • Đang tiến hành – Tiêu chuẩn này vẫn đang trong quá trình phát triển và do đó vẫn còn nhiều tính năng và cải tiến chưa được đưa ra.
  • Không thu gom rác – WebAssembly vẫn chưa có chức năng thu gom rác, mặc dù tính năng này có thể sớm được triển khai.
  • Không có quyền truy cập DOM – Bạn không thể truy cập DOM của trình duyệt web trực tiếp từ WebAssembly, bạn sẽ cần phải sử dụng JavaScript.

WebAssembly so với Java

Java là một trong những triển khai sớm nhất của WebAssembly. Nó được thiết kế như một ngôn ngữ viết một lần, chạy mọi nơi, nhưng đã phát triển rất nhiều vấn đề trong quá trình thực hiện.

Giống như Java, WebAssembly sử dụng RE (Môi trường chạy) để thực thi mã, nhưng không giống như Java, bạn có thể viết WebAssembly bằng ngôn ngữ bạn chọn.

WebAssembly so với JavaScript

WebAssembly thực thi trong trình duyệt hoặc môi trường lưu trữ khác, giống như JavaScriptTuy nhiên, trong khi JavaScript được cung cấp cho môi trường thực thi ở định dạng văn bản và được biên dịch kịp thời, WebAssembly có cả định dạng văn bản và nhị phân.

Trong trình duyệt web, JavaScript có thể truy cập DOM, trong khi WebAssembly thì không. Tuy nhiên, khi nói đến tốc độ thực thi, WebAssembly đánh bại JavaScript, với tốc độ thực thi mã gần như gốc.

Tốc độ là điểm nổi bật của WebAssembly và là lý do tại sao nó lý tưởng cho nhiều mục đích sử dụng. Bạn có thể tải WebAssembly vào trình duyệt bằng JavaScript và hai mã có thể chạy cùng nhau và chia sẻ tài nguyên.

WebAssembly so với Docker so với Kubernetes

Docker và Kubernetes là hai trong số những công nghệ phổ biến hỗ trợ điện toán đám mây. Docker là công nghệ container cho phép các nhà phát triển đóng gói một ứng dụng với tất cả các phụ thuộc hệ thống của nó thành một gói duy nhất. Điều này giúp dễ dàng triển khai ứng dụng trong bất kỳ môi trường đám mây nào trong một giây hoặc ít hơn.

Mặt khác, Kubernetes là một hệ thống mã nguồn mở để quản lý và triển khai các ứng dụng được chứa trong container như Docker, CRI-O, containerd và bất kỳ triển khai Kubernetes CRI (Container Runtime Interface) nào. Kubernetes cũng giúp dễ dàng mở rộng quy mô triển khai đám mây trên nhiều máy chủ hoặc máy ảo.

Theo quan điểm này, WebAssembly giống Docker hơn và có thể chạy như một ứng dụng đám mây được chứa trong container bằng Kubernetes. Nó cũng cung cấp nhiều lợi thế hơn Docker, nhưng có lẽ sẽ không thay thế Docker.

Ngoài Trình Duyệt

Vào thời kỳ đầu, có máy chủ web. Bạn phải dành riêng một máy đầy đủ làm máy chủ. Sau đó, có máy ảo hoặc VM, cho phép máy chủ chạy trên chỉ một hoặc nhiều luồng CPU. Tuy nhiên, bạn phải có VM chuyên dụng.

Điện toán đám mây cho phép khởi chạy và chạy máy chủ chỉ khi cần bằng cách chứa các ứng dụng. Điều này dẫn đến việc giảm chi phí, vì bạn chỉ phải trả tiền cho những gì bạn sử dụng – không còn máy chuyên dụng nữa. Nhưng vẫn còn một vài vấn đề.

Đầu tiên, các tệp docker có thể lớn tới vài Gigabyte và điều này có nghĩa là có một chút chậm trễ trong quá trình khởi động và các vấn đề quản lý khác. Tuy nhiên, một tệp Wasm tương tự có thể chỉ lớn vài MB vì ​​nó là tệp nhị phân được biên dịch trước. Điều này giúp nó có thời gian khởi động nhanh hơn nhiều so với Docker, hoàn hảo cho một số ứng dụng quan trọng về thời gian.

Thứ hai, thiết kế của WebAssembly có nghĩa là nhà phát triển không phải quản lý và phân bổ tài nguyên hệ thống, họ có thể dễ dàng đạt được mục tiêu bằng ngôn ngữ lập trình mình chọn.

Những tính năng này khiến WebAssembly trở nên lý tưởng để chạy các dịch vụ đám mây siêu nhỏ, mặc dù các ứng dụng Docker vẫn được ưu tiên hơn cho các ứng dụng yêu cầu kiểm soát nhiều hơn đối với môi trường hoạt động và hệ thống tệp.

Để biết thêm thông tin, các dự án như Đám mây WasmWasmEdge đang phát triển WebAssembly thành một nền tảng điện toán khả thi.

Các trường hợp sử dụng Wasm

Có nhiều trường hợp sử dụng WebAssembly, do bản chất đặc biệt của nó. Chúng có thể được chia thành ba nhóm chính; trong trình duyệt, ngoài trình duyệt và thiết lập kết hợp.

Loại trong trình duyệt thì dễ hiểu còn loại ngoài trình duyệt chủ yếu đề cập đến triển khai máy chủ, IoT và đám mây, trong khi loại kết hợp đề cập đến sự kết hợp của cả hai.

Sau đây là cái nhìn tổng quan về các trường hợp sử dụng mà Wasm có thể phát huy tác dụng:

  • Mã hiệu suất cao đã tồn tại – Mã cũ nhưng tuyệt vời mà bạn có thể chuyển sang WebAssembly.
  • Mã hiệu suất cao mới – Những thứ bạn phải thiết kế và triển khai từ đầu.
  • Chuyển ứng dụng máy tính để bàn sang web – Điều này có thể mở ra một loại giải pháp máy tính để bàn dựa trên web mới, chẳng hạn như chỉnh sửa video trên web.
  • Điện toán đám mây – Song song với Docker và Kubernetes để tìm kiếm những cơ hội mới.

Sau đây là thông tin chi tiết về các ứng dụng và tình huống cụ thể mà Wasm có thể phát huy tác dụng:

  • Chỉnh sửa video và hình ảnh
  • Thiết kế trò chơi
  • Ứng dụng AI
  • Ứng dụng thực tế ảo và thực tế tăng cường
  • Ứng dụng âm nhạc
  • Ứng dụng P2P
  • Ứng dụng phía máy chủ
  • Tính toán đám mây/cụm
  • Máy tính hỗ trợ thiết kế
  • Mô phỏng nền tảng hệ điều hành
  • Encryption
  • Máy chủ web cục bộ
  • Ứng dụng máy tính từ xa
  • Hình ảnh khoa học
  • Ứng dụng gốc lai trên điện thoại thông minh
  • Trên các thiết bị IoT

Danh sách các ngôn ngữ và khung được hỗ trợ

Có hơn 50 ngôn ngữ biên dịch thành WebAssembly và sau đây là một số ngôn ngữ phổ biến nhất:

  • C
  • C + +
  • R
  • hồng ngọc
  • Nhanh
  • Go
  • Kotlin
  • Rust
  • PHP
  • áo khoác nỉ – Một khuôn khổ dành cho các nhà phát triển .NET.
  • JwebAssembly – Trình biên dịch cho bytecode Java và các ngôn ngữ liên quan như JRuby, Jython, Groovy, Scala và Kotlin.
  • cây thủy tùng – Một khuôn khổ Rust để tạo các ứng dụng web đa luồng bằng WebAssembly.
  • hội thảo – Một ngôn ngữ được thiết kế riêng để tạo mã WebAssembly.
  • Grain – Một ngôn ngữ chức năng được gõ mạnh.
  • Motoko

Bạn có thể tìm thấy nhiều ngôn ngữ hơn đây.

Danh sách các công cụ và thời gian chạy WebAssembly

  • Tất cả các trình duyệt chính đều hỗ trợ Wasm
  • pyodua – Thời gian chạy Python trên trình duyệt với bộ công cụ khoa học Python, bao gồm Pandas, NumPy, SciPy.
  • tiếng vo vo
  • trọng lượng – Dành cho các dịch vụ vi mô và ứng dụng web
  • Là tôi – Giao diện hệ thống mô-đun
  • Thời gian – Thời gian chạy WebAssembly nhanh chóng và an toàn.
  • thợ may
  • Lucet
  • wasmĐám mây – Môi trường đám mây
  • bánh rán – Kubernetes kublete để chạy Wasm, được viết bằng Rust.
  • WasmEdge – Môi trường thời gian chạy đám mây và biên

Kết luận

Chúng ta đã đi đến cuối hành trình khám phá WebAssembly và những gì nó mang lại cho máy tính. Và như bạn thấy đấy, nó có rất nhiều hứa hẹn.

Tuy nhiên, đây vẫn là một công trình đang trong quá trình hoàn thiện nhưng liên tục được phát triển. Và nếu bạn quan tâm, bạn có thể tìm thêm thông tin đây, đâyđây.

Nnamdi Okeke

Nnamdi Okeke

Nnamdi Okeke là một người đam mê máy tính, thích đọc nhiều loại sách. Anh ấy thích Linux hơn Windows/Mac và đã sử dụng
Ubuntu từ những ngày đầu. Bạn có thể bắt gặp anh ấy trên twitter qua bongotrax

Bài báo: 299

Nhận thông tin công nghệ

Xu hướng công nghệ, xu hướng khởi nghiệp, đánh giá, thu nhập trực tuyến, công cụ web và tiếp thị một hoặc hai lần mỗi tháng