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

perf(line): reduce runtime memory cost #20161

Merged
merged 1 commit into from
Jul 18, 2024
Merged

Conversation

plainheart
Copy link
Member

@plainheart plainheart commented Jul 15, 2024

Brief Information

This pull request is in the type of:

  • bug fixing
  • new feature
  • others

What does this PR do?

Prebind the context of the _changePolyState function to the current instance of LineView rather than create a new function to reduce runtime memory cost.

Fixed issues

Details

Before After
image image

Document Info

One of the following should be checked.

  • This PR doesn't relate to document changes
  • The document should be updated later
  • The document changes have been made in apache/echarts-doc#xxx

Misc

ZRender Changes

  • This PR depends on ZRender changes (ecomfe/zrender#xxx).

Related test cases or examples to use the new APIs

See the online demo

Others

Merging options

  • Please squash the commits into a single one when merging.

Other information

… instance rather than create an new function to reduce runtime memory cost (fix #20151)
Copy link

echarts-bot bot commented Jul 15, 2024

Thanks for your contribution!
The community will review it ASAP. In the meanwhile, please checkout the coding standard and Wiki about How to make a pull request.

The pull request is marked to be PR: author is committer because you are a committer of this project.

Copy link
Contributor

The changes brought by this PR can be previewed at: https://echarts.apache.org/examples/editor?version=PR-20161@86db174

@plainheart plainheart added this to the 5.5.2 milestone Jul 16, 2024
Copy link
Member

@linghaoSu linghaoSu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

对比确实相比较之前几乎不再增长

PS: resize 之后也会释放原本占用的空间这个和这个有什么关联么(视频拖动分割线时,右侧代表内存占用的蓝色突然消失)

default.mov

@100pah
Copy link
Member

100pah commented Jul 17, 2024

Just some extra records of this case:

It seems to be caused by:

        const oldData = this._data;
        // ...
        const changePolyState = (toState: DisplayState) => {
            this._changePolyState(toState);
        };
        data.eachItemGraphicEl(function (el) {
            el && ((el as ECElement).onHoverStateChange = changePolyState);
        });

A closure of changePolyState references to oldData, and oldData references to the previous changePolyStates.
As a result, all of the oldDatas are not released.

image

TODO: need to check whether is kind of case occurs in other render functions that contain oldData and element listener.

@plainheart plainheart merged commit 65f6255 into master Jul 18, 2024
2 checks passed
Copy link

echarts-bot bot commented Jul 18, 2024

Congratulations! Your PR has been merged. Thanks for your contribution! 👍

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.

[Bug] Echart setoption内存会随时间增长且无法回收(必现)
4 participants