Async Executor

Pro
v7.3.0+

VM को एसिंक्रोनस रूप से चलाएँ, ताकि बाइटकोड डिक्रिप्शन कुंजी बंडल के अंदर भेजने के बजाय रनटाइम पर लाई जा सके।

देखें

Obfuscator.io Async Executor: Async Bytecode Key Getter and Async-Only VM Virtualization

YouTube पर देखें

vmAsyncExecutor विकल्प एसिंक्रोनस VM एक्ज़ीक्यूटर चालू करता है। इसका सबसे बड़ा फ़ायदा यह है कि अब vmBytecodeArrayEncodingKeyGetter एक Promise लौटा सकता है - यानी एक एसिंक्रोनस कुंजी-गेटर - जिससे डिक्रिप्शन कुंजी लोड के समय किसी नेटवर्क अनुरोध, IndexedDB या किसी भी एसिंक स्रोत से आ सकती है, बजाय इसके कि कोड के पहली बार चलने पर वह सिंक्रोनस रूप से उपलब्ध हो।

बैकएंड से कुंजी लाने की पूरी प्रक्रिया के लिए Bytecode Array Encoding कुंजी देखें।

इसे कब इस्तेमाल करें

पूरी तरह एसिंक कोडबेस के लिए यह बेहद अनुशंसित है। इस मोड में केवल async फ़ंक्शन्स ही वर्चुअलाइज़ किए जाते हैं - किसी सिंक्रोनस फ़ंक्शन को एसिंक बनाने पर उसका रिटर्न मान Promise बन जाएगा और उसे कॉल करने वाला कोड टूट जाएगा - इसलिए जो कोड पूरी तरह async है, उसे सबसे ज़्यादा कवरेज मिलती है। रूट सिंक्रोनस होने पर भी यह काम करता है (उदाहरण के लिए कोई सिंक IIFE या UMD रैपर): अंदर मौजूद सबसे बाहरी async फ़ंक्शन्स सुरक्षित हो जाते हैं और सिंक हिस्से वर्चुअलाइज़ नहीं होते (बाकी ऑब्फ़स्केशन फिर भी लागू होता है)।

क्या-क्या बदला जाता है

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

JavaScript

छूटे हुए फ़ंक्शन और चेतावनियाँ

जब कोई एसिंक्रोनस कुंजी-गेटर सक्रिय हो, तो एसिंक जनरेटर्स भी वर्चुअलाइज़ नहीं किए जाते - एक एसिंक जनरेटर को अपना इटरेटर सिंक्रोनस रूप से लौटाना पड़ता है और वह कुंजी का इंतज़ार नहीं कर सकता। डिफ़ॉल्ट vmTargetFunctionsMode: 'root' में ये छूट चुपचाप होती हैं (चयन अपने आप होता है), सिवाय तब जब कुछ भी वर्चुअलाइज़ न हो - तब VMNoFunctionsToVirtualize रिपोर्ट होती है। 'comment' मोड में, जब भी आपके द्वारा स्पष्ट रूप से चिह्नित कोई फ़ंक्शन वर्चुअलाइज़ नहीं हो पाता - वह सिंक्रोनस निकला, या एसिंक कुंजी-गेटर के तहत एसिंक जनरेटर है - तो एक चेतावनी रिपोर्ट की जाती है (डैशबोर्ड में, और API रिस्पॉन्स की warnings ऐरे में)। इन चेतावनियों (VMSyncFunctionSkippedInAsyncMode, VMAsyncGeneratorSkippedInAsyncMode) को warnings विकल्प (v7.8.0+) से प्रति-प्रकार बंद किया जा सकता है।

root मोड में, vmAsyncExecutor टॉप-लेवल वेरिएबल इनिशियलाइज़र्स को सादे JavaScript में ही छोड़ देता है, भले ही vmWrapTopLevelInitializers चालू हो, और (v7.8.0+) एक VMTopLevelInitializerNotVirtualized चेतावनी उन्हें सूचीबद्ध करती है।

आवश्यकताएँ

  • एसिंक्रोनस कुंजी-गेटर के लिए vmBytecodeArrayEncoding ज़रूरी है, और vmBytecodeArrayEncodingKeyGetter के साथ vmBytecodeArrayEncodingKey भी होना चाहिए - ऑब्फ़स्केटर जाँचता है कि दोनों सेट हों (या दोनों अनुपस्थित हों) और गेटर एक एक्सप्रेशन के रूप में पार्स हो, अन्यथा बिल्ड अस्वीकार कर देता है।
  • ऑब्फ़स्केटर संस्करण 7.3.0 या उससे नया।

सिर्फ़ यह विकल्प चालू करने से एक्ज़ीक्यूटर एसिंक मोड में चला जाता है (केवल सबसे बाहरी async फ़ंक्शन्स वर्चुअलाइज़ होते हैं)। रनटाइम पर कुंजी लाने की सुविधा तब खुलती है जब कुंजी-गेटर Promise लौटाए, और इसके लिए कुंजी-गेटर के साथ Bytecode Array Encoding भी ज़रूरी है। गेटर Promise लौटाता है या नहीं, यह बिल्ड के समय जाँचा नहीं जा सकता, इसलिए vmAsyncExecutor बंद होने पर Promise लौटाने वाला गेटर रनटाइम पर विफल होता है - डिकोडर को कुंजी के बजाय Promise मिलता है।

उदाहरण

JavaScript

पूरी तरह सिंक्रोनस कोडबेस में लगभग कुछ भी वर्चुअलाइज़ नहीं होता, क्योंकि केवल async फ़ंक्शन्स ही पात्र होते हैं। अगर आपके एंट्री पॉइंट async नहीं हैं, तो सिंक्रोनस कुंजी-गेटर चुनें और vmAsyncExecutor बंद रहने दें।