Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript应用程序内存处理_Javascript_Performance_Oop_Memory_Browser - Fatal编程技术网

Javascript应用程序内存处理

Javascript应用程序内存处理,javascript,performance,oop,memory,browser,Javascript,Performance,Oop,Memory,Browser,我有以下建议: var z = function(){ return "string"; } var x = function(){ var y = new z(); var div = document.createElement('div'); div.innerHTML = y; document.body.appendChild(div); /* my code…hundreds of other fu

我有以下建议:

var z = function(){
return "string";
}

var x = function(){
      var y = new z();
      var div = document.createElement('div');
      div.innerHTML = y;
      document.body.appendChild(div);
      /*
            my code…hundreds of other functions. Entire app is js all data comes through sockets and elements created using JS
     */
}
我有几个问题可能听起来很愚蠢,但我希望不会

所以在x里面是y和div。现在,如果这两个元素仅在那里使用,它们是否仍在浏览器的JS中“存在”或消失?
基本上,我需要将它们设置为null,以避免在无用的项目上使用任何额外的内存


我还用JS写了25k行,所有元素都是用JS创建的。该应用程序会持续运行9个小时,直到他们关闭它,并在另一天重新启动。
但在这些小时里,我担心它会因为其大小而变得更慢。这是真的吗?

就应用程序内存使用而言,每次调用
x()
时,它都会创建局部变量
y
的临时实例。一旦函数运行到完成,就会丢弃该函数。
X
是一个匿名函数,它赋予它一个新的作用域。新变量将在此范围内,
将成为函数对象,您可以通过
窗口
访问全局范围

不同的浏览器处理这种情况的方式会有所不同,但结果基本相同。
浏览器总是经过优化,以使其在处理内存方面更高效、更快。他们也在优化范围链查找成本,这将提高性能

由于匿名函数
x()
的性质,浏览器可能会在某些时候运行其“垃圾收集”,这可能会减慢或停止脚本执行,但在此之后,它应该可以正常运行。
现代浏览器中的Javascript引擎可以处理难以置信的处理,因为许多库(如jquery)需要大量处理


我不会太担心Javascript引擎和您的25k代码行,这更多地取决于您的代码本身和它正在做什么。

我本来认为还可以,但现在我更自信了。Firefox在运行5/6小时后使用了8900mb的内存,但新版本只使用了400mb,仍然相当多,但比以前要好。谢谢,回答得又快又长@Bergi发布了我的第一个答案,但随后对其进行了编辑以添加更多信息:)。我的技巧。@CraigTaub:我也是,但在问题发布后不到1:30你就几乎准备好了:-)上面我是说900mb而不是8900MB的其他函数在
x
函数中显然是一个糟糕的做法。@PaulD.Waite:我真的需要引用一些关于代码模块化的东西吗?我认为这是常识。@Bergi:嗯,他的代码不一定是模块化的,因为他在
x
中有很多函数。不看就很难知道。(我还认为我误解了你的评论:你说这“显然”是一种不好的做法,我认为你的意思是“我读过一些具体的东西,说这是一种不好的做法;我自己也不确定。”)