WebAssembly: ความหมาย ข้อดี กรณีการใช้งาน และอื่น ๆ อีกมากมาย

ติดอยู่ในเรื่องกระแส WebAssembly แต่ยังไม่แน่ใจว่ามันคืออะไรกันแน่? นี่คือข้อมูลเบื้องต้น

WebAssembly หรือ Wasm เป็นรูปแบบโค้ดไบนารี่สำหรับการสร้างโปรแกรมที่สามารถทำงานบนสถาปัตยกรรมคอมพิวเตอร์ใดก็ได้

ระบบประกอบด้วยเครื่องเสมือนและคอมไพเลอร์ที่แปลโค้ดคอมพิวเตอร์จากภาษาการเขียนโปรแกรม เช่น C หรือ C++ เป็นรูปแบบ .wat ที่มนุษย์สามารถอ่านได้ และรูปแบบไบนารี .wasm

เป้าหมายเดิมของ WebAssembly คือการเปิดโอกาสให้โปรแกรมเมอร์สามารถพัฒนาแอปพลิเคชันประสิทธิภาพสูงสำหรับหน้าเว็บได้ โดยเปิดใช้งานความเร็วในการทำงานแบบเนทีฟภายในเบราว์เซอร์ แต่ในปัจจุบัน เทคโนโลยีดังกล่าวดูเหมือนจะพัฒนาไปไกลเกินกว่าเบราว์เซอร์และเข้าสู่ระบบคลาวด์

คู่มือนี้จะแสดงทุกสิ่งที่คุณจำเป็นต้องรู้เกี่ยวกับเทคโนโลยีที่กำลังพัฒนานี้ จุดแข็งและจุดอ่อน รวมถึงศักยภาพในอนาคต

WebAssembly คืออะไร?

WebAssembly เป็นรูปแบบรหัสไบนารีที่ทำงานบนเครื่องเสมือนและภาษาต่างๆ สามารถคอมไพล์ได้ ออกแบบมาให้พกพาได้และสามารถทำงานบนเว็บเบราว์เซอร์หรือเป็นแอปพลิเคชันเซิร์ฟเวอร์ได้

WebAssembly เปิดตัวครั้งแรกในปี 2017 และได้รับคำแนะนำจาก W3C ตั้งแต่ปี 2019 และได้รับการดูแลโดยผู้สนับสนุนจำนวนมาก รวมถึง Mozilla, Google, Microsoft, Red Hat และอื่นๆ อีกมากมาย

เป้าหมายเดิมคือการพัฒนาความเร็วในการทำงานแบบเนทีฟที่คุณจะพบได้ในแอปพลิเคชัน C/C++ ภายในเบราว์เซอร์ นอกจากนี้ยังได้รับการออกแบบให้เป็นมาตรฐานเว็บที่ปลอดภัย เป็นมาตรฐานเปิด สามารถดีบักได้ และไม่มีเวอร์ชันที่เข้ากันได้ย้อนหลังและรองรับ JavaScript

WebAssembly ทำงานอย่างไร?

WebAssembly ได้รับการออกแบบมาให้เป็นโปรแกรมรันไทม์ เช่น Java หรือ JavaScript ที่สามารถฝังไว้ในสภาพแวดล้อมของเบราว์เซอร์หรือเซิร์ฟเวอร์เพื่อเรียกใช้โค้ดคอมพิวเตอร์ที่คอมไพล์ในรูปแบบไบนารี .wasm หรือรูปแบบข้อความ .wat

ในการเขียนโค้ดสำหรับการดำเนินการ WebAssembly นักพัฒนาจะต้องเขียนโปรแกรมด้วยภาษาที่รองรับภาษาใดภาษาหนึ่ง จากนั้นจึงคอมไพล์โดยใช้คอมไพเลอร์ WebAssembly ซึ่งอาจเป็น AOT (Ahead of Time) หรือ JIT (just in time)

โค้ดนี้สามารถทำงานส่วนใหญ่ในสภาพแวดล้อมการทำงาน แต่ไม่สามารถเข้าถึงหรือแก้ไขวัตถุ DOM ของเบราว์เซอร์ได้ การโต้ตอบใดๆ ดังกล่าวจะต้องผ่าน JavaScript

