Open
Bug 1458899
Opened 8 years ago
Updated 4 years ago
Many unnecessary toolbox re-renderings on page reload
Categories
(DevTools :: Framework, enhancement, P2)
DevTools
Framework
Tracking
(Not tracked)
NEW
People
(Reporter: pbro, Unassigned)
References
(Blocks 1 open bug)
Details
The steps to reproduce this are simple:
- open a new empty page: data:text/html, for example
- open the toolbox
- refresh the page
This is a bug about the time DevTools takes to refresh when the page gets reloaded.
Part of this time seems to be spent re-rendering parts of the toolbox UI and it doesn't seem useful.
Here's what I found by looking at perf.html and by adding some console.log statements here and there:
- On page reload, frameUpdate events are sent from the tabActor.
- The TabTarget class receives them and, in turn, sends frame-update events for each of them.
- I found out that 3 such events are sent: 1 for destroyAll (prior to reloading I guess), and then 2 for the frame update itself. I don't know why there are 2. In my simple test case (empty page), they are identical, they contain the same number of frames (just 1).
- The Toolbox class' _updateFrames function is executed for each of these 3 events, and calls this.component.setToolboxButtons which basically re-renders the ToolboxController React component.
- Now, because it's a React component, the DOM did not actually changed so there's no reflow or repaint here, but still, we're spending the time to execute the whole React render cycle 3 times, for seemingly no reasons.
| Reporter | ||
Updated•8 years ago
|
Blocks: devtools-performance
| Reporter | ||
Updated•8 years ago
|
Severity: normal → enhancement
Priority: -- → P2
Comment 1•8 years ago
|
||
(In reply to Patrick Brosset <:pbro> from comment #0)
> - I found out that 3 such events are sent: 1 for destroyAll (prior to
> reloading I guess), and then 2 for the frame update itself. I don't know why
> there are 2. In my simple test case (empty page), they are identical, they
> contain the same number of frames (just 1).
What typically happens is that:
1) destroyAll, cleans up the list of frames,
2) you get a first update for the top frame ASAP, but the URL/title may not be available yet,
3) you get another update once the top frame is done loading and has the final URL/title.
> - The Toolbox class' _updateFrames function is executed for each of these 3
> events, and calls this.component.setToolboxButtons which basically
> re-renders the ToolboxController React component.
The call to setToolboxButtons has been introduced in bug 1451592.
Updated•8 years ago
|
Product: Firefox → DevTools
Updated•4 years ago
|
Severity: normal → S3
You need to log in
before you can comment on or make changes to this bug.
Description
•