javascript - angularjs的scope会一直缓存在jqcache里
黄舟
黄舟 2017-04-11 10:37:16
0
1
492

我们在用angularjs做一个单页应用,其中有几个子页面会一直保持循环播放(即用ngview轮流切换几个scope)。但后来我发现页面每切换一次内存都会增长,大概几个小时之后浏览器就崩溃了。经过内存分析,可以确认有很多scope会缓存在jqcache里,然后我去找源代码,发现是以下这段导致的问题:

compile.$$addScopeInfo = debugInfoEnabled ? function $$addScopeInfo($element, scope, isolated, noTemplate) {
      var dataName = isolated ? (noTemplate ? '$isolateScopeNoTemplate' : '$isolateScope') : '$scope';
      $element.data(dataName, scope);
} : noop;

我翻遍其他源代码,也没发现可以清除这部分缓存的代码。请问有什么办法可以解决这个问题?
PS: angularjs的版本为1.5.8,jquery版本为1.7

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

reply all(1)
Peter_Zhu

这是个好问题,并且都研究到这个份上了,赞一个!

这看起来是jq的锅啊,.data方法的缓存。

解决方法不知道题主找到没,我的解决思路是:
在ctrl或者directive等销毁的时候$destory是手动调用相关jq的removeData方法,移除掉$ele上的data缓存。

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template