Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(OOM): clear interaction and cancel animation when rerendering #4899

Merged
merged 1 commit into from
Apr 21, 2023

Conversation

pearmini
Copy link
Member

@pearmini pearmini commented Apr 21, 2023

内存泄漏

解决 #4896 提到的问题的 95% 。

出现原因

  • chart.render 之前没有取消之前的 animation。
  • 多次调用 chart.render 的时候没有正确销毁之前的交互,导致 markState 这个变量一直没有销毁。

修复办法

  • 在 render 之前把上一次的 animation 对象全部取消。
  • 正确的保存和销毁交互

效果

可以发现内存增长的很慢了,这个部分需要 @xiaoiver 进一步在 g 里面看看:调用 animation.cancel 时候完全清除了动画。

image

@hustcc
Copy link
Member

hustcc commented Apr 23, 2023

可以发现内存增长的很慢了,这个部分需要 @xiaoiver 进一步在 g 里面看看:调用 animation.cancel 时候完全清除了动画。

@xiaoiver 这个彻底解决了吗?

@xiaoiver
Copy link
Contributor

xiaoiver commented Apr 23, 2023

@xiaoiver 这个彻底解决了吗?

之前怀疑是 animation 对象调用 cancel 后没销毁,但我写了一个例子,每隔 1 秒销毁之前的动画并创建 1000 个新动画对象 Animation,观察内存是否呈线性增长趋势,以及 Animation 数量是否会一直增加(类似 G2 的截图):
https://codepen.io/xiaoiver/pen/KKGMMqB

但观察下来 Animation 对象始终维持在 1000 个,并不会无限增长:
截屏2023-04-23 下午4 04 46

截屏2023-04-23 下午4 08 17

所以我猜测还是在使用时没调用全部 animation 对象的 cancel 方法,而且只有打开 axis 选项才会出现爆炸式增长。

@hustcc
Copy link
Member

hustcc commented Apr 23, 2023

@xiaoiver 这个彻底解决了吗?

之前怀疑是 animation 对象调用 cancel 后没销毁,但我写了一个例子,每隔 1 秒销毁之前的动画并创建 1000 个新动画,观察内存是否呈线性增长趋势: https://codepen.io/xiaoiver/pen/KKGMMqB

但观察下来 Animation 对象始终维持在 1000 个,并不会无限增长。

那内存泄漏就不是 animation 带来的,继续排查下,这个案例,现在增长是变慢了,但是我 setInterval 改成 100 的时候,依然很快就爆炸了。

@pearmini
Copy link
Member Author

setInterval 为 100 的可能是新的问题:上一次渲染还没有完成(动画 300ms)就开始了下一次。

@hustcc
Copy link
Member

hustcc commented Apr 24, 2023

染还没有完成(动画 300ms)就开始了下一

那也是需要清除之前的动画。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants