2010-11-22 5 views
7

arrays.jsp:आप किसी जेएसपी में जावास्क्रिप्ट कोड को कैसे कम/obfuscate करते हैं जिसमें जेएसपी/जेएसटीएल चर शामिल हैं?

//... 
var x = <c:out value="${x}"/> 
<c:if test="${empty doExternal}"> 
processExternalArrays(); 
</c:if> 
//... 

मैं कम करें करने के लिए/एक बड़े JSP फ़ाइल में में कई JSP/JSTL चर इस तरह के ऊपर झलकी में जावा स्क्रिप्ट कोड में मिलाया जाता है में निहित जावास्क्रिप्ट अंधेरा करना चाहते हैं।

कोड सर्वर-साइड तर्क का उपयोग करके पॉप्युलेट किए गए चर पर निर्भर करता है और फिर ऊपर के रूप में क्लाइंट-साइड कोड पर जाता है।

मैं पहले से ही मेरी जेएस फाइलों को वाईयूआई कंप्रेसर का उपयोग कर छोटा कर रहा हूं लेकिन मुझे नहीं पता कि मेरे जेएसपी में जावास्क्रिप्ट कोड के बारे में क्या करना है।

क्या यह कोड को कम/निष्क्रिय करना संभव है, यह देखते हुए कि यह गतिशील रूप से बनाया गया है?

+0

आप सर्वर सुविधा के कुछ प्रकार यह करने के लिए है करने के लिए होगा ऑन-द-मक्खी; क्या आपके पृष्ठों पर वास्तव में पर्याप्त कोड है, हालांकि इसे उचित ठहराना है? – Pointy

+0

यह सुनिश्चित नहीं है कि सर्वर पर ऑन-द-फ्लाई करने के बारे में आपका क्या मतलब है। (हां। बहुत सारे कोड हैं।) –

+0

ठीक है, अपने पृष्ठों पर उस कोड को रखने के बजाय, आप अलग-अलग .js फ़ाइलों में जितना संभव हो उतना खींचने से बेहतर होंगे। आप पृष्ठों पर क्या रखेंगे, जेएसपी-संसाधित परिवर्तनीय घोषणाओं की न्यूनतम मात्रा होगी। आपकी अलग .js फ़ाइलें केवल उन्हें प्रत्येक पृष्ठ पर ढूंढकर एक्सेस करेंगी। – Pointy

उत्तर

0

मैं पूरी तरह से एक सर्वलेट जो एक अजाक्स अनुरोध पर वांछित जानकारी देता है के साथ संयोजन में Ajaxical शक्तियों की मदद से शुद्ध जे एस के लिए काम सौंपने के अलावा अन्य तरीकों से नहीं दिख रहा है (JSON के स्वाद में?)।

उदा। सर्वलेट

Map<String, Object> data = new HashMap<String, Object>(); 
data.put("doExternal", doExternal); 
data.put("x", x); 
response.setContentType("application/json"); 
response.setCharacterEncoding("UTF-8"); 
response.getWriter().write(new Gson().toJson(data)); // Gson is a Java-JSON converter. 

और जे एस में में (jQuery की थोड़ी मदद के साथ के बाद से यह अजाक्स कम वर्बोज़ काम करता है बनाता है)

$.getJSON('servleturl', function(data) { 
    var x = data.x; 
    if (!data.doExternal) { 
     processExternalArrays(); 
    } 
}); 

इस तरह आप सर्वर साइड विशिष्ट मनमुताबिक स्वच्छ जे एस के साथ खत्म।

2

आप htmlcompressor पर एक नज़र उठाया है? संक्षेप में यह एक है:

जावा HTML/एक्सएमएल कंप्रेसर है एक बहुत ही , छोटे जल्दी और आसानी से पुस्तकालय उपयोग करने के लिए है कि minifies बिना अतिरिक्त व्हाइटस्पेस, टिप्पणियों और अन्य अनावश्यक वर्ण को हटाने के द्वारा दिए गए HTML या XML स्रोत सामग्री को तोड़ना संरचना।

