javascript - 用我的代码防止内存泄漏

标签 javascript ajax memory-leaks

我使用此代码:

<!-- Progress bar holder -->
<div id="progress" style="width:300px; height:20px; border:1px solid #ccc; float: right; margin-top: 7px; margin-right: 7px;"></div>
<!-- Progress information -->
<div id="information" style="width; text-align: center; margin-top: 7px;"></div></div>

在 while 循环内:

// Javascript for updating the progress bar and information
echo '<script language="javascript">

document.getElementById("progress").innerHTML="<div style=\"width:'.$percent.';background-color:#ddd;\">&nbsp;</div>";
document.getElementById("information").innerHTML="'.$i.' av '.$no_lines.' rader processade.";
</script>';

// This is for the buffer achieve the minimum size in order to flush data
echo str_repeat(' ',1024*64);

// Send output to browser immediately
flush();

每次 while 循环执行某些操作时,$i 都会增加 +1,这可能会非常大。 300k 以上。目前代码在 ~14000 时崩溃(内存使用量高于 1gb ram)。它还徘徊在 30% 左右的 CPU 使用率,使得上传时的互联网使用非常不愉快

我以前从未使用过 javascript,并且我阅读过有关 javascript 中的内存泄漏的信息,但是它对我如何防止这种情况没有帮助。我发现了一些对我有帮助的链接,但是我不知道如何将它们应用到我的代码 http://javascript.info/tutorial/memory-leaks 例如:empty()、remove()、removeData()。 我还看了这篇文章:http://www.javascriptkit.com/javatutors/closuresleak/了解发生的事情很有帮助,但无法弄清楚我做错了什么。 目前我只执行 if $i % 100 == 0 的代码,这太糟糕了,我什至不为这个“解决方案”感到自豪。

你们中有人可以帮助我防止代码中的内存泄漏吗?

最佳答案

(免责声明:我是 Microsoft 的一名软件工程师,负责 Internet Explorer Javascript 引擎“Chakra”的工作):

您的 Javascript 代码不包含任何创建新对象的循环,因此不存在内存泄漏的风险,尽管您使用 innerHTML 而不是直接 DOM 操作提供了性能优化的机会(因为使用 innerHTML 会导致文本被解析和处理,这不是一个便宜的操作,调用 setAttribute("style", "width: ... 是一个 便宜很多

正如我在对问题的评论回复中所写的那样,我不建议您使用向客户端发送进度更新的方法。这种方法称为 Comet ( http://en.wikipedia.org/wiki/Comet_%28programming%29 )。但建议替代方法是题外话,而且您还没有解释有关您的代码正在执行的后台操作的任何细节,因此我将不再发表进一步的评论。

关于javascript - 用我的代码防止内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28691547/

相关文章:

javascript - 从下拉列表中选择时自动触发单击按钮

函数混淆中的javascript变量范围

java - 如何理解 java 中的这个 NetBeans 内存配置文件 session (可见内存泄漏)?

ios - UIView拥有很强的引用性

javascript - Vue2-使用 :checked on checkbox input breaks default behaviour

javascript - 如何在浏览器中运行包含typscript转编译的js文件的导入语句?

javascript - ajax 无法在 IE 中工作

javascript - Jquery ajax 结果在 IE 中无法正确显示

javascript - JSONP — "SyntaxError: missing ; before statement"或 "Cross-Origin Request Blocked"

c++ - map 内存泄漏