Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ember qunit中的内存泄漏_Javascript_Google Chrome_Ember.js_Memory Leaks_Ember Cli - Fatal编程技术网

Javascript ember qunit中的内存泄漏

Javascript ember qunit中的内存泄漏,javascript,google-chrome,ember.js,memory-leaks,ember-cli,Javascript,Google Chrome,Ember.js,Memory Leaks,Ember Cli,在单元测试期间,我的Ember CLI应用程序内存泄漏 我有一个相当大的测试套件,包括大约300多个测试。当我一次运行套件中的所有测试时,Chrome达到了1.6GB的内存限制并崩溃。显然,这是不可接受的 我已经从运行单个测试中收集了内存配置文件。测试通过后,我看到很多类的实例,但并不确定它们是什么。还有一些HTMLBarsMorph对象。我在下面附上下面内存快照中的一些屏幕截图 问题:如何诊断Ember CLI应用程序中的泄漏?具体地说,我怎样才能找出堆上到底留下了什么垃圾呢?Class,HT

在单元测试期间,我的Ember CLI应用程序内存泄漏

我有一个相当大的测试套件,包括大约300多个测试。当我一次运行套件中的所有测试时,Chrome达到了1.6GB的内存限制并崩溃。显然,这是不可接受的

我已经从运行单个测试中收集了内存配置文件。测试通过后,我看到很多
的实例,但并不确定它们是什么。还有一些
HTMLBarsMorph
对象。我在下面附上下面内存快照中的一些屏幕截图

问题:如何诊断Ember CLI应用程序中的泄漏?具体地说,我怎样才能找出堆上到底留下了什么垃圾呢?
Class
HTMLBarsMorph
的实例似乎都很常见,所以没有多大帮助

似乎有些对象的
\u state
设置为
“销毁”
。听起来不对,不是吗?我想它们应该处于
“已销毁”
状态,如果有的话

编辑

执行了以下附加实验:

  • 在访问主页的测试中重复100次,然后退出。内存泄漏存在

  • 对一个测试重复1000次,每次测试前只运行
    后只运行
    断言。确定(真)
    。这次没有泄漏

  • 这告诉我,这与应用程序销毁后呈现/布局所需的剩余数据有关。这似乎与我在内存转储中看到的一致

    编辑2

    通过对内存快照的比较,我能够找到一些泄漏的根本原因。以下是一些候选人:

    • 容器
    • 过渡状态
    • 登记处
    • 例如,两个DetachedDOM对象本身不会导致容器泄漏
    • 星段(?)
    快照由10个测试运行分隔,以使泄漏对象更可见。第一张图片展示了最有可能的罪犯名单:

    当我没有在测试中调用
    visit()
    时,在第二组快照中没有可见的泄漏:


    听起来可能很明显,但每次测试后你都会拆掉应用程序吗?测试完成后,不应该有任何东西留给检查员显示(没有余烬应用程序)。@Kitler:是的,事实上,我在测试后拆除了应用程序,所以我想不是这样的。@Kitler:添加了一些实验,也许会告诉你一些事情。这真的很奇怪,你是余烬社区的成员吗?如果是,请在余烬中询问。好的,我会问。非常感谢。