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

New article "Debug DOM memory leaks ("Detached elements" profiling type)" #3282

Merged
merged 70 commits into from
Oct 23, 2024
Merged
Show file tree
Hide file tree
Changes from 67 commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
e37adfc
Update title & lead-in & toc
mikehoffms Sep 24, 2024
d850352
update near links in other articles
mikehoffms Oct 3, 2024
0a0849b
tabsets
mikehoffms Oct 10, 2024
c203f8c
desc: yaml field
mikehoffms Oct 10, 2024
979774c
Merge branch 'main' into user/mikehoffms/depr-detached-elem
mikehoffms Oct 10, 2024
3438978
temp Differences section
mikehoffms Oct 11, 2024
938765d
explain strategy, then single list of ui steps
mikehoffms Oct 13, 2024
304f8a7
Restructure "Additional considerations" h2
mikehoffms Oct 13, 2024
9be23cf
outcome at end of ui steps list
mikehoffms Oct 13, 2024
00483d2
delete Mem tab steps until DE tab rewritten
mikehoffms Oct 13, 2024
e9c4d83
explain clicking the particular ID
mikehoffms Oct 13, 2024
09def9a
"Scroll to line 49" is a numbered action step
mikehoffms Oct 13, 2024
a1d25c9
task h2: express the task well
mikehoffms Oct 13, 2024
4b061d8
h2 Strategy section, h2 for locations of feature
mikehoffms Oct 14, 2024
befdb25
rewrite main steps for DE tool
mikehoffms Oct 14, 2024
990da09
why click this button at this point
mikehoffms Oct 14, 2024
bb5a868
remove extra "view source file" step
mikehoffms Oct 14, 2024
80401e4
separate action steps vs result desc
mikehoffms Oct 14, 2024
15d5891
Merge branch 'main' into user/mikehoffms/depr-detached-elem
mikehoffms Oct 16, 2024
e6967be
whatsnew content
mikehoffms Oct 16, 2024
1cc52a3
move new way from DE tool to Mem tool h2
mikehoffms Oct 17, 2024
f28cd4f
png link fix
mikehoffms Oct 17, 2024
b95e81d
rewrite mentions of DE tool in other articles
mikehoffms Oct 17, 2024
319b0a5
link from DE tool intro to Mem tool h2
mikehoffms Oct 17, 2024
623a865
Move explanations to h2s after UI steps lists
mikehoffms Oct 17, 2024
038cde3
move caveat about early button to correct spot
mikehoffms Oct 17, 2024
462c738
clean up Memory tool h2 content
mikehoffms Oct 17, 2024
93ad436
put "not list you want" in correct spot
mikehoffms Oct 17, 2024
20e327a
test & fix 13-step list
mikehoffms Oct 17, 2024
c840103
leak in existing not proposed code
mikehoffms Oct 17, 2024
0893538
show connected tools at top
mikehoffms Oct 17, 2024
0ea4e64
unindent conclusion
mikehoffms Oct 17, 2024
dc8375c
table of tools per-section
mikehoffms Oct 18, 2024
80b63dc
reseq sections, id feature in headings
mikehoffms Oct 18, 2024
5214f0d
Restructure Mem tool article
mikehoffms Oct 18, 2024
a3ff8cc
star nav DE "ways" table
mikehoffms Oct 18, 2024
66b4991
anchor linkfix
mikehoffms Oct 18, 2024
6fa9d30
x-link docs re ways to see DEs
mikehoffms Oct 19, 2024
c517ea2
linkfix
mikehoffms Oct 19, 2024
c8be88f
tune x-links
mikehoffms Oct 19, 2024
2fb12ce
rewrite the new section
mikehoffms Oct 19, 2024
459ae52
remove done todo
mikehoffms Oct 19, 2024
91e6cfd
restore deprecated Alert tagging of depr'n
mikehoffms Oct 20, 2024
737eecb
add article Mem tool DE profl-type
mikehoffms Oct 20, 2024
7a82033
linkfix
mikehoffms Oct 20, 2024
ed1336b
add pt to title of profiling types articles
mikehoffms Oct 20, 2024
aa19f93
correct link in DE Tools table
mikehoffms Oct 20, 2024
ea76085
h2 heading for the new procedure
mikehoffms Oct 20, 2024
7a6fe07
fresh ui for "Allocations on timeline" & "Allocation sampling" profil…
mikehoffms Oct 20, 2024
1286e97
todo make Mem tool article overview only
mikehoffms Oct 20, 2024
bcab8e3
red boxes on 3 charts/views
mikehoffms Oct 20, 2024
e3f0334
Update Mem tool Prof types png in Heap Snp article
mikehoffms Oct 21, 2024
84ca778
new option btns in Mem tool article
mikehoffms Oct 21, 2024
8761117
incorp review
mikehoffms Oct 21, 2024
8a8b7b9
linkfix
mikehoffms Oct 21, 2024
b591867
add .md tho vscode nav worked
mikehoffms Oct 21, 2024
de37a6b
move details from Fix mem article
mikehoffms Oct 21, 2024
d4acdfc
linkfix
mikehoffms Oct 21, 2024
4a62f5d
move taskman pngs right dir, show js col
mikehoffms Oct 21, 2024
9d4664d
.
mikehoffms Oct 21, 2024
4df32ae
, below
mikehoffms Oct 21, 2024
fd21536
remove link to self, streamline links
mikehoffms Oct 22, 2024
8dded79
resolve all "option button (profiling type)"
mikehoffms Oct 22, 2024
c945768
omit "Retainers section" from tools overview table
mikehoffms Oct 22, 2024
85ab9bc
Docs > Article, in table col headers
mikehoffms Oct 22, 2024
ad8797b
table hdgs: | Use case | Tool | Article |
mikehoffms Oct 22, 2024
c69230a
dup sentence at start
mikehoffms Oct 22, 2024
acd6553
apply final review cmts
mikehoffms Oct 22, 2024
283d95d
"Use case" col of Mem tools table
mikehoffms Oct 22, 2024
0efe702
linkfix/remove
mikehoffms Oct 22, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions microsoft-edge/dev-videos/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ See also:
* [What's New in DevTools (Microsoft Edge 109)](../devtools-guide-chromium/whats-new/2023/01/devtools-109.md)<!-- has Video section -->
* [Share enhanced performance and memory traces](../devtools-guide-chromium/experimental-features/share-traces.md)
* [Analyze CSS selector performance during Recalculate Style events](../devtools-guide-chromium/evaluate-performance/selector-stats.md) - selector stats.
* [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_.
* [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)_.
* [Trash talk: the Orinoco garbage collector](https://v8.dev/blog/trash-talk)
* [Heap Snapshot visualizer](https://microsoftedge.microsoft.com/addons/detail/heap-snapshot-visualizer/fceldlhognbemkgfacnffkdanocidgce) extension.

Expand Down Expand Up @@ -626,12 +626,16 @@ December 9, 2021

[![Thumbnail image for video "Debug memory leaks with the Microsoft Edge Detached Elements tool"](./index-images/detached-elements.png)](https://www.youtube.com/watch?v=v2iy17ptmBk)

To debug DOM memory leaks, use either:
* The **Detached Elements** tool. Detached nodes have a link to the associated JavaScript code.
* The **Detached elements** profiling type in the **Memory** tool.

The **Detached Elements** tool helps you investigate and resolve DOM memory leaks.

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.

See also:
* [Debug DOM memory leaks with the Detached Elements tool](../devtools-guide-chromium/memory-problems/dom-leaks.md)<!-- has Video section -->
* [Debug DOM memory leaks by using the Detached Elements tool](../devtools-guide-chromium/memory-problems/dom-leaks.md)<!-- has Video section -->
* [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.


Expand Down
4 changes: 2 additions & 2 deletions microsoft-edge/devtools-guide-chromium/about-tools.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ DevTools provides more than 30 tools:
* Two icons on the **Activity Bar**, for the **Inspect tool** (![Inspect tool icon](./about-tools-images/inspect-tool-icon-light-theme.png)) and **Device Emulation** (![Device Emulation icon](./about-tools-images/device-emulation-icon-light-theme.png)).
* Three permanent tool tabs on the **Activity Bar**, for the **Elements**, **Console**, and **Sources** tools.
* Optional tabs, for optional tools such as the **Welcome** and **Network** tools.
* More optional tools, on the **More tools** (![More Tools icon](./about-tools-images/more-tools-icon-light-theme.png)) menu, such as the **3D View** and **Detached Elements** tools.
* More optional tools, on the **More tools** (![More Tools icon](./about-tools-images/more-tools-icon-light-theme.png)) menu, such as the **3D View** tool.

![The default tools, including two icons and eight tabs in the Activity Bar](./about-tools-images/all-default-tools.png)

Expand All @@ -41,7 +41,7 @@ Microsoft Edge DevTools includes the following tools.
| **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) |
| **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) |
| **CSS Overview** tool | Help you better understand your page's CSS and identify potential improvements. | [CSS Overview tool](css/css-overview-tool.md) |
| **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) |
mikehoffms marked this conversation as resolved.
Show resolved Hide resolved
| **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) |
| **Developer Resources** | Shows resource URLs for the webpage. | [Developer Resources tool](developer-resources/developer-resources.md) |
| **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) |
| **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) |
Expand Down
4 changes: 2 additions & 2 deletions microsoft-edge/devtools-guide-chromium/console/utilities.md
Original file line number Diff line number Diff line change
Expand Up @@ -632,7 +632,7 @@ You can also specify a collection of events by using one of the predefined sets
`profile([name])` starts a JavaScript CPU profiling session with an optional name.

