2010-07-10 15 views
37

मेरे पास jquery में निवेश किया गया है और इसके साथ एक बड़ा एप्लिकेशन बनाया गया है। हाल ही में मैं Google Closure Library की समीक्षा कर रहा हूं, लेकिन इस समय यह jquery के रूप में लगभग सुरुचिपूर्ण नहीं पाया गया है। मेरा मानना ​​है कि इसमें कुछ संभावित हो सकता है और इसमें अधिक ध्यान दिया जाएगा, लेकिन अब के लिए मैं अपने आधार ढांचे के रूप में jQuery का उपयोग जारी रखना चाहता हूं।jQuery अनुप्रयोगों के साथ Google क्लोजर कंपाइलर

हालांकि, मैं Google Closure Compiler से बेहद प्रभावित हूं। मैं अपने आवेदन की निर्माण प्रक्रिया के दौरान इसका उपयोग शुरू करना पसंद करूंगा। दुर्भाग्यवश, यह बिल्कुल स्पष्ट नहीं है कि उन परियोजनाओं के लिए इसका उपयोग करना कितना आसान होगा जो मानक Google क्लोजर मानकों का पालन नहीं करते हैं।

क्या jquery- आधारित परियोजनाओं को विकसित करने और Google क्लोजर कंपाइलर का उपयोग करने पर कोई सर्वोत्तम प्रथाएं या अच्छे संसाधन हैं? उदाहरण के लिए:

  1. यह भावना इसके साथ jQuery और jQuery ui को संकलित करने के लिए बनाने के है, या मैं गूगल CDN पर इन संसाधनों को इंगित करना जारी रखना चाहिए? मुझे यकीन है कि मेरी jquery और jquery-ui छोटी होगी क्योंकि मैं पुस्तकालयों की सभी सुविधाओं का उपयोग नहीं करता हूं, लेकिन एक सीडीएन को इंगित करने से संभावना है कि फाइल विज़िटर के कैश में पहले से ही हो सकती है।

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

  3. वर्तमान में मेरे प्रोजेक्ट में जावा बैकएंड है और इसे मैवेन के साथ बनाया गया है। क्या इस बिल्ड प्रक्रिया में Google क्लोजर कंपाइलर जोड़ने का अर्थ है?

असल में, मैं किसी भी अच्छे संसाधन की तलाश में हूं जो jQuery के साथ Google क्लोजर कंपाइलर का उपयोग करने के लिए विशिष्ट है।

+0

http://code.google.com/intl/pt-BR/closure/compiler/docs/api-tutorial3.html#mixed – Trinidad

उत्तर

10

Google क्लोजर कंपाइलर jQuery या कोई अन्य लाइब्रेरी अज्ञेयवादी है। यह अनुकूलन के दो प्रकार है -

  • सरल
  • उन्नत

मैं उन्नत अनुकूलन को लागू करने की कोशिश की है, लेकिन यह गंभीर रूप से अपने आवेदन तोड़ दिया। यदि यह वही करता है, तो आप या तो अपने आवेदन को ठीक करने का प्रयास कर सकते हैं, या सरल अनुकूलन का उपयोग कर सकते हैं। वहाँ सरल अनुकूलन के साथ आकार में एक 32% की गिरावट, और उन्नत अनुकूलन के साथ चारों ओर 68% थी, लेकिन है कि वैसे भी बाहर काम नहीं किया।

अपने निर्माण की प्रक्रिया के लिए एक स्वचालित फैशन में जे एस संयोजन चलती निश्चित रूप से जाने के लिए रास्ता है। JavaScript dependency management देखें।

jQuery पहले से ही बाइट आकार के लिए अनुकूलित किया गया है, इसलिए मुझे संदेह है कि आप Google क्लोजर कंपाइलर का उपयोग करके पर्याप्त रस निचोड़ने में सक्षम होंगे, लेकिन यह आपके प्रोजेक्ट के साथ संयुक्त होने पर प्रयास करने योग्य है।

मैं एक अनुकूल प्रकाश में गूगल बंद लाइब्रेरी देखते हैं, लेकिन जैसा कि मैंने भारी इस बिंदु पर MooTools में निवेश कर रहा हूँ इसे का उपयोग करने के लिए नहीं मिला है,। इसे API पर देखते हुए, ऐसा लगता है कि इसमें केवल डीओएम मैनिपुलेशन, एजेक्स हैंडलिंग, इवेंट हैंडलिंग इत्यादि के अलावा पेशकश करने के लिए एक व्यापक कवरेज है।

+0

