Complexity

हर preset के पीछे का एक ही dial: संख्या बढ़ने पर क्या बढ़ता है, वह एक threshold जो medium पर बदलता है, और कौन-से transformations config बंद कर सकती है पर ज़बरदस्ती चालू नहीं।

complexity वह एक dial है जो तय करता है कि engine कितनी सुरक्षा लागू करे। एक preset इस पर एक नामित बिंदु है: light का मान 5 है, hard का 12। light identifiers को rename करता है, syntax को दोबारा लिखता है और strings को encode करता है, बिना किसी संरचनात्मक layer के; medium और ऊपर, और सीधे सेट किए गए किसी भी मान के लिए, हर token को target की ओर ले जाया जाता है। बीच के या उससे आगे के मान के लिए complexity सीधे सेट करें — यह एक असीमित गैर-ऋणात्मक संख्या है।

संख्या के साथ क्या बढ़ता है

Complexity एक budget है, कोई schedule नहीं। "इस संख्या पर यह feature" जैसी कोई निश्चित सूची नहीं है। 0 से ऊपर, मान बढ़ने के साथ engine बड़ा budget खर्च करता है और हर build में तय करता है कि कौन-से transformations लागू हों — इसलिए एक ही complexity पर दो builds की संरचना अलग होती है, और किसी दिए गए स्तर पर कोई एक transformation निश्चित नहीं है। हर build का यही अंतर असली मकसद है: निश्चित संरचना एक fingerprint क्यों बन जाती, यह जानने के लिए देखें AfterPack कैसे काम करता है।

तीन चीज़ें निश्चित हैं:

complexityक्या गारंटीड है
0 (minify)कोई obfuscation नहीं। Identifiers rename किए जाते हैं और code compress किया जाता है; नीचे का कुछ भी नहीं चलता। Engine 0.2.2 0 पर syntax को भी दोबारा लिखता था।
> 0हर string literal जिसे engine फिर से लिख सकता है, एक runtime decoder से होकर जाता है — यही string floor है।
≥ 7 (medium और ऊपर)Encoded strings और integers एक साझा runtime value से keyed होते हैं, और object literals अलग-अलग आकारों में दोबारा बनाए जाते हैं।

बाकी सब — control-flow reshaping, opaque predicates, integer-expression interpretation और अन्य — budget बढ़ने के साथ उसी से लिया जाता है, किसी एक रेखा पर चालू नहीं होता। inflation.max यह नहीं बदलता कि इनमें से कौन-से लागू हों: सेट न होने पर केवल target तय करता है, और जो build आपके सेट किए मान से आगे बढ़ती, वह विफल हो जाती है।

किसी transformation को बंद या चालू करना

आप किसी भी तरह के transformation को बंद कर सकते हैं। किसी को ज़बरदस्ती चालू नहीं कर सकते।

  • बंद करना भरोसेमंद है। transforms.<kind>.enabled = false उस kind को किसी भी complexity पर हटा देता है। Engine 0.2.3 से, 7 और ऊपर scopeDeepen बंद करने से फ़ाइल का कोई हिस्सा अपने target से नीचे रह सकता है, और तब build DIAG_TARGET_NOT_REACHED के साथ fail होती है और lines का नाम बताती है।
  • चालू करना एक अनुमति है। true engine को एक kind इस्तेमाल करने देता है; फिर भी वह हर build में तय करता है कि complexity और budget को उसकी ज़रूरत है या नहीं। आपके द्वारा बढ़ाए गए region के बाहर, light build जो kinds लागू करती है, वे केवल string encoding और, Pro पर, comparisonHardening हैं। objectConstruction केवल 7 (medium) और ऊपर दिखता है, और दो Pro kinds के लिए Pro build चाहिए।
  • 0 पर इनमें से कुछ भी लागू नहीं होता। minify कोई transformation नहीं चलाता, इसलिए हर transforms flag बेमानी है।

किसी transformation की संभावना बढ़ाने के लिए, कोई flag बदलने के बजाय complexity बढ़ाएँ।

आगे