<!-- add'l info -->
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). -->
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). -->

#### Syntax

Expand Down Expand Up @@ -671,7 +671,7 @@ profileEnd('A');
`profileEnd([name])` completes a JavaScript CPU profiling session and displays the results in the **Performance** tool.

<!-- add'l info -->
To call this function, you must be running the [profile([name])](#profilename) function. <!-- See [Speed Up JavaScript Runtime](../rendering-tools/js-runtime.md). -->
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). -->

#### Syntax

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -499,6 +499,9 @@ The colored lines on the chart map to the colored checkboxes above the chart. C

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.

See also:
* [Visualize memory leaks (Performance tool: Memory checkbox)](#visualize-memory-leaks-performance-tool-memory-checkbox), below.


<!-- ------------------------------ -->
#### View the duration of a portion of a recording
Expand Down Expand Up @@ -689,6 +692,57 @@ Use **Disable local fonts** to make it easier to:
* Discover differences between local versions installed on your device and a web font.


<!-- moved from "Fix memory problems" article -->
<!-- todo: move instead to Perf tool article? -->
<!-- Performance tool > Memory checkbox -->
<!-- ====================================================================== -->
## Visualize memory leaks (Performance tool: Memory checkbox)

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).)

The **Performance** tool helps you visualize the memory use of a page over time.