पर एक नज़र डालें धन्यवाद! निश्चित रूप से कुछ चीजें हैं जिन्हें मुझे Google क्लोजर लाइब्रेरी के बारे में भी आकर्षक लगता है, लेकिन jQuery का उपयोग करने के बाद, एपीआई अत्यधिक वर्बोज़ लगता है। हालांकि, कुछ विशेषताएं हैं जो मुझे रूचि देती हैं, यही कारण है कि मैं यह निर्धारित करने की कोशिश कर रहा हूं कि जीसीसी और जीसीएल के साथ jquery के साथ प्रभावी ढंग से उपयोग करने का कोई तरीका है या नहीं। – Tauren

+0

जीसीएल के साथ jQuery का उपयोग करना निश्चित रूप से संभव है, क्योंकि दोनों क्रमशः 'jQuery/$ 'और' goog' के अंदर अच्छी नामांकित पुस्तकालय हैं और उनमें से कोई भी आधार प्रोटोटाइप को संशोधित करता है जो कुछ बोनस मानते हैं। आपके पास डीओएम, इवेंट्स, एजेक्स इत्यादि जैसे कुछ क्षेत्रों में अनावश्यक विशेषताएं होंगी और आप उन लोगों के लिए और जीसीएल के साथ अन्य लोगों के लिए jQuery के साथ जा सकते हैं। शायद एक छोटी पुल परत लिखें जो डीओएम नोड्स की रैपिंग/अनैपिंग करता है क्योंकि jQuery चाहता है कि लिपटे ऑब्जेक्ट्स और जीसीएल देशी डोम नोड्स की अपेक्षा करे। – Anurag

+0

कम से कम मेरे लिए, मैं केवल इसके संपादक के लिए जीसीएल का उपयोग करता हूं। यह अब तक का सबसे अच्छा ओपन सोर्स एडिटर है जिसे मैंने देखा है। व्यापक दस्तावेज के साथ। इसके अलावा आप आसानी से अपने स्वयं के कस्टम प्लगइन बना सकते हैं। शेष साधारण डोम संशोधनों/AJAX कार्यक्षमताओं के लिए मैं JQuery का उपयोग करता हूं। –

8

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

  1. संकलन आदेश का निर्माण - हम निर्माण के दौरान एक स्वचालित ढंग से सभी आवश्यक मानकों के साथ संकलक लागू करने का एक साधन की जरूरत प्रक्रिया। हमारे लिए, इसका मतलब कमांड बनाने के लिए एक कंसोल ऐप लिखना था। यदि आपके पर्यावरण में खोल स्क्रिप्टिंग उपलब्ध है, तो यह एक लाभ हो सकता है।

  2. प्रबंधन निर्भरता - क्लोजर कंपाइलर में संयुक्त जेएस के क्रम को स्वचालित रूप से क्रमबद्ध करने की क्षमता होती है जैसे कि निर्भरता संरक्षित होती है। इस सुविधा का लाभ उठाने के लिए, जेएस फाइलों को goog.provide\goog.require के साथ एनोटेटेड होना चाहिए ताकि संकलक कह सकें कि निर्भरता क्या हैं (--manage_closure_dependencies)। कंपाइलर संयुक्त जेएस से आवश्यक किसी भी जेएस को भी बाहर नहीं रखेगा (यानी goog.require कथन के माध्यम से संदर्भित नहीं किया गया है)। यहाँ कुछ चीजें के लिए बाहर देखने के लिए कर रहे हैं:

    • आप, संयुक्त उत्पादन में आप सभी जे एस फ़ाइलों को शामिल करने सुनिश्चित करें कि आप संकलन है कि केवल के लिए goog.require बयान शामिल हैं में एक "प्रकट" जे एस फ़ाइल को शामिल करना चाहते हैं प्रत्येक फ़ाइल को संयुक्त स्क्रिप्ट शामिल किया जाना चाहिए (यानी goog.provide कथन)।
    • यदि आप क्लोजर लाइब्रेरी का उपयोग नहीं कर रहे हैं, तो सुनिश्चित करें कि आप SIMPLE_OPTIMIZATIONS या उच्चतर का उपयोग कर संकलित कर रहे हैं। अन्यथा, कंपाइलर goog.provide/goog.require कथन को नहीं हटाएगा। वैकल्पिक रूप से, आप त्रुटियों से बचने के लिए अपने goog.provide/goog.require जेएस फ़ंक्शन को भी परिभाषित कर सकते हैं।
    • सुनिश्चित करें कि कोई चक्रीय निर्भरताएं हैं, या परिणामों का सामना करना पड़ता है।
  3. संयुक्त स्क्रिप्ट की एक डिबग संस्करण संकलन - यदि आवश्यक हो, आप --formatting PRETTY_PRINT ध्वज का उपयोग संयुक्त स्क्रिप्ट का एक डिबग संस्करण संकलन कर सकते हैं। यह विकास/डिबगिंग के लिए बरकरार सफेद जगहों के साथ स्वरूपित समकक्ष स्क्रिप्ट आउटपुट करेगा।

