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

Cleanup iframe first to prevent memory leaks, see #1609 #2949

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

yuyuyzl
Copy link

@yuyuyzl yuyuyzl commented Sep 6, 2022

Summary

This PR fixes/implements the following bugs/features

  • Fixed memory leaks caused by cloned iframe's detached window

I'm working on a PNG sequence rendering project, and I was trying to use this for lightweight rendering (heavyweight ones should use headless chrome based project like Remotion)

About 200 frames can be rendered well, and then the page got out ouf memory and crashed.

With a heap snapshot, it is clear that "Detached window" consumes most of the memory.

Tried to clean up iframes and remove it manually in the promise resolve, it works very well, the memory usage of Chrome barely increases after that, and I can render 2000+ frames at once.

See #1609 for the detailed cleanup code.

Test plan (required)

You may need a heavy dom tree with some datasrc images to speedup the memory leaks.
Then, call html2canvas repeatedly, monitor Chrome's memory usage in taskmgr, or until it crashes.

Code formatting

Please make sure that code adheres to the project code formatting. Running npm run format will automatically format your code correctly.

Sure.

Closing issues

Fixes #1609

@Sharcoux
Copy link

Can be tested in @cantoo/html2canvas

nangelina added a commit to artificialonlinesao/html2canvas that referenced this pull request Feb 9, 2024
Squashed commit of the following:

commit 96cc89a
Author: yuyuyzl <yuzhongliang221@gmail.com>
Date:   Tue Sep 6 10:36:07 2022 +0800

    fix: cleanup iframe first to prevent memory leaks, see niklasvh#1609

commit 485a49e
Author: yuyuyzl <yuzhongliang221@gmail.com>
Date:   Tue Sep 6 10:28:22 2022 +0800

    fix: cleanup iframe first to prevent memory leaks, see niklasvh#1609
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Calling html2canvas multiple times increases memory usage on Chrome
2 participants