Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/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 1.13.3应用程序中的路由转换内存泄漏_Javascript_Ember.js_Memory Leaks - Fatal编程技术网

Javascript 非常简单的Ember 1.13.3应用程序中的路由转换内存泄漏

Javascript 非常简单的Ember 1.13.3应用程序中的路由转换内存泄漏,javascript,ember.js,memory-leaks,Javascript,Ember.js,Memory Leaks,最近,我的任务是在我们的Ember应用程序中查找内存泄漏。大约一天后,我得出结论,在每次路线转换之后,余烬似乎正在泄漏整个容器 我制作了一个玩具应用程序来演示这一点,你可以在这里找到: 概述: 在应用程序中,有路由1和路由2 Route1.hbs如下所示(它链接到route2,并有一些文本): Route2.hbs如下所示: {{#link-to 'route1'}}Go back{{/link-to}} <-- Now click that guy 正如你所见,这离“hello

最近,我的任务是在我们的Ember应用程序中查找内存泄漏。大约一天后,我得出结论,在每次路线转换之后,余烬似乎正在泄漏整个容器

我制作了一个玩具应用程序来演示这一点,你可以在这里找到:

概述:

在应用程序中,有路由1和路由2

Route1.hbs如下所示(它链接到route2,并有一些文本):

Route2.hbs如下所示:

{{#link-to 'route1'}}Go back{{/link-to}} <-- Now click that guy
正如你所见,这离“hello world”应用不远

错误:

  • 打开chrome开发工具
  • 转到时间线视图
  • 捕获内存
  • 开始录音
  • 在应用程序中,单击链接从route1移动到route2,然后再移动几十次
  • 停止录制,注意DOM节点数在录制过程中不断攀升。如果开始新的录制,DOM节点计数将开始偏高(也就是说,在录制会话之间Chrome没有清理)
  • 有人知道我能做些什么吗?在玩具应用程序中,后果相当小,但在我们真正的应用程序中,它泄漏了非平凡的组件,并且每次转换都会占用500kb-1mb的内存。玩具应用程序也有一个极度泄漏的版本(commit 4fd324f829),其中一个大的500元素组件在每次转换时都会泄漏

    firefox也有漏洞,所以这不仅仅是chrome的问题

    绿色是DOM节点计数,蓝色是JS堆大小。如果添加了一个相当大的组件,那么DOM节点数将按比例增长。
    通过升级到2.0.1,在玩具应用程序中解决了这个问题。因此,它看起来像是在应用程序的当前版本和2.0.1之间的某个时间修复的

    跟踪版本:

    • 固定在1.13.9中
    • 固定在1.13.8中
    • 固定在1.13.7中
    • 固定在1.13.4中
    • 破折号1.13.3

    我认为最好在Ember.js的GitHub上报告这个bug。好主意。在这里完成:(这个问题基本上与我在堆查看器中看到的症状相同)。它在1.13.4中得到了修复,您也可以在变更日志中看到它。
    {{#link-to 'route1'}}Go back{{/link-to}} <-- Now click that guy