เข้าถึง DOM ใน WebAssembly


10

ฉันเพิ่งเริ่มใช้ WebAssembly สำหรับบางโครงการของฉัน ฉันทำเช่นนี้เพราะฉันได้ยินมาว่า Wasm เร็วกว่า javaScript
เมื่อฉันเริ่มโครงการ Wasm แรกของฉันฉันรู้ว่าฉันไม่รู้วิธีจัดการ DOM ใน C ++
มีวิธีการทำเช่นนี้โดยใช้ Wasm?


การจัดการ DOM เป็นการเดินทางครึ่งหนึ่งคุณต้องโทรกลับแอสเซมบลีเว็บจาก JavaScript
amirouche

ฉันจะพิจารณาใช้จาวาสคริปต์ ครึ่งหนึ่งของเว็บไซต์ที่ใช้ web assembly ดูเหมือนจะใช้เพื่อจุดประสงค์ที่เป็นอันตรายดังนั้นผู้ใช้บางรายจึงพยายามปิดการใช้งาน web assembly ในเบราว์เซอร์ของตน
mzuther

คำตอบ:


1

ฉันเพิ่งเริ่มใช้ Web Assembly สำหรับบางโครงการของฉัน ฉันทำเช่นนี้เพราะฉันได้ยินมาว่า wasm เร็วกว่าจาวาสคริปต์

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

https://hacks.mozilla.org/2018/01/oxidizing-source-maps-with-rust-and-webassembly/

อย่างไรก็ตาม WebAssembly ไม่มีการเข้าถึง DOM โดยตรงดังนั้นแม้จะมีประสิทธิภาพที่เหนือกว่าคุณอาจพบว่าช้ากว่า JavaScript สำหรับกรณีการใช้งานของคุณเนื่องจากค่าใช้จ่าย I / O เพิ่มเติม

ด้วยเหตุนี้ในปัจจุบันผู้คนกำลังค้นหาความสำเร็จสูงสุดด้วย WebAssembly สำหรับงานที่ใช้อัลกอริธึม / คำนวณมาก

ฉันรู้ว่าฉันไม่รู้วิธีจัดการ dom ใน c ++ มีวิธีการทำเช่นนี้โดยใช้ตัวต่อ?

ในการจัดการ DOM คุณต้องทำผ่านโฮสต์ JavaScript - โมดูล WebAssembly ของคุณต้องส่งข้อความไปยัง JavaScript เพื่อขอให้จัดการกับ DOM ในนามของ JavaScript

เนื่องจากเป็นความท้าทายที่พบได้ทั่วไปจึงมีโครงการชุมชนหลายแห่งที่มีทางออกให้กับปัญหา ในขณะที่คุณใช้ C ++ สิ่งนี้อาจเป็นที่สนใจของคุณ:

https://github.com/mbasso/asm-dom

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


1

น่าเสียดายที่ DOM สามารถเข้าถึงได้จากเธรด JavaScript หลักของเบราว์เซอร์เท่านั้น โมดูล Service Workers Web Workers และ Web Assembly จะไม่สามารถเข้าถึง DOM การจัดการที่ใกล้เคียงที่สุดที่คุณจะได้รับจาก WASM คือการจัดการออบเจ็กต์สถานะที่ส่งผ่านและสร้างการแสดงผลโดยเธรดหลักที่มีส่วนประกอบ UI ตามสถานะเช่นPreact / React

JSON อนุกรมส่วนใหญ่มักจะใช้ในการส่งรัฐที่มีpostMessage()หรือช่องออกอากาศ สามารถใช้ Bitpacking หรือวัตถุไบนารีกับTransferrableArrayBuffers สำหรับข้อความที่มีประสิทธิภาพมากกว่าซึ่งหลีกเลี่ยงโอเวอร์เฮดของ JSON


"น่าเสียดายที่ DOM สามารถเข้าถึงได้จากเธรด JavaScript หลักของเบราว์เซอร์เท่านั้น" แม้ว่าจะเป็นจริง แต่ก็ไม่ใช่เหตุผลที่ WebAssembly ไม่สามารถโต้ตอบกับ DOM ได้
ColinE
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.