我在HTML页面中创建了三个div元素,这三个div元素中的每一个都包含一个文本框,即其中的输入元素。 一个div成为源,而另外两个成为目标。 HTML页面有一个按钮名称切换。 源div和一个目标div之间的初始连接是在拖放的帮助下创建的。 单击切换时,它将删除源和目标之间的连接,并将在源和另一个目标之间创建新连接。 现在,在此方案中使用Google Chrome开发人员工具执行分析时,每个切换的div元素数量会继续增加2。 jsplumb_demo var connection12 = undefined, connection13 = undefined; jsPlumb.ready(function() { var exampleGreyEndpointOptions = { endpoint:”Rectangle”, paintStyle:{ width:10, height:10, fillStyle:’#666′ }, isSource:true, connectorStyle : { strokeStyle:”#666″ }, isTarget:true, container:$(‘#container’), connector : “Straight”, deleteEndpointsOnDetach: true }; jsPlumb.makeSource($(‘div.source’), exampleGreyEndpointOptions); jsPlumb.makeTarget($(‘div.target’),exampleGreyEndpointOptions); jsPlumb.makeTarget($(‘div.target1’),exampleGreyEndpointOptions); init = function(connection){ }; connectionDelete = function(){ if(connection12 !== undefined){ […]
我在我正在研究的网页上发现了资源泄漏。 此网页有两个文本字段,在单击时显示模式对话框,对后端执行数据请求,然后在表中显示该信息,用户可以从中选择一个条目,以便在最初单击的文本框中使用。 我将点击事件绑定到文本框,如下所示: var $field = $(‘#one-of-the-text-fields’); $field.click(function () { App.DialogClass.show(); App.DialogClass.PopulateTable(); App.DialogClass.GotoPageButtonAction(actionArgs); // Offender! }); …哪个电话…… App.DialogClass = (function($) { var pub {}, $gotoPage = $(‘#pageNumberNavigationField’), $gotoPageButton = $(‘#pageNumberNavigationButton’); // …SNIP unimportant other details… pub.GotoPageButtonAction = function (args) { $gotoPageButton.click(function () { var pageNumber = $gotoPage.val(); pub.PopulateTable(args); // Breakpoint inserted here… }); }; return […]
我在使用jQuery 1.8.9 UI选项卡时遇到了内存泄漏问题,并且对于可能导致它的原因感到有点困惑。 这个问题似乎只出现在IE中。 我正在使用IE8,(尚未在7或6上测试过)。 Firefox和Chrome都可以。 选项卡初始化如下: $(“#tabContent”).tabs({ cache: false, ajaxOptions: { cache: false} }); $(“#tabContent”).bind(‘tabsselect’, tabSelected); $(“#tabContent”).bind(‘tabsload’, tabLoaded); $(“#tabContent”).tabs(“url”, 0, “SomePage.aspx?id=1” + “&project=” + projectName); $(“#tabContent”).tabs(“url”, 1, “SomePage.aspx?id=2” + “&project=” + projectName); $(“#tabContent”).tabs(“url”, 2, “SomePage.aspx?id=3” + “&project=” + projectName); $(“#tabContent”).tabs(“url”, 3, “SomePage.aspx?id=4” + “&project=” + projectName); 页面’SomePage’有一个列表,其中包含状态列,我需要检查更新。 我每5000毫秒轮询一次(使用此超时插件 ): $.doTimeout(‘tabDisplay’, 5000, function() { $(“#tabContent”).tabs(“load”, […]
我有一个奇怪的行为。 我正在使用一个相当重的页面(4000个节点),用于显示交付操作的调度系统。 每30秒。 我用jquery刷新了操作列表(超过4000的3000个节点)。 它运行得非常好,但是…每次,firefox和chrome的内存都会增加3到6ko。 当然,过了一会儿,浏览器崩溃了…… 有人有什么想法吗? 这是内存泄漏吗? javascript无法到达某个地方吗? 我检查过,每次刷新后我都有相同数量的节点,这意味着正确地进行了更换。 在每次刷新操作后,我重置了几个事件:这是一个例子 $(“#orders_list .list_table_row”).hover( function(){ // mouse over $(this).children().css(“background-color”,”#E0E0E0″); }, function(){ // mouse out $(this).children().css(“background-color”,””); }); 任何建议都非常受欢迎,提示,任何事情…… 我找到了两个有趣的链接: http : //www.javascriptkit.com/javatutors/closuresleak/index3.shtml和http://www.jibbering.com/faq/faq_notes/closures.html 谢谢,保罗 修订版1 – 添加了代码示例和链接
我正在使用以下模式,它在Firefox中泄漏内存: $(function() { (function() { var callee = arguments.callee; $.ajax({ url: ‘…’, success: function() { … setTimeout(callee, 1000); }, error: function() { … setTimeout(callee, 1000); } }); })(); }); 即使成功/错误除了再次调用setTimeout之外什么都不做,内存泄漏仍然存在。 我通过Windows任务管理器观察泄漏; 如果页面保持打开状态,firefox.exe的内存使用量会逐渐增加。 对于此代码的最终版本,我只需要每分钟更新一次,但每隔一秒就会更快地显示内存泄漏! (注意:这看起来像这个问题的一个非常相似的问题,但那里选择的答案似乎不适合Firefox)
我知道在具有大量UI元素的应用程序中正确管理内存并且完全基于Ajax并不容易(在我的应用程序中,页面永远不会重新加载)。 但我想了解以下行为: 我有一个根元素,一次只能附加一个子元素(将其视为根元素是app容器,子元素是单个页面)。 每当我在子内容之间切换时,我都会使用jQuery.remove()删除以前的内容,但我发现内容实际上是从DOM中分离出来的,但它仍保留在内存中。 root和两个子内容(child1和child2) 从child1切换到child2,要求我的应用程序管理员在附加child2之前删除child1 child2正在附加(我可以看到它)但我仍然可以使用管理child1的代码中的child1元素 child1代码(包含对child1 DOM的引用): function testaccess(){ load_and_remove(child2); var child1DOM = get_this_dom(); } child1DOM仍然存在,我可以操作它,好像它仍然附加到DOM。 好吧,我想jQuery.remove()和GC将无法释放内存,直到我有代码可以访问它,但即使我没有调用get_this_dom(),即使退出testaccess(),我看到FF内存不会减少…… 当我退出child1时,我想知道如何让GC释放所有内存。
在jQuery中,如果我们使用.remove()来删除某些元素,那么将删除与元素关联的所有绑定事件和jQuery数据。 但是如果我们用.html() “删除”元素会发生什么? 我们是否需要在更改任何html之前取消绑定所有元素以避免内存泄漏?
我正在构建一个带有requestAnimationFrame循环的游戏,该循环包括对jQuery html()方法的调用。 它只是更新游戏操作旁边的状态窗口中的文本。 我注意到Chrome的时间线监视器,DOM节点上升和上升,每分钟数千! 当我改变我的代码: // creates a ton of DOM nodes $(“#readout”).html(data); 至 // DOM nodes does not increase over time document.getElementById(‘readout’).innerHTML = data; “memory leaks”消失了。
我看到通过.on()注册的事件处理程序保存在$.cache 。 我还看到事件处理程序也保存在$(elem).data() 。 $.cache保存的对象指的是注册事件的DOM节点。 当DOM节点分离时,这会导致内存泄漏,这会使.off()调用成为必需的。 我有一种情况,我不知道DOM节点(我附加事件处理程序)何时被分离。 虽然我可以在我的代码中保存对该DOM节点的引用并调用.off()进行清理,但这似乎不太好,因为知道何时删除DOM节点并不简单。 做这个的最好方式是什么?
我需要使用JavaScript更新给定时间间隔内的大量数据。 问题是,无论我使用什么JS库(甚至是裸骨js),所有浏览器似乎都在每个AJAX请求上分配内存,并且之后无法释放它。 这是一个应该重现错误的示例: Memleak Test function readData() { $.getJSON(‘data.php’); } $(document).ready(function() { setInterval(readData, 1000); }); jsbin提供了一个等效的测试页面 以下是有关此内容的更多信息: 我还尝试在setInterval()调用中直接将readData()函数作为闭包。 这似乎没有任何区别。 我在这里使用jQuery,但任何其他库都会产生相同的错误。 我的data.php脚本只是在PHP中使用json_encode()生成一个伪JSON-Object。 我知道这一秒是一个很短的时间帧,在我的生产脚本中,时间范围是30秒。 我只是想更快地看到效果(在制作应用程序中需要几个小时,但内存也已满)。 这里的问题是该应用程序将全天候开放。 这看起来很简单,我认为我在这里做了一些非常错误的事情,如果这里的一些JS大师可以帮助我的话会很棒!