Sunday, May 19, 2024
 Popular · Latest · Hot · Upcoming
119
rated 0 times [  124] [ 5]  / answers: 1 / hits: 38413  / 12 Years ago, wed, march 14, 2012, 12:00:00

As the title says, if I remove a script tag from the DOM using:



$('#scriptid').remove();


Does the javascript itself remain in memory or is it cleaned?



Or... am I completely misunderstanding the way in which browsers treat javascript? Which is quite possible.



For those interested in my reason for asking see below:



I am moving some common javascript interactions from static script files into dynamically generated ones in PHP. Which are loaded on demand when a user requires them.



The reason for doing this is in order to move the logic serverside and and run a small script, returned from the server, clientside. Rather than have a large script which contains a huge amount of logic, clientside.



This is a similar approach to what facebook does...



Facebook talks frontend javascript



If we take a simple dialog for instance. Rather than generating the html in javascript, appending it to the dom, then using jqueryUI's dialog widget to load it, I am now doing the following.




  • Ajax request is made to dialog.php

  • Server generates html and javascript that is specific to this dialog then encodes them as JSON

  • JSON is returned to client.

  • HTML is appended to the <body> then once this is rendered, the javascript is also appended into the DOM.



The javascript is executed automatically upon insertion and the dynamic dialog opens up.



Doing this has reduced the amount of javasript on my page dramatically however I am concerned about clean up of the inserted javascript.



Obviously once the dialog has been closed it is removed from the DOM using jQuery:



$('#dialog').remove();



The javascript is appended with an ID and I also remove this from the DOM via the same method.



However, as stated above, does using jQuery's .remove() actually clean out the javascript from memory or does it simple remove the <script> element from the DOM?



If so, is there any way to clean this up?


More From » jquery

 Answers
98

No. Once a script is loaded, the objects and functions it defines are kept in memory. Removing a script element does not remove the objects it defines. This is in contrast to CSS files, where removing the element does remove the styles it defines. That's because the new styles can easily be reflowed. Can you imagine how hard it would be to work out what a script tag created and how to remove it?



EDIT: However, if you have a file that defines myFunction, then you add another script that redefines myFunction to something else, the new value will be kept. You can remove the old script tag if you want to keep the DOM clean, but that's all removing it does.



EDIT2: The only real way to clean up functions that I can think of is to have a JS file that basically calls delete window.myFunction for every possible object and function your other script files may define. For obvious reasons, this is a really bad idea.


[#86851] Tuesday, March 13, 2012, 12 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
oswaldoh

Total Points: 109
Total Questions: 93
Total Answers: 113

Location: Israel
Member since Wed, Apr 14, 2021
3 Years ago
;