【发布时间】:2013-12-11 18:47:31
【问题描述】:
来自长期潜伏但经常使用本网站的用户的问候。很棒的信息在这里。我正在开发我的第一个真正的 Web 项目,并且边走边学。
这是一个医疗应用程序,有时必须显示警报图标(包含图像的 div)以引起对可能有麻烦的患者的注意。我一直在使用以下 JS/jQuery 代码通过使用 css 类来显示适当的图标。我的 css 技能不是很好,所以这可能会更有效地完成,但这不是我的问题的重点。
当我以 500 毫秒的间隔(在每次更新后使用 setTimeout)为 128 位不同的患者运行以下代码时,Chrome 渲染进程以大约 50MB/小时的速度消耗内存(每个任务管理器或 SysInternals 进程资源管理器)。但是,Chrome 开发工具并未显示内存使用量或 DOM 节点数有任何增加。随着时间的推移,堆快照没有显示任何显着变化。但是如果我注释掉这部分,“泄漏”就会消失。
我错过了什么?
// Show appropriate alarm icon, or hide all
iconClass = null;
if (this.Status && displayMode === 'RealTime') {
if (this.Status.Alarm === 'Active') {
flashState = ((this.drawTickCount % 4) < 2);
iconClass = (flashState) ? 'alarmOn' : 'alarmOff';
}
else if (this.Status.Alarm === 'Paused') {
iconClass = 'alarmPaused';
}
}
// Hide all icons
this.div.find('div.alarmIcon').css('visibility', 'hidden');
// Show the active icon, if any
if (iconClass) {
this.div.find('div.' + iconClass).css('visibility', 'visible');
}
谢谢!
【问题讨论】:
-
这是您的脚本唯一做的事情吗?
-
有一个 jsfiddle.net 示例来说明这种情况吗?
-
我不知道它是否会导致内存泄漏,但是您同时创建了
iconClass和flashState全局变量,这是不好的做法。声明它们时在它们前面贴上var,var iconClass = null;和var flashState = ((this.drawTickCount % 4) < 2); -
只是没有包含足够的代码。它们位于函数的顶部。
标签: javascript jquery memory memory-leaks