हालांकि, बंद संकलक प्रलेखन समय पर विरल हो सकता है, यह काफी है अधिकांश भाग के लिए शुरू करने के लिए और लगातार सुधार हो रहा है - तो नियमित रूप से अद्यतन के लिए सिर्फ इतना नहीं की जाँच करें,;)

उम्मीद है की यह मदद करेगा।

1

तारेन, आप closure-compiler घर का उपयोग कर अपने कोड का परीक्षण कर सकते हैं। आप अपनी JQuery लाइब्रेरी या कुछ और आयात कर सकते हैं और इसे आजमाएं। यदि संभव हो, तो अज्ञात फ़ंक्शन का उपयोग करके अपना जावास्क्रिप्ट कोड परिभाषित करें जो नामकरण संघर्ष से बचाता है। Google लाइब्रेरी का उपयोग करके नामस्थान का उपयोग करें फ़ंक्शन प्रदान करें। एक और अच्छा संसाधन जो आपकी मदद कर सकता है Google JavaScript Style Guide

5

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

वास्तव में, लोकप्रिय जावास्क्रिप्ट पुस्तकालयों (क्लोजर लाइब्रेरी के अलावा,) के बीच, केवल डोजो टूलकिट क्लोजर एडवांस्ड मोड के साथ संगत है।

http://dojo-toolkit.33424.n3.nabble.com/file/n2636749/Using_the_Dojo_Toolkit_with_the_Closure_Compiler.pdf?by-user=t

10

$(elem)['width']() बजाय $(elem).width()

यह ADVANCED_OPTIMIZATIONS साथ काम करता है ताकि बंद संकलक jQuery तरीकों refactor नहीं है।

+0

आप * अपनी स्क्रिप्ट्स को बस लपेट सकते हैं ... (फ़ंक्शन ($) {...} (विंडो ['jQuery'])) – Tracker1

+2

@ ट्रैकर 1 इससे मदद नहीं मिलेगी: कंपाइलर '$' सही तरीके से कॉल करेगा लेकिन " ऑप्टिमाइज़ करें "विधियों को '$ (elem) .width()'' $ (elem) .a() 'जैसे कुछ में बदल जाता है। – JJJ

4

बंद संकलक/उन्नत के साथ अच्छी तरह से काम करने के लिए jQuery हो रही है मेरे लिए मुश्किल हो गया है, लेकिन जब से तुम एक से अधिक फ़ाइलों के साथ काम कर रहे हैं मुझे लगता है कि यह महत्वपूर्ण है कि आप यहाँ मॉड्यूल विकल्प पर गौर:

Using the --module option in Closure Compiler to create multiple output files

मैं वेब पर अच्छा प्रलेखन के लिए चारों ओर से खुदाई कर रहा है, लेकिन वहाँ है बहुत बहुत थोड़ा। एक भी jQuery निर्वासन का उपयोग करके, मैं उन्नत ठीक से संकलन करने में सक्षम था - कई फाइलों के साथ, आदि

@echo off 
java -jar bin\compiler.jar^
    --compilation_level=ADVANCED_OPTIMIZATIONS^
    --externs "externs\jquery-1.8.js"^
    --language_in=ECMASCRIPT5_STRICT^
    --warning_level=VERBOSE^
    --module_output_path_prefix .\compiled\^
    ^
    --module_wrapper core:"(function(){%%s%%})();"^
    --js ".\corelib.js"^
    --module core:1^
    ^
    --module_wrapper somescript"(function(){%%s%%})();"^
    --js ".\some_other_runtime_loaded_script"^
    --module somescript:1:core^
    ^
    --module_wrapper somescript1:"(function(){%%s%%})();"^
    --js ".\some_other_runtime_loaded_script"^
    --module somescript1:1:core 

विवरण

--module_wrapper name:wrapper 

यह एक बंद में अपनी स्क्रिप्ट रैप करने के लिए आप की अनुमति देता है - क्योंकि डिफ़ॉल्ट रूप से संकलक उन्हें हटा देगा। यदि आप "सख्त उपयोग" का उपयोग कर रहे हैं, तो मैं नहीं हूं।

--module name:#:dependency 

name  Name of the script that will get written 
#   number of scripts above that line to include into this script 
dependency What script does this depend on? 
-1

आप kjscompiler उपयोग कर सकते हैं: https://github.com/knyga/kjscompiler और तो उन लाइब्रेरी बाहरी के रूप में चाहते निर्दिष्ट करें। वे कम नहीं किया जाएगा। वास्तव में अच्छा समाधान।

संबंधित मुद्दे