วิธีการสร้างตัวอย่างแอปพลิเคชัน WebAssembly

การสร้างแอปพลิเคชัน Wasm ง่ายๆ สำหรับเว็บเบราว์เซอร์สามารถทำได้เพียงไม่กี่ขั้นตอน ดังที่คุณเห็นด้านล่างนี้:

  1. ดาวน์โหลดและติดตั้ง SDK Emscripten ของเรา.
  2. เขียนตัวอย่างของคุณ สวัสดีเวิล์ด.ค เขียนโค้ดหรือทำใน C++/Rust ถ้าคุณต้องการ
  3. วิ่ง emcc helloworld.c -s WASM=1 -s helloworld.html ในเทอร์มินัลเพื่อคอมไพล์โค้ดเป็น WebAssembly ด้วย Emscripten มันจะสร้างไฟล์ไบนารี Wasm, HTML และ JavaScript ที่คุณต้องการ (รหัสกาว)
  4. ให้บริการหน้า helloworld.html ผ่านทางเว็บเบราว์เซอร์ของคุณ

ข้อดีของ WebAssembly

มีหลายเหตุผลในการนำ WebAssembly และเทคโนโลยีที่เกี่ยวข้องมาใช้ ซึ่งรวมถึง:

  • ประสิทธิภาพใกล้เคียงกับเนทีฟ – WebAssembly มีการออกแบบระดับต่ำที่ให้ประสิทธิภาพใกล้เคียงกับภาษาระดับต่ำ เช่น C และ C++
  • ⁠ความปลอดภัย – ระบบได้รับการออกแบบให้ปลอดภัยโดยแยกไว้ในสภาพแวดล้อมเสมือนที่มีการเข้าถึงระบบที่จำกัด
  • เปิดมาตรฐาน องค์กรและบุคคลจำนวนมากมีส่วนสนับสนุน WebAssembly และถือเป็นคำแนะนำอย่างเป็นทางการของ W3C
  • มีน้ำหนักเบา – WebAssembly คอมไพล์เป็นโค้ดไบนารี่เพื่อเรียกใช้ในเครื่องเสมือน โค้ดนี้สามารถพกพาได้และไม่ต้องใช้หรือมาพร้อมกับไฟล์ระบบ
  • การสนับสนุนหลายภาษา – สามารถคอมไพล์เป็น WebAssembly ได้มากถึง 50 ภาษา
  • แพลตฟอร์มอิสระ – เครื่องเสมือน WebAssembly ได้รับการออกแบบสำหรับสถาปัตยกรรมแต่ละแบบเพื่อนำเสนอสภาพแวดล้อมรันไทม์แบบเดียวกัน สิ่งที่นักพัฒนาต้องทำคือเขียนโค้ดสำหรับ WebAssembly

ข้อจำกัดของ WebAssembly

  • กำลังทำงานอยู่ – มาตรฐานนี้ยังอยู่ในช่วงการพัฒนา จึงยังมีคุณสมบัติและการปรับปรุงอีกมากมายที่จะเกิดขึ้น
  • ไม่มีการเก็บขยะ – WebAssembly ยังขาดการรวบรวมขยะ ถึงแม้ว่าอาจจะมีการนำไปใช้งานในเร็วๆ นี้ก็ตาม
  • ไม่มีการเข้าถึง DOM – คุณไม่สามารถเข้าถึง DOM ของเว็บเบราว์เซอร์ได้โดยตรงจาก WebAssembly คุณจะต้องใช้ JavaScript

WebAssembly เทียบกับ Java

ภาษา Java ถือเป็นภาษา WebAssembly รุ่นแรกๆ ที่ได้รับการออกแบบให้เขียนได้ครั้งเดียวและรันได้ทุกที่ แต่มีปัญหาต่างๆ มากมายเกิดขึ้นระหว่างการพัฒนา

เช่นเดียวกับ Java, WebAssembly จะใช้ RE (Runtime Environment) ในการรันโค้ด แต่ไม่เหมือนกับ Java ตรงที่คุณสามารถเขียน WebAssembly ในภาษาที่คุณเลือกได้

