现在正在做一个项目,一模态框弹出加载好多图片,当关闭模态框的时候有内存泄漏,有几个问题不太清楚
- 图片中的
Detached HTMLImageElement
和HTMLImageElement
区别?HTMLImageElement
存放页面存在的DOM元素Detached HTMLImageElement
存放页面不存的元素,但是发生内存泄漏,没有释放的DOM元素缓存
上面两点是我的猜测,不太确定,是否正确? - 图片中retainer部分,是查看
Detached HTMLImageElement
中的详细信息,他是由于绑定事件而造成的内存泄漏,但是绑定事件的DOM元素和这个img元素不是父子关系,他们只是有共同的父辈元素,为什么会出现这种层层递进到了img元素上,造成img元素无法释放,而不是只造成绑定事件元素无法释放?并且还是多个img元素?
再往上几层我看到了 jQuery 的 cache 。
你绑定了事件的元素也已经 detach 了,说明它已经在 DOM 树上,但是事件却还在 jQuery 的 cache 里,说明很可能没有正确的使用 jQuery 从 DOM 树去移除这些元素,从而 jQuery 的 cache 没有被正常的清理。