2009-02-26 11 views
23

मैं अजाक्स का उपयोग कर पृष्ठों को शामिल कर रहा हूं लेकिन मुझे अपनी संबंधित जावास्क्रिप्ट फ़ाइलों को भी शामिल करने की आवश्यकता है, जिसके लिए पिछली जावास्क्रिप्ट फ़ाइलों को एक ही समय में स्मृति से हटाने की आवश्यकता है।मैं जावास्क्रिप्ट फ़ाइल को गतिशील रूप से कैसे उतार सकता हूं?

मैं वर्तमान में लोड की गई जावास्क्रिप्ट फ़ाइलों (साथ ही उनके कोड में स्मृति) को अनलोड कैसे कर सकता हूं ताकि मैं नए पेज की फाइल लोड कर सकूं? वे संभावित संघर्ष से अधिक होंगे, इसलिए कई स्वतंत्र फाइलें 'जावास्क्रिप्ट फाइलें लोड हो रही हैं।

+0

कस्टम लोडिंग और अनलोडिंग की आवश्यकता हो सकती है। – Pacerier

उत्तर

11

यह वास्तव में लगता है कि आपको अपने डिज़ाइन का पुनर्मूल्यांकन करने की आवश्यकता है। या तो आपको AJAX ड्रॉप करने की आवश्यकता है, या आपको विधि नामों में टकराव नहीं होना चाहिए। http://www.javascriptkit.com/javatutors/loadjavascriptcss2.shtml

कौन कैसे डोम से जावास्क्रिप्ट को दूर करने के बारे में जानकारी देता है:

आप इस लिंक देख सकते हैं। हालांकि, आधुनिक ब्राउज़र ब्राउज़र पर स्मृति में कोड छोड़ देंगे।

+2

फेसबुक एक ही विधि का उपयोग करता है और कोड को साफ रखता है, इसलिए वे मिश्रित नहीं होते हैं। एक उचित वस्तु उन्मुख कोड एक अच्छा काम करेगा, इसलिए कोई संघर्ष नहीं आता है। – Basit

+0

आधुनिक ब्राउज़र कचरा इकट्ठा करते हैं। यदि हटाए गए कोड के संदर्भ खो गए हैं, तो अंत में कचरा संग्रह के लिए यह उम्मीदवार बन जाएगा। –

+0

@ray: मेरे उत्तर के संबंध में "आधुनिक" 4 साल पहले था .. जीसी तब बहुत अच्छा नहीं किया गया था; मैं ईमानदारी से नहीं जानता कि वे आज बेहतर कर रहे हैं या नहीं। – NotMe

8

नहीं, आप ऐसा नहीं कर सकते हैं। एक बार जावास्क्रिप्ट का ब्लॉक ब्राउज़र में लोड हो जाता है और निष्पादित हो जाता है, तो यह संबंधित विंडो के दायरे में ब्राउज़र मेमोरी में संग्रहीत हो जाता है। इसे अनलोड करने का कोई तरीका नहीं है (पेज रीफ्रेश/विंडो बंद के बिना)।

2

असल में यह काफी संभव है। आप एक स्क्रिप्ट या लिंक तत्व को प्रतिस्थापित कर सकते हैं।

function createjscssfile(filename, filetype){ 
if (filetype=="js"){ //if filename is a external JavaScript file 
    var fileref=document.createElement('script') 
    fileref.setAttribute("type","text/javascript") 
    fileref.setAttribute("src", filename) 
} 

else if (filetype=="css"){ //if filename is an external CSS file 
    var fileref=document.createElement("link") 
    fileref.setAttribute("rel", "stylesheet") 
    fileref.setAttribute("type", "text/css") 
    fileref.setAttribute("href", filename) 
} 
    return fileref 
} 

function replacejscssfile(oldfilename, newfilename, filetype){ 
var targetelement=(filetype=="js")? "script" : (filetype=="css")? "link" : "none" //determine element type to create nodelist using 
var targetattr=(filetype=="js")? "src" : (filetype=="css")? "href" : "none" //determine corresponding attribute to test for 
var allsuspects=document.getElementsByTagName(targetelement) 
for (var i=allsuspects.length; i>=0; i--){ //search backwards within nodelist for matching elements to remove 
    if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null && allsuspects[i].getAttribute(targetattr).indexOf(oldfilename)!=-1){ 
     var newelement=createjscssfile(newfilename, filetype) 
     allsuspects[i].parentNode.replaceChild(newelement, allsuspects[i]) 
    } 
    } 
} 

आप src विशेषता और "js" या "सीएसएस"

मुझे लगता है कि कोड की व्याख्या करने की आवश्यकता नहीं है filetype के रूप में फ़ाइल नाम मापदंडों भरना होगा। इसके अलावा आपने 200 9 में पोस्ट किया है लेकिन हे। शायद किसी को इसकी आवश्यकता होगी? :)

सभी क्रेडिट को जाता है: http://www.javascriptkit.com/javatutors/loadjavascriptcss2.shtml

आप कुछ चाल वहाँ btw सीख सकते हैं।

+14

क्या यह ब्राउज़र मेमोरी से कोड को हटाता है, या सिर्फ कोड में एचटीएमएल में संदर्भ को हटा देता है? –

+1

@cale_b यह ब्राउज़र की स्मृति से इसे नहीं हटाता है और इस तरह ऐसा करने का कोई अर्थ नहीं है। –

+3

खाली जेएस फ़ाइल के साथ एक ही जेएस फ़ाइल को उसी शरीर के नाम से लोड करें जो स्मृति को प्रतिस्थापित करता है। परीक्षण और इसके कामकाज। –

6

आप बस अपने कोड .. कि जिस तरह से आप मिलान रुक नाम स्थान सकते हैं

वर myJavascriptCode = {};

MyJavaScriptCode.bla = function() {};

+0

यह भी सावधान रहें कि आप क्या निर्यात करते हैं। मॉड्यूल पैटर्न का उपयोग करके आप बहुत अधिक नियंत्रण प्राप्त कर सकते हैं: 'window.someModule = (function() {/ * अपने मॉड्यूल घटकों को यहां बनाएं */वापसी {कुछ कॉम्पोनेंट: myComponent, anotherComponent: myOtherComponent};}())'। बेशक, आपको अनावश्यक चिंताओं को ऑफ़लोड करने के लिए केवल RequJS या किसी अन्य लाइब्रेरी का उपयोग करना चाहिए। – Keen

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

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