WebAssembly เทียบกับ JavaScript

WebAssembly ดำเนินการในเบราว์เซอร์หรือสภาพแวดล้อมโฮสต์อื่น เช่นเดียวกับ JavaScriptอย่างไรก็ตาม ในขณะที่ JavaScript ถูกส่งไปยังสภาพแวดล้อมการดำเนินการในรูปแบบข้อความและถูกคอมไพล์ทันที แต่ WebAssembly มีทั้งรูปแบบข้อความและไบนารี

ภายในเว็บเบราว์เซอร์ JavaScript สามารถเข้าถึง DOM ได้ในขณะที่ WebAssembly ไม่สามารถทำได้ อย่างไรก็ตาม เมื่อพูดถึงความเร็วในการทำงาน WebAssembly เอาชนะ JavaScript ด้วยความเร็วในการทำงานโค้ดที่เกือบจะเป็นเนทีฟ

ความเร็วคือสิ่งที่ทำให้ WebAssembly โดดเด่นและเป็นเหตุผลที่ทำให้ WebAssembly เหมาะกับการใช้งานหลายประเภท คุณสามารถโหลด WebAssembly ลงในเบราว์เซอร์โดยใช้ JavaScript และโค้ดทั้งสองสามารถทำงานร่วมกันและแบ่งปันทรัพยากรได้

WebAssembly เทียบกับ Docker เทียบกับ Kubernetes

Docker และ Kubernetes เป็นสองเทคโนโลยียอดนิยมที่ขับเคลื่อนระบบคลาวด์คอมพิวติ้ง Docker เป็นเทคโนโลยีคอนเทนเนอร์ที่ช่วยให้ผู้พัฒนาสามารถรวมแอปพลิเคชันที่มีระบบที่ต้องพึ่งพาทั้งหมดไว้ในแพ็คเกจเดียว ทำให้ปรับใช้แอปพลิเคชันในสภาพแวดล้อมคลาวด์ใดๆ ได้อย่างง่ายดายภายในเวลาไม่กี่วินาทีหรือเร็วกว่านั้น

Kubernetes เป็นระบบโอเพ่นซอร์สสำหรับจัดการและปรับใช้แอปพลิเคชันคอนเทนเนอร์ เช่น Docker, CRI-O, containerd และการใช้งาน Kubernetes CRI (Container Runtime Interface) นอกจากนี้ Kubernetes ยังทำให้การปรับใช้คลาวด์บนเซิร์ฟเวอร์หรือเครื่องเสมือนหลายเครื่องเป็นเรื่องง่ายอีกด้วย

จากมุมมองนี้ WebAssembly จะคล้ายกับ Docker มากกว่า และสามารถทำให้ทำงานเป็นแอปพลิเคชันบนคลาวด์แบบคอนเทนเนอร์ได้โดยใช้ Kubernetes นอกจากนี้ WebAssembly ยังมีข้อได้เปรียบเหนือ Docker หลายประการ แต่จะไม่สามารถแทนที่ Docker ได้

เหนือกว่าเบราว์เซอร์

ในตอนแรกมีเว็บเซิร์ฟเวอร์ คุณต้องสร้างเครื่องคอมพิวเตอร์แบบเต็มเพื่อใช้เป็นเซิร์ฟเวอร์ จากนั้นก็มีเครื่องเสมือนหรือ VM ที่ให้เซิร์ฟเวอร์ทำงานบนเธรด CPU เพียงหนึ่งเธรดหรือมากกว่านั้น อย่างไรก็ตาม คุณต้องมี VM เฉพาะ

คอมพิวเตอร์เมฆ ทำให้สามารถเปิดใช้งานและรันเซิร์ฟเวอร์ได้เฉพาะเมื่อจำเป็นโดยการสร้างแอปพลิเคชันเป็นคอนเทนเนอร์ ซึ่งส่งผลให้ต้นทุนลดลง เนื่องจากคุณต้องจ่ายเฉพาะส่วนที่ใช้เท่านั้น ไม่ต้องมีเครื่องเฉพาะอีกต่อไป แต่ยังคงมีปัญหาบางประการอยู่

