सर्वश्रेष्ठ जावास्क्रिप्ट कंप्रेसर [बंद]


171

सबसे अच्छा जावास्क्रिप्ट कंप्रेसर क्या उपलब्ध है? मैं एक उपकरण की तलाश में हूँ जो:

  • उपयोग में आसान है
  • एक उच्च संपीड़न दर है
  • विश्वसनीय अंतिम परिणाम बनाएं (कोड को गड़बड़ाना नहीं)

14
किसी को भी 2011 में स्थिति पता है?
दान

4
यह अब 2012 है, और मुझे लगता है कि UglifyJS और क्लोजर विजेता हैं, मैं UglifyJS का उपयोग करता हूं और यह आमतौर पर पैंट को हर चीज से अलग करता है।
मोकिस्टीनन

मैं अपने jQuery के मोबाइल मल्टी-पेज ऐप के लिए htmlcompressor.com/compressor.html का उपयोग करता हूं। यह HTML फ़ाइल को <script> टैग के साथ लेता है और HTML, JavaScript और CSS को संक्षिप्त करता है। एक जादू की तरह काम करता है।
एंडर्स

यह 2017 है - अब नवीनतम क्या है?
अभिनव सिंघी

यह 2020 है। डिफ़ॉल्ट "सुरक्षित" कॉन्फ़िगरेशन के साथ, UglifyJS मामूली जीतता है क्योंकि यह अधिक "सुरक्षित" है। उन्नत पावर-उपयोगों के लिए, क्लोजर कंपाइलर UglifyJS के गधे को ही सौंपता है। ADVANCDED_OPTIMIZATIONS के साथ क्लोजर कंपाइलर एक ही समय में आपके वर्कफ़्लो और आपके कोड को ऑप्टिमाइज़ करने में मदद करने वाले सभी प्रकार के ट्रिक्स कर सकता है। देखें stackoverflow.com/a/50355530/5601591 बंद संकलक की प्रभावशीलता के उदाहरण के लिए (अस्वीकरण: मैं एक उपयुक्त ब्लॉग पोस्ट कहीं तो मैं एक पोस्ट मैंने लिखा का उल्लेख किया था नहीं मिला,)।
जैक गिफिन

जवाबों:


149

मैंने हाल ही में UglifyJS , एक जावास्क्रिप्ट कंप्रेसर जारी किया है जो जावास्क्रिप्ट में लिखा गया है (NodeJS Node.js प्लेटफ़ॉर्म पर चलता है, लेकिन इसे किसी भी जावास्क्रिप्ट इंजन पर चलाने के लिए आसानी से संशोधित किया जा सकता है, क्योंकि इसके लिए किसी इंटर्न की आवश्यकता नहीं है Node.js)। यह YUI कंप्रेसर और Google क्लोजर दोनों की तुलना में बहुत तेज है , यह उन सभी लिपियों पर YUI की तुलना में बेहतर है जो मैंने इसका परीक्षण किया था, और यह क्लोजर की तुलना में अधिक सुरक्षित है ("eval" या "with" के साथ व्यवहार करना जानता है)।

व्हाट्सएप हटाने के अलावा, UglifyJS भी निम्नलिखित कार्य करता है:

  • परिवर्तनशील स्थानीय नाम (आमतौर पर एकल वर्ण)
  • लगातार var घोषणाओं में शामिल होता है
  • किसी भी अनावश्यक कोष्ठक, परेंस और अर्धविराम को डालने से बचा जाता है
  • IFs का अनुकूलन करता है ("अन्य" को निकालता है जब यह पता लगाता है कि इसकी आवश्यकता नहीं है, IFs को &&, || या? /: ऑपरेटरों में जब संभव हो, आदि में बदल देता है)।
  • जहां संभव हो, वहां रूपांतरित हो foo["bar"]जाता foo.barहै
  • जहां संभव हो, वस्तु शाब्दिक में कुंजियों से उद्धरण निकालता है
  • जब यह छोटे कोड (1 + 3 * 4 ==> 13) की ओर जाता है तो सरल भावों को हल करता है

पुनश्च: ओह, यह "सुशोभित" भी कर सकता है। ;-)


17
हम एंटरप्राइज़-क्लास एप्लिकेशन में कुरूप का उपयोग करते हैं। यह अच्छा काम कर रहा है।
ग्योरग्यबहारम

क्या आप नोड पर jsmin की तुलना कर सकते हैं?
ग्रिंगो सुवे

हाल ही में Uglify ने एपीआई कॉल्स
गडेलकेरेम