यह मुख्य कार्य है, ताकि HTML और XML सेक है, लेकिन यह भी JSP टैग कि YUI कंप्रेसर का लाभ उठाकर इनलाइन JavaScript ब्लॉक संपीड़ित करने के लिए इस्तेमाल किया जा सकता के साथ आता है। गूगल कोड पेज, विशेष रूप से Compressing selective content in JSP pages अनुभाग देखें।

+0

वाईयूआई कंप्रेसर जावास्क्रिप्ट कोड में एम्बेडेड जेएसपी टैग को संभाल नहीं सकता है। ओपी द्वारा वर्णित परिदृश्य में, आपके पास HTML पृष्ठ हैं जिनमें इनलाइन जावास्क्रिप्ट खंड शामिल हैं जो बदले में एम्बेडेड जेएसपी टैग होते हैं। जब HTMLcompressor जावास्क्रिप्ट खंडों को संपीड़ित करने के लिए YUI को कॉल करता है, तो YUI एम्बेडेड जेएसपी टैग को संभालने में सक्षम नहीं होगा। – Grodriguez

+0

@Grodriguez सच। जब मैंने यह उत्तर पोस्ट किया तो यह कुछ अनदेखा है। मैंने सोचा कि ओपी टैगलिब का उपयोग करने में सक्षम हो सकता है, हालांकि, मुझे लगा कि यह जवाब अभी भी इस जवाब को रखने के लायक है। असली समाधान जावास्क्रिप्ट की गतिशील रूप से गुच्छा उत्पन्न नहीं करना है, बल्कि इसके बजाय डेटा को जावास्क्रिप्ट ऑब्जेक्ट के रूप में उत्पन्न करना है और इसे स्थिर जावास्क्रिप्ट कोड में पास करना है क्योंकि जुआन मेंडेस ओपी टिप्पणियों में उल्लेख करता है। –

0

सुनिश्चित करें कि आपका उत्पादन gzip एन्कोडेड (अपाचे mod_deflate) है। एचटीएमएल/जेएस को कम से कम करना इसे थोड़ा छोटा कर सकता है, लेकिन ज्यादा नहीं।

<script type="text/javascript"><js:compress> 
    ... 
</js:compress></script> 

:

0

यदि आप या नहीं कर सकते हैं, अपने HTML से बाहर आपकी जावास्क्रिप्ट को स्थानांतरित नहीं करना चाहते, एक संभावना एक टैग हैंडलर है कि आपके <script> टैग की सामग्री लपेटता बनाने के लिए किया जाएगा हैंडलर शायद SimpleTagSupport का विस्तार कर सकता है। इसके बाद आप कम्प्रेसर/minifiers के लिए जावा APIs, YUI कंप्रेसर तरह की जांच या ShrinkSafe डोजो, और टैग शरीर पर कार्रवाई करने के लिए उन्हें का उपयोग करना होगा।

संपादित करें: क्षमा करें, मैं अन्य उत्तर स्किम्ड और ऐसा लगता है कि जैक मलग्रियू एक taglib पहले से ही है कि मैं वास्तव में क्या सुझाव दे रहा हूँ संदर्भित किया जा सकता है ...

संपादित 2: Yup, JavaScriptCompressorTag। मान लीजिए मुझे अपने जवाब को अप-वोट करना होगा; -) ...

3

शायद आपके लिए सबसे अच्छा समाधान Granule JSP टैग का उपयोग करेगा। आप http://code.google.com/p/granule/

कोड नमूना पर इसे डाउनलोड कर सकते हैं:

<g:compress> 
    <script type="text/javascript" src="common.js"/> 
    <script type="text/javascript" src="closure/goog/base.js"/> 
    <script> 
     goog.require('goog.dom'); 
     goog.require('goog.date'); 
     goog.require('goog.ui.DatePicker'); 
    </script> 
    <script type="text/javascript"> 
     var dp = new goog.ui.DatePicker(); 
     dp.render(document.getElementById('datepicker')); 
    </script> 
</g:compress> 
... 
संबंधित मुद्दे