ประการแรก ไฟล์ Docker อาจมีขนาดใหญ่ได้หลายกิกะไบต์ ซึ่งหมายความว่าการเริ่มระบบและปัญหาการจัดการอื่นๆ จะล่าช้าเล็กน้อย อย่างไรก็ตาม ไฟล์ Wasm ที่คล้ายกันอาจมีขนาดเพียงไม่กี่ MB เนื่องจากเป็นไบนารีที่คอมไพล์ไว้ล่วงหน้า ซึ่งทำให้เวลาในการเริ่มระบบเร็วกว่า Docker มาก เหมาะอย่างยิ่งสำหรับแอปพลิเคชันที่ต้องใช้เวลามาก

ประการที่สอง การออกแบบของ WebAssembly หมายถึงว่านักพัฒนาไม่จำเป็นต้องจัดการและกำหนดทรัพยากรระบบ เขาสามารถเข้าถึงจุดต่างๆ ได้อย่างง่ายดายโดยใช้ภาษาการเขียนโปรแกรมที่เขาเลือก

คุณลักษณะเหล่านี้ทำให้ WebAssembly เหมาะอย่างยิ่งสำหรับการรันไมโครเซอร์วิสบนคลาวด์ แม้ว่าแอปพลิเคชัน Docker จะยังคงต้องการมากกว่าสำหรับแอปพลิเคชันที่ต้องการการควบคุมมากขึ้นในสภาพแวดล้อมการปฏิบัติการและระบบไฟล์ก็ตาม

สำหรับข้อมูลเพิ่มเติมโครงการเช่น วาสม์คลาวด์ และ WasmEdge กำลังพัฒนา WebAssembly ให้เป็นแพลตฟอร์มคอมพิวเตอร์ที่สามารถใช้งานได้จริง

กรณีการใช้งาน Wasm

WebAssembly มีกรณีการใช้งานมากมายเนื่องจากลักษณะเฉพาะของมัน โดยสามารถแบ่งได้เป็น 3 กลุ่มหลัก ได้แก่ การตั้งค่าในเบราว์เซอร์ การตั้งค่าภายนอกเบราว์เซอร์ และการตั้งค่าแบบไฮบริด

ประเภทในเบราว์เซอร์นั้นสามารถอธิบายด้วยตัวเองได้ และประเภทนอกเบราว์เซอร์นั้นส่วนใหญ่จะหมายถึงการใช้งานเซิร์ฟเวอร์ IoT และคลาวด์ ในขณะที่แบบไฮบริดนั้นหมายถึงการผสมผสานทั้งสองอย่าง

ต่อไปนี้คือการดูกรณีการใช้งานที่ Wasm สามารถโดดเด่นได้:

  • รหัสประสิทธิภาพสูงที่มีอยู่แล้ว – โค้ดเก่าแต่ยอดเยี่ยมที่คุณสามารถพอร์ตไปยัง WebAssembly ได้
  • รหัสประสิทธิภาพสูงใหม่ – สิ่งที่คุณต้องออกแบบและนำมาใช้ตั้งแต่เริ่มต้น
  • การย้ายแอปพลิเคชันเดสก์ท็อปไปยังเว็บ – สิ่งนี้อาจเปิดโอกาสให้เกิดโซลูชันเดสก์ท็อปบนเว็บสายพันธุ์ใหม่ เช่น การตัดต่อวิดีโอผ่านเว็บ.
  • คอมพิวเตอร์เมฆ – ทำงานควบคู่ไปกับ Docker และ Kubernetes เพื่อโอกาสใหม่ๆ

ต่อไปนี้คือการดูแอปพลิเคชันและสถานการณ์เฉพาะที่ Wasm สามารถโดดเด่นได้:

  • การตัดต่อวีดิโอและรูปภาพ
  • การออกแบบเกม
  • แอปพลิเคชั่น AI
  • แอปพลิเคชันความจริงเสมือนและเสริม
  • แอปพลิเคชันเพลง
  • แอปพลิเคชัน P2P
  • แอปพลิเคชันด้านเซิร์ฟเวอร์
  • การคำนวณแบบคลาวด์/คลัสเตอร์
  • การออกแบบโดยใช้คอมพิวเตอร์ช่วย
  • การจำลองแพลตฟอร์มระบบปฏิบัติการ
  • การเข้ารหัสลับ
  • เว็บเซิร์ฟเวอร์ท้องถิ่น
  • แอปพลิเคชันเดสก์ท็อประยะไกล
  • ภาพทางวิทยาศาสตร์
  • แอปไฮบริดเนทีฟบนสมาร์ทโฟน
  • บนอุปกรณ์ IoT