@ मीशू अरे, मुझे आपका Uglify JS2 बहुत पसंद है। मेरा नेटवर्क इन दिनों ठीक काम नहीं कर रहा है ... मैं इसे विंडोज पर उपयोग करना चाहता हूं। कुछ हल? : ओ)
हाइड्रोपर

@ मीशू मैं git लिंक दिखाता हूँ लेकिन विचार नहीं मिलता कि इसे कैसे उपयोग किया जाए
Sachin Sarola

124

कुछ वर्षों बाद इस सवाल पर दोबारा गौर करते हुए, UglifyJS , अब तक का सबसे अच्छा विकल्प लगता है।

जैसा कि नीचे कहा गया है, यह NodeJS प्लेटफॉर्म पर चलता है, लेकिन इसे किसी भी जावास्क्रिप्ट इंजन पर चलाने के लिए आसानी से संशोधित किया जा सकता है।

--- नीचे पुराना उत्तर ---

गूगल जारी की क्लोजर संकलक जो के रूप में देखा अब तक के सबसे छोटे फ़ाइलें पैदा किया जा रहा है यहाँ और यहाँ

इससे पहले विभिन्न विकल्प निम्नानुसार थे

मूल रूप से पैकर प्रारंभिक संपीड़न पर एक बेहतर काम करता है, लेकिन अगर आप तार पर भेजने से पहले फाइलों को जिप करने जा रहे हैं (जो आपको करना चाहिए) YUI कंप्रेसर को सबसे छोटा अंतिम आकार मिलता है।

परीक्षण jQuery कोड btw पर किए गए थे।

  • मूल jQuery लाइब्रेरी 62,885 बाइट्स, 19,758 बाइट्स गज़िप के बाद
  • jQuery ने JSMin 36,391 बाइट्स के साथ, 11,541 बाइट्स गज़िप के बाद हासिल किए
  • jQuery के पैकर 21,557 बाइट्स, गज़िप के बाद 11,119 बाइट्स
  • jQuery ने YUI कंप्रेसर 31,822 बाइट्स, 10,818 बाइट्स के साथ गज़िप के बाद कीया

@ डैनियल जेम्स ने कम्प्रेशर कंप्रेसर में उल्लेख किया है जो पैकर को सर्वश्रेष्ठ संपीड़न में चार्ट का नेतृत्व करता है, इसलिए मुझे लगता है कि यमव


पैकर के पास 'बेस 62 एनकोड' बंद करने का एक विकल्प है - और jQuery के लिए यह gzip के बाद यूआई से छोटा होता है। इसका कारण यह है कि jquery 'eval' और 'with' का उपयोग करता है जो कि 'सेक्योर' कंप्रेशर्स को कुछ कंप्रेशन करने से रोकता है, लेकिन पैकर उन्हें अनदेखा कर देता है। सामान्य रूप से सुरक्षित नहीं है लेकिन पैकर के लिए jQuery का परीक्षण किया जाता है।
डैनियल जेम्स

अगर आपको मुझ पर विश्वास नहीं है , तो भी, कंप्रेसर की कोशिश करें।
डैनियल जेम्स

9
पैक करने के लिए नकारात्मक पक्ष मत भूलना - अपघटन समय।
नोसरेडना

1
बाहर देखें, Google बंद कभी-कभी सबसे खराब कंप्रेसर हो सकता है (मूल से भी बड़ा आउटपुट) - यह \uxxxxडिफ़ॉल्ट रूप से स्ट्रिंग में गैर-एससीआई अक्षर को शाब्दिक रूप में परिवर्तित करता है .. उदाहरण के लिए उपयोग करें --charset UTF-8(यदि आप सुनिश्चित हैं कि आप ब्राउज़र को इसके बारे में किसी तरह जानते हैं)
mykhal

क्लोजरकॉमपाइलर आउटपुट मेरे लिए काम नहीं करता है। jscompress.com काम करता है
codenamezero

43

YUI कंप्रेसर जाने का रास्ता है। इसकी एक महान संपीड़न दर है, अच्छी तरह से परीक्षण किया गया है और कई शीर्ष साइटों के बीच उपयोग में है, और, अच्छी तरह से, व्यक्तिगत रूप से मेरे द्वारा अनुशंसित।

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

मैंने इसकी सीएसएस संपीड़न क्षमताओं का कभी उपयोग नहीं किया है, लेकिन वे भी मौजूद हैं। सीएसएस संपीड़न बस के रूप में अच्छी तरह से काम करता है।

