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





