क्लाउडफ्लेयर, मोज़िला और फेसबुक ने जावास्क्रिप्ट लोडिंग को तेज करने के लिए बाइनरीएएसटी विकसित किया है

क्लाउडफ्लेयर, मोज़िला, फेसबुक और ब्लूमबर्ग के इंजीनियर प्रस्तुत नया प्रारूप बाइनरीस्ट ब्राउज़र में साइटें खोलते समय जावास्क्रिप्ट कोड की डिलीवरी और प्रसंस्करण में तेजी लाने के लिए। बाइनरीएएसटी पार्सिंग चरण को सर्वर साइड पर ले जाता है और पहले से जेनरेट किए गए अमूर्त सिंटैक्स ट्री की आपूर्ति करता है (एएसटी). बाइनरीएएसटी प्राप्त करने पर, ब्राउज़र जावास्क्रिप्ट स्रोत कोड को पार्स करने को दरकिनार करते हुए तुरंत संकलन चरण पर आगे बढ़ सकता है।

परीक्षण के लिए तैयार एमआईटी लाइसेंस के तहत आपूर्ति किया गया संदर्भ कार्यान्वयन। Node.js घटकों का उपयोग पार्सिंग के लिए किया जाता है, और अनुकूलन और AST पीढ़ी के लिए कोड रस्ट में लिखा जाता है। ब्राउज़र-साइड समर्थन
बाइनरीएएसटी पहले से ही उपलब्ध है रात्रि सभा फ़ायरफ़ॉक्स। बाइनरीएएसटी में एनकोडर का उपयोग अंतिम साइट टूलींग स्तर पर और प्रॉक्सी या सामग्री वितरण नेटवर्क के किनारे बाहरी साइटों की पैकेजिंग स्क्रिप्ट के लिए किया जा सकता है। वर्तमान में, कार्य समूह द्वारा बाइनरीएएसटी के मानकीकरण की प्रक्रिया पहले ही शुरू हो चुकी है ईसीएमए टीसी39, जिसके बाद प्रारूप मौजूदा सामग्री संपीड़न विधियों, जैसे कि gzip और brotli, के साथ सह-अस्तित्व में सक्षम हो जाएगा।

क्लाउडफ्लेयर, मोज़िला और फेसबुक ने जावास्क्रिप्ट लोडिंग को तेज करने के लिए बाइनरीएएसटी विकसित किया है

क्लाउडफ्लेयर, मोज़िला और फेसबुक ने जावास्क्रिप्ट लोडिंग को तेज करने के लिए बाइनरीएएसटी विकसित किया है

जावास्क्रिप्ट को संसाधित करते समय, कोड के लोडिंग और पार्सिंग चरण में काफी समय व्यतीत होता है। यह देखते हुए कि कई लोकप्रिय साइटों पर डाउनलोड की गई जावास्क्रिप्ट की मात्रा 10 एमबी के करीब है (उदाहरण के लिए, लिंक्डइन के लिए - 7.2 एमबी, फेसबुक - 7.1 एमबी, जीमेल - 3.9 एमबी), जावास्क्रिप्ट की प्रारंभिक प्रसंस्करण में महत्वपूर्ण देरी होती है। कोड लोड होने पर तुरंत एएसटी को पूरी तरह से बनाने में असमर्थता के कारण ब्राउज़र पक्ष पर पार्सिंग चरण भी धीमा हो जाता है (ब्राउज़र को कोड ब्लॉक को लोड करने के लिए इंतजार करना पड़ता है, जैसे कि फ़ंक्शंस का अंत, प्राप्त करने के लिए) मौजूदा तत्वों को पार्स करने के लिए जानकारी गायब है)।

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

एक अन्य विकल्प जावास्क्रिप्ट स्क्रिप्ट के बजाय रेडीमेड संकलित बाइटकोड वितरित करना है, लेकिन ब्राउज़र इंजन डेवलपर्स इसके खिलाफ हैं क्योंकि तृतीय-पक्ष बाइटकोड को सत्यापित करना मुश्किल है, इसके सीधे प्रसंस्करण से वेब स्तरीकरण हो सकता है, अतिरिक्त सुरक्षा जोखिम उत्पन्न हो सकते हैं, और का विकास हो सकता है। एक सार्वभौमिक बाइटकोड प्रारूप की आवश्यकता है।

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

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

Facebook.com कोड के परीक्षणों से पता चला कि जावास्क्रिप्ट को पार्स करने में 10-15% CPU संसाधनों की खपत होती है और पार्सिंग में JIT के लिए बाइटकोड और प्रारंभिक कोड जेनरेशन की तुलना में अधिक समय लगता है। स्पाइडरमंकी इंजन में, एएसटी को पूरी तरह से बनाने में 500-800 एमएस का समय लगता है, और बाइनरीएएसटी के उपयोग से यह आंकड़ा 70-90% कम हो गया है।
सामान्य तौर पर, अधिकांश वेब आतिशबाजी के लिए, बाइनरीएएसटी का उपयोग करते समय, अनुकूलन के बिना मोड में जावास्क्रिप्ट पार्सिंग समय 3-10% कम हो जाता है और अप्रयुक्त कार्यों को अनदेखा करने का मोड सक्षम होने पर 90-97% कम हो जाता है।
1.2 एमबी जावास्क्रिप्ट परीक्षण सेट चलाते समय, बाइनरीएएसटी का उपयोग करने से डेस्कटॉप सिस्टम (इंटेल i338) पर स्टार्टअप समय 314 से 7 एमएस तक और मोबाइल डिवाइस (एचटीसी वन एम2019) पर 1455 से 8 एमएस तक की गति हो सकती है।

स्रोत: opennet.ru

एक टिप्पणी जोड़ें