zrender icon indicating copy to clipboard operation
zrender copied to clipboard

当图片加载失败时globalImageCache可导致内存泄漏

Open karl-barkmann opened this issue 1 year ago • 1 comments

我在做我们产品的内存快照分析时发现了这个问题: image 通过快照发现 imageOnLoad 已触发,但 pending 队列仍保留很多 pendingWrap 对象,导致内存泄漏。

#339 与这个issue相似,createOrUpdateImage 函数在获取已存在 image时,是通过判断图片元素是否有尺寸来决定要不要添加到 pending 队列。 https://github.com/ecomfe/zrender/blob/379f91f5d201f10c4c3c0fd0eaefc892d51c1410/src/graphic/helper/image.ts#L65 https://github.com/ecomfe/zrender/blob/379f91f5d201f10c4c3c0fd0eaefc892d51c1410/src/graphic/helper/image.ts#L104 但如果图片已加载失败(不会再触发imageOnLoad回调),图片的widthheight都会为0,则后续的调用将导致这个图片的pending队列一直增加,进而产生内存泄漏。

或许可以添加一个图片是否已完成加载(无论成功与否)的标记,通过该标记判断是否需要添加到pending队列?

### Tasks
- [ ] https://github.com/ecomfe/zrender/pull/1073

karl-barkmann avatar Apr 07 '24 09:04 karl-barkmann

为了能够更好地确认问题,能麻烦提供一个例子方便复现吗?

plainheart avatar Jun 28 '24 04:06 plainheart