DOM को WebAssembly में एक्सेस करें


10

मैंने हाल ही में अपनी कुछ परियोजनाओं के लिए WebAssembly का उपयोग शुरू किया है। मैं ऐसा कर रहा हूं क्योंकि मैंने सुना है कि वासम javaScript से तेज है।
जब मैंने वास्तव में अपना पहला वासम प्रोजेक्ट शुरू किया, तो मुझे एहसास हुआ कि मुझे नहीं पता है कि डोम को सी ++ में कैसे हेरफेर किया जाए।
क्या कोई ऐसा तरीका है जोकि Wasm का उपयोग करता है?


DOM को मैनिपुलेट करना आधी यात्रा है, आपको जावास्क्रिप्ट से वेब असेंबली को भी कॉल करना होगा।
अमीरोचे

जब तक आपकी स्क्रिप्ट का प्रदर्शन वास्तव में मायने नहीं रखता, मैं जावास्क्रिप्ट के साथ चिपके रहने पर विचार करूंगा। वेब असेंबली का उपयोग करने वाली आधी वेबसाइटें इसे दुर्भावनापूर्ण उद्देश्यों के लिए उपयोग करती हैं , इसलिए कुछ उपयोगकर्ता पहले से ही अपने ब्राउज़र में वेब असेंबली को अक्षम करने का प्रयास करते हैं।
मझुथर

जवाबों:


1

मैंने हाल ही में अपनी कुछ परियोजनाओं के लिए वेब असेंबली का उपयोग शुरू किया है। मैं ऐसा कर रहा हूं क्योंकि मैंने सुना है कि मी जावास्क्रिप्ट से तेज है।

WebAssembly जावास्क्रिप्ट की तुलना में तेज़ है, लेकिन केवल कुछ उपयोग-मामलों के लिए। WebAssembly के साथ आपके ब्राउज़र को अपने कोड को डाउनलोड करने और संकलित करने के लिए कम काम करना पड़ता है, जिससे यह तेजी से स्टार्ट-अप समय देता है। हालाँकि, जब WebAssembly का रनटाइम प्रदर्शन आम तौर पर जावास्क्रिप्ट से केवल 2 से 3 गुना तेज होता है। बहुत अच्छी और व्यावहारिक तुलना के लिए निम्नलिखित लेख देखें:

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

हालाँकि, WebAssembly का कोई सीधा DOM एक्सेस नहीं है, इसलिए इसके बेहतर प्रदर्शन के बावजूद, आप पा सकते हैं कि अतिरिक्त I / O ओवरहेड के कारण यह आपके उपयोग के मामले में JavaScript की तुलना में धीमा है।

इस कारण से, वर्तमान में लोग एल्गोरिदम / कम्प्यूट-गहन कार्यों के लिए WebAssembly के साथ सबसे अधिक सफलता पा रहे हैं।

मुझे एहसास हुआ कि मुझे पता नहीं है कि कैसे सी + + में डोम को हेरफेर करना है। क्या कोई ऐसा करने का कोई तरीका है जो wasm का उपयोग करता है?

DOM को हेरफेर करने के लिए आपको जावास्क्रिप्ट होस्ट के माध्यम से ऐसा करना होगा - आपके WebAssembly मॉड्यूल को अपनी ओर से DOM को मैनिपुलेट करने के लिए जावास्क्रिप्ट 'पूछ' पर संदेश भेजना होगा।

जैसा कि यह काफी आम चुनौती है, विभिन्न सामुदायिक परियोजनाएं हैं जिनके पास समस्या का समाधान है। जैसा कि आप C ++ का उपयोग कर रहे हैं, यह आपके लिए ब्याज की हो सकती है:

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

भविष्य में, यह आसान हो जाएगा, इंटरफ़ेस प्रकार जैसे प्रस्ताव मेजबान वातावरण के साथ हस्तक्षेप करना आसान बना रहे हैं और वेब एपीआई को सीधे WebAssembly से कॉल करने की अनुमति दे सकते हैं।


1

दुर्भाग्य से, DOM को केवल ब्राउज़र के मुख्य जावास्क्रिप्ट थ्रेड के भीतर पहुँचा जा सकता है। सर्विस वर्कर्स, वेब वर्कर्स और वेब असेंबली मॉड्यूल्स में DOM एक्सेस नहीं होगा। WASM से आपको प्राप्त होने वाली निकटतम हेरफेर राज्य की उन वस्तुओं में हेरफेर करने के लिए है जो कि Preact / React जैसे राज्य-आधारित UI घटकों के साथ मुख्य थ्रेड द्वारा पारित और रेंडर की गई हैं ।

JSON सीरियलाइजेशन का उपयोग अक्सर postMessage()या ब्रॉडकास्ट चैनल के साथ राज्य को पारित करने के लिए किया जाता है । बिटकॉइनिंग या बाइनरी ऑब्जेक्ट्स को Transferrableअधिक निष्पादन वाले संदेशों के लिए ArrayBuffers के साथ इस्तेमाल किया जा सकता है जो JSON क्रमांकन / डीरियलाइज़ेशन ओवरहेड से बचते हैं।


"दुर्भाग्य से, DOM को केवल ब्राउज़र के मुख्य जावास्क्रिप्ट थ्रेड के भीतर ही एक्सेस किया जा सकता है" - जबकि यह सच है, यही कारण है कि WebAssembly DOM के साथ बातचीत नहीं कर सकता है।
कॉलिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.