2010-08-24 19 views
6

हेलो,अवांछित jQuery फ़ंक्शंस को हटाएं

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

मुझे यह जानने के बारे में बताएं कि यह कैसे प्राप्त किया जा सकता है। मुझे पता है कि यह बाद में सिरदर्द हो सकता है अगर मैं कहता हूं कि मैं अपने कोड में एक नया फ़ंक्शन जोड़ता हूं और फ़ंक्शन jQuery में मौजूद नहीं है। लेकिन मैं उस जोखिम को लेने के लिए तैयार हूं।

+0

अच्छा भगवान, क्या मैं पूछ सकता हूं क्यों? – jAndy

+0

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

+0

यदि आप एक समझदार कैशिंग रणनीति के साथ आते हैं तो आप स्थानीय रूप से पूरी jQuery फ़ाइल की सेवा कर सकते हैं, लेकिन इसे कैश करें ताकि आपको डाउनलोड/अतिरिक्त HTTP अनुरोध की लागत के बारे में चिंता न करें। [वेब लेखकों और वेबमास्टरों के लिए कैशिंग ट्यूटोरियल] (http://www.mnot.net/cache_docs/) एक महान संसाधन है। –

उत्तर

2

आप closure compiler

इस्तेमाल कर सकते हैं यह आप क्या चाहते करने के लिए लगता है।

1

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

इसके अलावा, वर्तमान में पूर्ण पुस्तकालय के लिए 24kb gzipped आकार पर, मैंने इसे आकार में रखा है, वास्तव में कोई फर्क नहीं पड़ता। पुस्तकालय केवल एक बार लोड हो जाता है - यदि आप इसे सीडीएन से लोड करते हैं, तो यह केंद्रीय रूप से कैश हो जाता है, जिससे धीमी मॉडेम कनेक्शन के लिए भी संभव हो जाता है।

0

यह एक बुरा विचार होगा।

सबसे पहले आप InArray कह सकते हैं क्योंकि आप बेस जावास्क्रिप्ट विकल्प का उपयोग कर सकते हैं लेकिन आपके द्वारा रखे गए अन्य तरीकों में इनएरे पर भरोसा हो सकता है।

मूल रूप से jqueries विधियां कार्यों को पूरा करने के लिए प्रत्येक-दूसरे का उपयोग करती हैं, यह उन तरीकों में से एक है जो वे पैकेज आकार को नीचे रखते हैं।

मैं बहुत की तरह करना होगा क्या आप वाकई ऐसा करना चाहते हैं:

$M = MyjQuery = function(element,context) 
{ 
    this.fn = {} 
    this.extend = function(base,new) 
    { 
     //Extend them here 
    } 
} 

और सिरे से शुरू!

2

यहां तक ​​कि अगर मैं कोई सुराग नहीं क्यों, आप यह कर सकता है: http://github.com/jquery/jquery/blob/master/Makefile

jQuery lib से makefile है कि करने के लिए

जाओ। jQuery कई मॉड्यूल में विभाजित है, जो एक साथ रखा जाता है। उन base files पर निर्भरता में आदेश दिया गया है, इसलिए आप उन मॉड्यूल को छील सकते हैं जिनका आप उपयोग नहीं कर रहे हैं ...

मैं 100% सुनिश्चित नहीं हूं कि यह काम करता है, कभी भी इसे स्वयं नहीं किया, लेकिन आप इसे एक शॉट दे सकते हैं ।

+0

विकास चरणों के लिए कई फाइलों में विभाजित होने के बावजूद यह भी नहीं है कि वे स्टैंडअलोन के रूप में चलाने में सक्षम हैं, यह सिर्फ jquery टीम श्रमिकों को व्यवस्थित करती है, उदाहरण के लिए, डेटा टीम 'data.js' पर काम कर रही है और इसलिए पर, उनके पास टेस्टर्स का एक गुच्छा होगा जो नई विधियों/कार्यक्षमता का परीक्षण करेंगे। तो हाँ यह सिर्फ एक डिजाइन प्रक्रिया और कुछ नहीं - अच्छा संदर्भ हालांकि :) – RobertPitt

+1

@RobertPitt: मुझे नहीं पता, यह मेरे लिए एक निर्भरता पेड़ की तरह दिखता है। आदेश समझ में आता है। तो मुझे सच में विश्वास है कि आप उदाहरण के लिए "आयाम" को हटा सकते हैं। – jAndy

+0

अन्य एंटीसाइट्स जैसे 'css' 'elem.offsetWidth' के साथ काम करना संभव हो सकता है और ऐसे में सीएसएस जैसे उप-पैकेज को हटाने से बड़ी लाइब्रेरी होती है क्योंकि इसका उपयोग पूरे लाइब्रेरी में किया जाता है! - जोड़े गए नए पुस्तकालयों का जिक्र नहीं करना, वे भी पीड़ित होंगे :( – RobertPitt

1

यदि आपकी जावास्क्रिप्ट प्रकृति में अत्यधिक गतिशील नहीं है, तो आप Closure Compiler एक शॉट दे सकते हैं।

इकट्ठा सभी (jQuery, प्लगइन अन्य पुस्तकालयों, सब कुछ शामिल है) और यह फ़ीड उन्नत संकलन विकल्प का उपयोग करने के लिए जीसीसी एक ही स्थान पर अपने जावास्क्रिप्ट।

यह सभी अप्रयुक्त कार्यों को हटा देगा जो संभावित रूप से आपके कोड को तोड़ सकता है। मैं केवल तभी सिफारिश करूंगा यदि आपके पास परीक्षण के मामले हैं, या आपका जेएस मैन्युअल रूप से पूरी तरह से परीक्षण करने के लिए पर्याप्त छोटा है।

अनुकूलन संकलक करता है की तरह का एक सरल उदाहरण है:

function hello(name) { 
    alert('Hello, ' + name); 
} 

hello(); 

करने के लिए कम हो जाएगी:

alert("Hello, undefined"); 

कि चूंकि यह है कि सभी मूल रूप से हो रहा है।

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