You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
*[Reduce garbage with additional settings for allocation sampling](../devtools-guide-chromium/memory-problems/index.md#reduce-garbage-with-additional-settings-for-allocation-sampling) in _Fix memory problems_.
189
+
*[Investigate memory allocation, with reduced garbage ("Include objects" checkboxes)](../devtools-guide-chromium/rendering-tools/js-runtime.md#investigate-memory-allocation-with-reduced-garbage-include-objects-checkboxes) in _Speed up JavaScript runtime ("Allocation sampling" profiling type)_.
190
190
*[Trash talk: the Orinoco garbage collector](https://v8.dev/blog/trash-talk)
[](https://www.youtube.com/watch?v=v2iy17ptmBk)
628
628
629
+
To debug DOM memory leaks, use either:
630
+
* The **Detached Elements** tool. Detached nodes have a link to the associated JavaScript code.
631
+
* The **Detached elements** profiling type in the **Memory** tool.
632
+
629
633
The **Detached Elements** tool helps you investigate and resolve DOM memory leaks.
630
634
631
635
Memory leaks occur when the JavaScript code of an application retains more and more objects in memory instead of releasing them for the browser to garbage-collect. We built the **Detached Elements** tool with the Microsoft Teams developers, and it has already helped us find and fix memory leaks across many of our own websites and apps.
632
636
633
637
See also:
634
-
*[Debug DOM memory leaks with the Detached Elements tool](../devtools-guide-chromium/memory-problems/dom-leaks.md)<!-- has Video section -->
638
+
*[Debug DOM memory leaks by using the Detached Elements tool](../devtools-guide-chromium/memory-problems/dom-leaks.md)<!-- has Video section -->
635
639
*[Debug memory leaks with the Microsoft Edge Detached Elements tool](https://blogs.windows.com/msedgedev/2021/12/09/debug-memory-leaks-detached-elements-tool-devtools/) - blog post.
Copy file name to clipboardexpand all lines: microsoft-edge/devtools-guide-chromium/about-tools.md
+2-2
Original file line number
Diff line number
Diff line change
@@ -15,7 +15,7 @@ DevTools provides more than 30 tools:
15
15
* Two icons on the **Activity Bar**, for the **Inspect tool** () and **Device Emulation** ().
16
16
* Three permanent tool tabs on the **Activity Bar**, for the **Elements**, **Console**, and **Sources** tools.
17
17
* Optional tabs, for optional tools such as the **Welcome** and **Network** tools.
18
-
* More optional tools, on the **More tools** () menu, such as the **3D View**and **Detached Elements** tools.
18
+
* More optional tools, on the **More tools** () menu, such as the **3D View**tool.
19
19
20
20

21
21
@@ -41,7 +41,7 @@ Microsoft Edge DevTools includes the following tools.
41
41
|**Coverage** tool | Help you find unused JavaScript and CSS code, to speed up your page load and save your mobile users cellular data. |[Find unused JavaScript and CSS code with the Coverage tool](coverage/index.md)|
42
42
|**Crash analyzer** tool | Analyze crashes of your web app. You can input a JavaScript production stack trace, such as for non-fatal JavaScript exceptions, and then have your source maps applied to the stack trace so that you can debug faster. |[Crash analyzer tool](./crash-analyzer/index.md)|
43
43
|**CSS Overview** tool | Help you better understand your page's CSS and identify potential improvements. |[CSS Overview tool](css/css-overview-tool.md)|
44
-
|**Detached Elements** tool | To increase the performance of your page, this tool finds detached elements that the browser cannot garbage-collect, and identifies the JavaScript object that is still referencing the detached element. By changing your JavaScript to release the element, you reduce the number of detached elements on your page, increasing page performance and responsiveness. |[Debug DOM memory leaks with the Detached Elements tool](memory-problems/dom-leaks.md)|
44
+
|**Detached Elements** tool | To increase the performance of your webpage, find detached elements that the browser can't garbage-collect, and then identify the JavaScript object that's still referencing the detached element. Then change your JavaScript to release the element, to reduce the number of detached elements on your page, increasing page performance and responsiveness. |[Debug DOM memory leaks by using the Detached Elements tool](memory-problems/dom-leaks.md)|
45
45
|**Developer Resources**| Shows resource URLs for the webpage. |[Developer Resources tool](developer-resources/developer-resources.md)|
46
46
|**Device Emulation**| Use the **Device Emulation** tool, also called _Device Simulation Mode_ or _Device Mode_, to approximate how your page looks and responds on a mobile device. |[Emulate mobile devices (Device Emulation)](device-mode/index.md)|
47
47
|**Elements** tool | Inspect, edit, and debug your HTML and CSS. You can edit in the tool while displaying the changes live in the browser. Debug your HTML using the DOM tree, and inspect and work on the CSS for your webpage. |[Inspect, edit, and debug HTML and CSS with the Elements tool](elements-tool/elements-tool.md)|
Copy file name to clipboardexpand all lines: microsoft-edge/devtools-guide-chromium/console/utilities.md
+2-2
Original file line number
Diff line number
Diff line change
@@ -632,7 +632,7 @@ You can also specify a collection of events by using one of the predefined sets
632
632
`profile([name])` starts a JavaScript CPU profiling session with an optional name.
633
633
634
634
<!-- add'l info -->
635
-
To complete the profile and display the results in the **Performance** tool, call [profileEnd([name])](#profileendname). <!-- See [Speed Up JavaScript Runtime](../rendering-tools/js-runtime.md). -->
635
+
To complete the profile and display the results in the **Performance** tool, call [profileEnd([name])](#profileendname). <!-- See [Speed up JavaScript runtime ("Allocation sampling" profiling type)](../rendering-tools/js-runtime.md). -->
636
636
637
637
#### Syntax
638
638
@@ -671,7 +671,7 @@ profileEnd('A');
671
671
`profileEnd([name])` completes a JavaScript CPU profiling session and displays the results in the **Performance** tool.
672
672
673
673
<!-- add'l info -->
674
-
To call this function, you must be running the [profile([name])](#profilename) function. <!-- See [Speed Up JavaScript Runtime](../rendering-tools/js-runtime.md). -->
674
+
To call this function, you must be running the [profile([name])](#profilename) function. <!-- See [Speed up JavaScript runtime ("Allocation sampling" profiling type)](../rendering-tools/js-runtime.md). -->
Copy file name to clipboardexpand all lines: microsoft-edge/devtools-guide-chromium/evaluate-performance/reference.md
+54
Original file line number
Diff line number
Diff line change
@@ -499,6 +499,9 @@ The colored lines on the chart map to the colored checkboxes above the chart. C
499
499
500
500
The chart only displays the region of the recording that is currently selected. For example, in the previous figure, the **Memory** chart is only showing memory usage from around the 3600 ms mark to the 6200 ms mark.
As a starting point to investigate webpage memory usage, use the **Performance** tool's **Memory** checkbox. (Or, [Monitor memory use in realtime (Microsoft Edge Browser Task Manager)](../memory-problems/microsoft-edge-browser-task-manager.md).)
702
+
703
+
The **Performance** tool helps you visualize the memory use of a page over time.
704
+
705
+
1. In DevTools, open the **Performance** tool.
706
+
707
+
1. Select the **Memory** checkbox.
708
+
709
+
1. Make a recording, per [Record performance](#record-performance), above.
710
+
711
+
It's a good practice to start and end your recording with a forced garbage collection. To force garbage collection, click the **collect garbage** button while recording.
712
+
713
+
To demonstrate memory recordings, consider the following code:
Every time that the button referenced in the code is clicked, 10,000 `div` nodes are appended to the document body, and a string of 1,000,000 `x` characters is pushed onto the `x` array. Running the previous code produces a recording in the **Performance** tool:
First, an explanation of the user interface. The **HEAP** graph in the **Overview** pane (below **NET**) represents the JS heap. Below the **Overview** pane is the **Counter** pane. The memory usage is broken down by JS heap (same as **HEAP** graph in the **Overview** pane), documents, DOM nodes, listeners, and GPU memory. Clear a checkbox to hide it from the graph.
731
+
732
+
Now, an analysis of the code compared with the previous figure. If you review the node counter (the green graph), it matches up cleanly with the code. The node count increases in discrete steps. You can presume that each increase in the node count is a call to `grow()`.
733
+
734
+
The JS heap graph (the blue graph) is not as straightforward. In keeping with best practices, the first dip is actually a forced garbage collection (click the **collect garbage** button).
735
+
736
+
As the recording progresses, the JS heap size spikes are displayed. This is natural and expected: the JavaScript code is creating the DOM nodes on every button you click, and is doing a lot of work when it creates the string of one million characters.
737
+
738
+
The key thing here is the fact that the JS heap ends higher than it began (the "beginning" here being the point after the forced garbage collection). In the real world, if you saw this pattern of increasing JS heap size or node size, it would potentially indicate a memory leak.
739
+
740
+
<!--todo old: the Heap snapshots and Profiles panel aren't found in Edge -->
> Portions of this page are modifications based on work created and [shared by Google](https://developers.google.com/terms/site-policies) and used according to terms described in the [Creative Commons Attribution 4.0 International License](https://creativecommons.org/licenses/by/4.0).
0 commit comments