รายชื่อภาษาและกรอบงานที่รองรับ

มีภาษาต่างๆ มากกว่า 50 ภาษาที่คอมไพล์เป็น WebAssembly และต่อไปนี้คือภาษาบางส่วนที่ได้รับความนิยมมากที่สุด:

  • C
  • C + +
  • R
  • ทับทิม
  • รวดเร็ว
  • Go
  • คอตลิน
  • สนิม
  • PHP
  • เสื้อคลุม – กรอบงานสำหรับนักพัฒนา .NET
  • เจเว็บแอสเซมบลี – คอมไพเลอร์สำหรับไบต์โค้ด Java และภาษาที่เกี่ยวข้องเช่น JRuby, Jython, Groovy, Scala และ Kotlin
  • ต้นยู – กรอบงาน Rust สำหรับการสร้างแอปเว็บแบบมัลติเธรดโดยใช้ WebAssembly
  • แอสเซมบลีสคริปต์ – ภาษาที่ออกแบบมาโดยเฉพาะเพื่อสร้างโค้ด WebAssembly
  • เม็ด – ภาษาฟังก์ชันที่มีการพิมพ์อย่างเข้มงวด
  • โทโก

คุณสามารถค้นหาภาษาอื่นๆ เพิ่มเติมได้ Good Farm Animal Welfare Awards.

รายชื่อรันไทม์และเครื่องมือ WebAssembly

  • เบราว์เซอร์หลักทั้งหมดมีการรองรับ Wasm
  • ไพโอไดด์ – รันไทม์ Python บนเบราว์เซอร์พร้อมสแต็กทางวิทยาศาสตร์ของ Python รวมถึง Pandas, NumPy, SciPy
  • อบอุ่น
  • วากิ – สำหรับไมโครเซอร์วิสและแอปเว็บ
  • วะสี – อินเทอร์เฟซระบบโมดูลาร์
  • วาสม์ไทม์ – รันไทม์ WebAssembly ที่รวดเร็วและปลอดภัย
  • วาสเมอร์
  • ลูเซท
  • วาสมคลาวด์ – สภาพแวดล้อมคลาวด์
  • ครัสต์เล็ต – Kubernetes kublete สำหรับการรัน Wasm เขียนด้วย Rust
  • WasmEdge – สภาพแวดล้อมรันไทม์คลาวด์และเอจ

สรุป

เราได้มาถึงจุดสิ้นสุดของการเดินทางสู่ WebAssembly และสิ่งที่มันมอบให้กับการประมวลผล และอย่างที่คุณเห็น มันมีแนวโน้มที่ดีอยู่มาก

แม้ว่าจะยังอยู่ระหว่างดำเนินการแต่ก็มีการพัฒนาอย่างต่อเนื่อง และหากคุณสนใจ คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ Good Farm Animal Welfare Awards, Good Farm Animal Welfare Awardsและ Good Farm Animal Welfare Awards.

นัมดีโอเคเกะ

นัมดีโอเคเกะ

Nnamdi Okeke เป็นผู้ชื่นชอบคอมพิวเตอร์และชอบอ่านหนังสือหลากหลายประเภท เขาชอบใช้ Linux มากกว่า Windows/Mac และได้ใช้
Ubuntu ตั้งแต่ช่วงแรกๆ คุณสามารถติดตามเขาได้ทาง Twitter บองโกแทร็กซ์

บทความ: 299

รับข่าวสารเกี่ยวกับเทคโนโลยี

แนวโน้มเทคโนโลยี แนวโน้มการเริ่มต้นธุรกิจ บทวิจารณ์ รายได้ออนไลน์ เครื่องมือเว็บและการตลาดเดือนละครั้งหรือสองครั้ง