Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
161 views
in Technique[技术] by (71.8m points)

Does jQuery .remove() clear out loaded javascript when it is used to remove a script tag?

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...