1. In DevTools, open the **Performance** tool.

1. Select the **Memory** checkbox.

1. Make a recording, per [Record performance](#record-performance), above.

It's a good practice to start and end your recording with a forced garbage collection. To force garbage collection, click the **collect garbage** ![force garbage collection](./reference-images/collect-garbage-icon.png) button while recording.

To demonstrate memory recordings, consider the following code:

```javascript
var x = [];
function grow() {
for (var i = 0; i < 10000; i++) {
document.body.appendChild(document.createElement('div'));
}
x.push(new Array(1000000).join('x'));
}
document.getElementById('grow').addEventListener('click', grow);
```

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:

![Simple growth](./reference-images/performance-memory.png)

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.

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()`.

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** ![force garbage collection](./reference-images/collect-garbage-icon.png) button).

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.

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.

<!--todo old: the Heap snapshots and Profiles panel aren't found in Edge -->

See also:
* [View memory metrics](#view-memory-metrics), above.


<!-- ====================================================================== -->
> [!NOTE]
> 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).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ Whether to display a checkbox to expose internals in heap snapshots in the **Mem
<!-- todo old: need text -->

See also:
* [Record heap snapshots using the Memory tool](../memory-problems/heap-snapshots.md)
* [Record heap snapshots using the Memory tool ("Heap snapshot" profiling type)](../memory-problems/heap-snapshots.md)

Status:
* This checkbox is present in Microsoft Edge Canary 131.
Expand Down Expand Up @@ -774,7 +774,7 @@ Controls whether to live-update the heap profile.
<!-- todo old: need text -->

See also:
* [Record heap snapshots using the Memory tool](../memory-problems/heap-snapshots.md)
* [Record heap snapshots using the Memory tool ("Heap snapshot" profiling type)](../memory-problems/heap-snapshots.md)

Status:
* This checkbox is present in Microsoft Edge Canary 131.
Expand All @@ -789,7 +789,7 @@ Controls whether to show the sampling heap profiler timeline in the **Performanc

See also:
* [Introduction to the Performance tool](../evaluate-performance/index.md)
* [Record heap snapshots using the Memory tool](../memory-problems/heap-snapshots.md)
* [Record heap snapshots using the Memory tool ("Heap snapshot" profiling type)](../memory-problems/heap-snapshots.md)

Status:
* This checkbox is present in Microsoft Edge Canary 131.
Expand Down
2 changes: 1 addition & 1 deletion microsoft-edge/devtools-guide-chromium/landing/index.yml
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ landingContent:
- text: Fix memory problems
url: ../memory-problems/index.md

- text: Debug DOM memory leaks with the Detached Elements tool
- text: Debug DOM memory leaks by using the Detached Elements tool
url: ../memory-problems/dom-leaks.md

- text: Understand security issues using the Security tool
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading