我们在用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
这是个好问题,并且都研究到这个份上了,赞一个!
这看起来是jq的锅啊,
.data
方法的缓存。解决方法不知道题主找到没,我的解决思路是:
在ctrl或者directive等销毁的时候
$destory
是手动调用相关jq的removeData
方法,移除掉$ele上的data缓存。