नोट: हालांकि डीन एडवर्ड्स / पैकर / YUI कंप्रेसर की तुलना में बेहतर संपीड़न दर प्राप्त करता है, मैं इसका उपयोग करते समय कुछ जावास्क्रिप्ट त्रुटियों में भाग गया।


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


यहाँ कंप्रेसर के एक ऑनलाइन संस्करण के मामले में आप जावा चलाने के साथ सौदा नहीं करना चाहते हैं: ताज़ा-sf.com/yui
ब्रायन लीजेंड

जब तक आप Base62 एनकोड विकल्प की जाँच नहीं कर लेते, तब तक पैकर के उपयोग से संकुचित लिपियों को अनपैक करने की आवश्यकता नहीं है (जो कि आपको नहीं करना चाहिए क्योंकि यह आम आदमी की गज़िप है - मुझे यकीन है कि अधिकांश आधुनिक सर्वर gzip का समर्थन करते हैं)। बेस 62 एनकोडेड फाइल को जिप करने का कोई मतलब नहीं है क्योंकि शोषण के लिए कोई अतिरेक नहीं बचा है। पैकर का नवीनतम संस्करण (अंतिम संस्करण) बग का परिचय नहीं देता है, इसमें अनपैकिंग ओवरहेड (जब तक आप base62 एनकोड नहीं करते हैं) नहीं है, और फिर भी सबसे अधिक संपीड़न प्राप्त करता है। इसके अलावा पैकर का कमांड लाइन संस्करण भी है। बस NPM का उपयोग कर के रूप में निम्नानुसार इसे स्थापित: npm install packer। (= डी
एडिट एम शाह

8

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

मेरे पास वास्तव में मेरे वर्तमान विज़ुअल स्टूडियो समाधान में एक वेब परिनियोजन परियोजना में एक MSBuild कार्य है जो एक स्क्रिप्ट चलाता है जो बदले में समाधान के JS फाइलों को श्रिंकसेफ़ के माध्यम से चलाता है।

संपादित करें: वैसे, "सर्वश्रेष्ठ" बहस के लिए खुला है, क्योंकि "सर्वश्रेष्ठ" के मानदंड परियोजना की जरूरतों के आधार पर अलग-अलग होंगे। व्यक्तिगत रूप से, मुझे लगता है कि श्रिंकसेफ़ एक अच्छा संतुलन है; कुछ लोगों के लिए जो सबसे छोटे आकार == को सबसे अच्छा मानते हैं, यह अपर्याप्त होगा।

EDIT: यह ध्यान देने योग्य है कि YUI कंप्रेसर राइनो का भी उपयोग करता है।


5

JSMin आज़माएं , C #, Java, C और अन्य पोर्ट्स और आसानी से उपलब्ध हैं।


क्या C # पोर्ट को स्थानांतरित / हटा दिया गया है?
ग्रेग बी

4

यदि आप पैकर का उपयोग करते हैं, तो बस 'सिकुड़ा चर' विकल्प पर जाएं और परिणामी कोड को ज़िप करें। आधार 62 विकल्प केवल तभी है जब आपका सर्वर gzipped files नहीं भेज सकता है। पैकर के साथ 'सिकुड़ा हुआ वर्जन' वाईयूआई बेहतर संपीड़न प्राप्त करता है, लेकिन अगर आप कहीं अर्धविराम छोड़ दिया है तो बग का परिचय दे सकते हैं।

बेस 62 मूल रूप से एक गरीब आदमी की गज़िप है, यही वजह है कि बेस 62-एड कोड को जिप्पी करने से आपको सिकुड़न-वार-एड कोड की तुलना में बड़ी फाइलें मिलती हैं।





1

यहाँ एक YUI कंप्रेसर लिपि ( ब्युरिक ) है जो सभी js को खोजती है और एक पथ को नीचे ले जाती है और उन्हें (वैकल्पिक रूप से) ऑबस्पैक्ट करती है। एक बिल्ड प्रक्रिया में एकीकृत करने के लिए अच्छा है।



1

KJScompress

http://opensource.seznam.cz/KJScompress/index.html

Kjscompress / csskompress जावास्क्रिप्ट और सीएसएस युक्त फाइलों से गैर-महत्वपूर्ण व्हाट्सएप और टिप्पणियों को हटाने के लिए दो अनुप्रयोगों (kjscompress a csscompress) का सेट है। दोनों जीएनयू / लिनक्स ऑपरेटिंग सिस्टम के लिए कमांड-लाइन एप्लिकेशन हैं।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.