11

हाल ही में मुझे Google Closure Compiler जैसी अच्छी चीज मिली। क्या ऐसे विकल्प हैं जो संकलित स्थैतिक-टाइप की गई भाषाओं के लाभ प्राप्त करने के अवसर प्रदान करते हैं?जावास्क्रिप्ट "कंपाइलर"

अद्यतन

यह जावास्क्रिप्ट जावास्क्रिप्ट अनुवादकों, जो प्रकार सत्यापन आदि, अनुकूलन, और शायद संपीड़न प्रदान करते हैं के बारे में है, असली compilers के बारे में नहीं है।

+3

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

+0

@ फिलिप तो आप कह रहे हैं संकलित भाषाओं 'निष्पादन गति जेएस से तेज है? मैंने हमेशा सोचा कि यह चारों ओर एक और तरीका था (विशेष रूप से मेरे कंप्यूटर के साथ) ... – 0x499602D2

+0

'सांख्यिकीय रूप से टाइप की गई भाषाओं के संकलित' के लाभों से आपका क्या मतलब है? क्या आपका मतलब है कि आप सी-स्टाइल कोड लिखना चाहते हैं जो ** ** जावास्क्रिप्ट में संकलित करता है (जैसे [डार्ट] (http://www.dartlang.org/))? फिलिप बताते हैं, अनुकूलन ** संकलन ** नहीं है। कोई फर्क नहीं पड़ता कि आप क्या पाते हैं, आप अभी भी जावास्क्रिप्ट चला रहे हैं। –

उत्तर

0

हाँ,

जावा, जे एस, पीएचपी, सीएसएस, और HTML "minifiers" कर रहे हैं। उदाहरण के लिए, जब आप प्रोग्रामिंग के लिए Google GWT जावा का उपयोग करते हैं, तो कोड जेएस के न्यूनतमकरण के रूप में उत्पन्न होता है।


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


नई:

आप एक विशेष आईडीई में अपने जावास्क्रिप्ट कोड बनाने के लिए tryed है? आप प्रकार cheking के लिए देख रहे हैं, तो आप इनमें से किसी एक की कोशिश कर सकते:

  • NuSphere PhpED व्यावसायिक v7 (सर्वोत्तम)
  • phpDesigner 8
  • Aptana स्टूडियो
  • Zend स्टूडियो
  • Dreamweaver CS6

उनके पास केवल PHP के लिए अधिक समर्थन नहीं है, लेकिन जावास्क्रिप्ट के लिए, कोड ऑटो-पूर्ण के साथ, सत्यापन सत्यापन , डायनेमिक सिंटेक्स हाइलाइटिंग, एकाधिक भाषा सिंटेक्स हाइलाइटिंग और ओरिएंटेड ऑब्जेक्ट विश्लेषण और टाइप करते समय ऑटो पूर्ण करें।

+5

क्लोजर कंपाइलर मूल मोड में "मिनीमाइज़र" के रूप में कार्य करता है, लेकिन उन्नत मोड में यह वास्तव में एक वास्तविक संकलक की तरह बहुत ही काम करता है, लेकिन बाइटकोड या मशीन कोड की बजाय इसकी लक्षित भाषा के बजाय जावास्क्रिप्ट होता है। केवल एक पेफोल ऑप्टिमाइज़र नहीं है लेकिन कोडपैथ/पहुंच क्षमता, फ़ंक्शन इनलाइनिंग, और अन्य सभी चीजें जिन्हें आप एक अच्छा ऑप्टिमाइज़िंग कंपाइलर करने की अपेक्षा करते हैं। –

+0

@SperanskyDanil, http://fmarcia.info/jsmin/test.html – PSyLoCKe

+1

@ चार्ल्स डफी का प्रयास करें, जीसीसी कला प्रोग्रामिंग की स्थिति है। यह आपके सॉफ़्टवेयर को पढ़ने वाले कुछ रोबोट की तरह है और फिर इसे 5x बेहतर बनाता है। इस तरह Google ने जीमेल को एक महान वेब 2.0 सेवा बना दिया है। – PSyLoCKe

5

अपनी टिप्पणी से:

मैं प्रकार चेकिंग, इंटरफ़ेस चेकिंग, निजी क्षेत्रों आदि की जाँच में दिलचस्पी है, सभी चीजें आप सुरक्षा कोड, न केवल minimizer लिखने के लिए अनुमति देता है।

जावास्क्रिप्ट एक गतिशील रूप से टाइप की गई भाषा है जिसमें कक्षाओं, इंटरफेस या एक्सेस संशोधक के लिए अंतर्निहित समर्थन नहीं है। क्लोजर कंपाइलर जेएसडीओसी टिप्पणियों में एम्बेडेड जानकारी का उपयोग करके इंटरफेस और एक्सेस मॉडिफायर्स जैसे विभिन्न बहिर्वाहिक सुविधाओं का समर्थन करता है। कई आईडीई जेएसडीओसी टैग जानकारी का उपयोग करके स्थैतिक विश्लेषण भी प्रदान करते हैं, उदाहरण के लिए, वेबस्टॉर्म & PhpStorm ब्लॉग: New in 5.0: Google Closure Compiler JSDoc annotations देखें।

जावास्क्रिप्ट minifiers के क्षेत्र में कई विकल्प हैं इस तरह के YUI Compressor, UglifyJS, dojo shrinksafe, Microsoft Ajax Minifier, और JSMIN के रूप में। हालांकि, इनमें से कोई भी उपकरण क्लोजर कंपाइलर के रूप में JSDoc- आधारित विश्लेषण के लिए समान स्तर का समर्थन प्रदान नहीं करता है।

संबंधित ढेर अतिप्रवाह सवाल:

  1. Which Javascript minifier (cruncher) does the same things that the one Google uses for its JS APIs?
  2. What are some good css and js minimizers for production code?
  3. Type checker for JavaScript?
  4. Is there a good JavaScript minimizer?
  5. JavaScript and CSS minimizer
  6. JavaScript compression
  7. What is the current state of JavaScript static type checking?
2

क्लोजर कंपाइलर (Google) जावास्क्रिप्ट के लिए एक वास्तविक कंपाइलर है। विकल्प में टाइपस्क्रिप्ट (माइक्रोसॉफ्ट) और फ्लो (फेसबुक) शामिल हैं। क्लोजर कंपाइलर एनोटेट प्रकारों के लिए jsdoc टिप्पणियों का उपयोग करता है। टाइपस्क्रिप्ट टाइप 3 एनोटेशन प्रदान करने के लिए es3/es5 की तुलना में एक अलग वाक्यविन्यास का उपयोग करता है जो सादे जावास्क्रिप्ट को संकलित करता है। ओकैमल भाषा (जो टाइप अनुमान में उत्कृष्टता प्राप्त करता है) पर फ्लो पिगबैक जितना संभव हो उतना प्रकार की जानकारी का अनुमान लगाने के लिए, लेकिन एक टिप्पणी वाक्यविन्यास में एनोटेशन का उपभोग कर सकते हैं। क्लोजर कंपाइलर बेहतर प्रकार के अनुमान पर भी काम कर रहा है, लेकिन यह उत्पादन के लिए तैयार नहीं है।

@ ईएएसआईआई के जवाब में: क्लोजर कंपाइलर एक वास्तविक कंपाइलर है, न केवल एक मिनीफायर। यह द्वारा काम करता है:

  1. इनपुट .js फ़ाइलों का एक सेट और एक सार वाक्य रचना पेड़ में निर्वासन फ़ाइलें (ECMA 3,5,6 और आम ब्राउज़र के लिए परिभाषित इंटरफेस, खिड़की की तरह वस्तुओं आदि) का एक सेट पार्स (एएसटी)।

  2. संकलक की एक श्रृंखला चल रहा है एएसटी के ऊपर से गुजरता, फिर से लिखने को बदलने, मृत कोड आदि को खत्म करने

  3. एएसटी js स्रोत कोड में वापस निकालते हैं। यह या तो फाइलों को फ़ंक्शन परिभाषाओं (SIMPLE) के भीतर प्रतीकों का नाम बदलने और नामांकित करने के साथ फ़ाइलों को एक साथ जोड़ देगा, या सभी प्रतीकों का नाम बदलकर एक संक्षिप्त और अपरिवर्तित रूप (उन्नत) में पुनर्नामित करेगा।

यहां रुचि रखने वालों के लिए कंपाइलर पास की एक सूची दी गई है। आप देख सकते हैं, वहाँ एक बहुत कुछ चल रहा है:

AliasExternals.java AliasStrings.java AmbiguateProperties.java AnalyzeNameReferences.java AnalyzePrototypeProperties.java AstValidator.java CallGraph.java ChainCalls.java CheckConformance.java CheckDebuggerStatement.java CheckEventfulObjectDisposal.java CheckGlobalNames.java CheckMissingGetCssName.java CheckRegExp.java CheckSideEffects.java ClosureCodeRemoval.java ClosureOptimizePrimitives.java CollapseAnonymousFunctions.java CollapseProperties.java CollapseVariableDeclarations.java ConstCheck.java ConstParamCheck.java ConvertDeclaredTypesToJSDoc.java ConvertToDottedProperties.java ConvertToTypedES6.java CoverageInstrumentationPass.java CreateSyntheticBlocks.java CrossModuleCodeMotion.java CrossModuleMethodMotion.java DeclaredGlobalExternsOnWindow.java DefaultPassConfig.java Denormalize.java DisambiguateProperties.java ErrorPass.java Es6ToEs3ClassSideInheritance.java ExpandJqueryAliases.java ExportTestFunctions.java ExternExportsPass.java ExtractPrototypeMemberDeclarations.java FlowSensitiveInlineVariables.java FunctionNames.java FunctionRewriter.java GatherExternProperties.java GatherRawExports.java GenerateExports.java GlobalNamespace.java GlobalTypeInfo.java GroupVariableDeclarations.java ImplicitNullabilityCheck.java InferConsts.java InjectEs6RuntimeLibrary.java InlineFunctions.java InlineObjectLiterals.java InlineProperties.java InlineVariables.java InstrumentFunctions.java JsMessageVisitor.java MarkNoSideEffectCalls.java MethodCompilerPass.java MinimizeExitPoints.java NameAnalyzer.java NameAnonymousFunctions.java NameAnonymousFunctionsMapped.java NameReferenceGraphConstruction.java NewTypeInference.java Normalize.java ObjectPropertyStringPostprocess.java ObjectPropertyStringPreprocess.java OptimizeArgumentsArray.java OptimizeCalls.java OptimizeParameters.java PeepholeOptimizationsPass.java PhaseOptimizer.java PrepareAst.java ProcessCommonJSModules.java ProcessDefines.java ProcessTweaks.java PureFunctionIdentifier.java RecordFunctionInformation.java RemoveUnusedClassProperties.java RemoveUnusedNames.java RemoveUnusedPrototypeProperties.java RemoveUnusedVars.java RenameLabels.java RenameProperties.java RenamePrototypes.java RenameVars.java ReplaceCssNames.java ReplaceIdGenerators.java ReplaceStrings.java RescopeGlobalSymbols.java RuntimeTypeCheck.java SanityCheck.java ShadowVariables.java SideEffectsAnalysis.java SimpleDefinitionFinder.java StrictModeCheck.java StripCode.java SymbolTable.java TransformAMDToCJSModule.java TypeInferencePass.java TypedScopeCreator.java UnreachableCodeElimination.java VariableVisibilityAnalysis.java

+0

मैं बंटवारे बाल हो सकता है (जैसा कि कहावत है), लेकिन मैं 3 आइटम आप सूचीबद्ध काफी अपने तर्क nullifies लगता है। एक कंपाइलर आम तौर पर एक मानव पठनीय भाषा लेता है और इसे मशीन कोड में परिवर्तित करता है। जब बंद "संकलक" जावास्क्रिप्ट में वापस अपने काम के सभी बदल देता है, कि नए कोड सिर्फ एक साधारण JavaScript इंजन पर चलने के लिए नहीं जा रहा है? मैं यह नहीं कह रहा हूँ कि क्या बंद "संकलक" क्या कर रहा है व्यापक नहीं है और बहुत ही बात है कि एक नियमित रूप से संकलक करता है के करीब है, लेकिन अंत में यह सिर्फ जावास्क्रिप्ट पुनर्गठन कर रहा है, नहीं 'संकलन' यह। – Quantium