Tool to track down JavaScript memory leak

前端 未结 3 650
抹茶落季
抹茶落季 2020-11-28 05:32

I have a web application which has a memory leak somewhere and I am unable to detect it. I already tried the Chrome developer tools which normally works great, but I am unab

相关标签:
3条回答
  • 2020-11-28 05:46

    update: Lets use Record Heap Allocations profile type.

    1. open devtools profiler
    2. do a warm-up action
    3. start profiler
    4. repeat action a few times
    5. if the action has a leak you will see the same number of groups of blue bars in the overview pane
    6. stop the profiler
    7. select one group of these blue bars in the overview
    8. look into the list of objects

    See screencast Javascript Memory Leak detection (Chrome DevTools)

    was: You can use the next scenario for fining memory leaks.

    1. open devtools profiler
    2. do an action that makes a leak
    3. take a heap snapshot
    4. repeat steps 2 and 3 tree times
    5. select the latest heap snapshot
    6. change filter "All Object" to "Objects between Snapshot 1 and 2"

    After that you will see objects a set of leaked objects. You can select an object and look at the list of retainers in Object's retaining tree

    0 讨论(0)
  • 2020-11-28 05:47

    Use the innerHTML and outerHTML values of the element in the Detached DOM tree view of the Heap Profiler to map objects in memory to your code and track down memory leaks.

    0 讨论(0)
  • 2020-11-28 06:08

    jQuery ajax requests were the biggest culprit in my app. Locate all your ajax jQuery functions: .ajax(), .get(), .post() and content setters: .html(), .text().

    Go to the network tab in dev tools, refresh the current page 10 to 20 times. If you see things stacking up too frequently, or calls not being completed, you have a memory leak.

    Here is a recent memory leak I was able to solve with jQuery.load()...

    if(!jQuery.terms_html) $('#tc_container').load(STATIC_DOMAIN + '/terms.html', function() { jQuery.terms_html = $('#tc_container').html() }) else $('#tc_container').html(jQuery.terms_html)

    Also, the latest version of jQuery at time of writing this is 3.3.1. Having the latest version installed is the best way to get started, if possible. https://github.com/jquery/jquery/releases

    0 讨论(0)
提交回复
热议问题