treemap: first pass on Lighthouse Treemap #11545
Conversation
| }; | ||
|
|
||
| const key = ModuleDuplication.normalizeSource(source); | ||
| // ModuleDuplication uses keys without the source root prepended, but |
There was a problem hiding this comment.
Noticed an issue with the duplication stuff. Need to make a separate PR for this.
There was a problem hiding this comment.
do you mean split this fix out into a separate PR with tests or there's another fix not shown here that needs to happen in a different PR?
There was a problem hiding this comment.
First one. This is the fix.
|
|
||
| /** @typedef {import('./dom')} DOM */ | ||
|
|
||
| const VIEWER_ORIGIN = 'http://localhost:8000'; |
There was a problem hiding this comment.
Need a good way to control when to use localhost vs when to use the hosted app. Important for local development. Any ideas?
There was a problem hiding this comment.
We could append +dev to our version marker when in local development that unlocks some extra stuff in the report?
| import _Util = require('../app/src/util.js'); | ||
| import {RootNodeContainer as _RootNodeContainer} from '../../lighthouse-core/audits/script-treemap-data'; | ||
| import {Node as _Node} from '../../lighthouse-core/audits/script-treemap-data'; | ||
| import '../../types/lhr'; |
There was a problem hiding this comment.
This feels wrong. Is it wrong?
| // No UI for treemap yet. For now, must run this command in console. | ||
| // @ts-ignore | ||
| globalThis._tmpFeatures = features; | ||
| const command = '_tmpFeatures._openTreemap();'; |
There was a problem hiding this comment.
Until there is a way to open the treemap viewer in the report, I wanted a way to do in simply through the console.
7c142a5 to
86772a7
Compare
There was a problem hiding this comment.
alright I started reviewing but I think there are still a few subcomponents we can break this up into to prevent a full page screenshots review situation :) I do appreciate being able to look at where it's headed though, very exciting!
taking a quick stab at substeps that might be nice:
- creating a basic treemap directory and page that dumps an LHR into a
<pre>tag with a test (can discuss the build process, deployment, organization, etc) - adding in the report-ui-features logic to open an LHR from the report (can discuss the origin customization issues, commentary there)
- adding in the main treemap viewer logic to the page
each of those chunks feel like they have quite a bit to discuss on their own, WDYT?
| }; | ||
|
|
||
| const key = ModuleDuplication.normalizeSource(source); | ||
| // ModuleDuplication uses keys without the source root prepended, but |
There was a problem hiding this comment.
do you mean split this fix out into a separate PR with tests or there's another fix not shown here that needs to happen in a different PR?
|
|
||
| /** @typedef {import('./dom')} DOM */ | ||
|
|
||
| const VIEWER_ORIGIN = 'http://localhost:8000'; |
There was a problem hiding this comment.
We could append +dev to our version marker when in local development that unlocks some extra stuff in the report?
| /** @typedef {import('./dom')} DOM */ | ||
|
|
||
| const VIEWER_ORIGIN = 'http://localhost:8000'; | ||
| const TREEMAP_URL = `${VIEWER_ORIGIN}/treemap/`; |
There was a problem hiding this comment.
this is only when local though right? when deployed won't it be ${VIEWER_ORIGIN}/lighthouse/treemap/?
There was a problem hiding this comment.
seems like the path and origin will be environment dependent
| /** | ||
| * Opens a new tab to an external page and sends data using postMessage. | ||
| * @param {Object} data | ||
| * @param {string} path |
There was a problem hiding this comment.
| * @param {string} path | |
| * @param {string} url |
|
|
||
| /** | ||
| * Opens a new tab to an external page and sends data using postMessage. | ||
| * @param {Object} data |
There was a problem hiding this comment.
| * @param {Object} data | |
| * @template {{lhresult: LH.Result}} T | |
| * @param {T} data |
(we should probably update viewer to accept lhr though 😄 )
There was a problem hiding this comment.
lhresult?
Planning to add a mode property to the data sent to treemap app. At that point, there's no overlap in types, hence object. We don't do nothing but serialize this value, so it seems fine to me.
There was a problem hiding this comment.
lhresult?
Isn't that what viewer uses?
At that point, there's no overlap in types, hence object.
They both require an LHR, there could be some overlap in types if we wanted to.
We don't do nothing but serialize this value, so it seems fine to me.
I'm separately advocating elsewhere in this PR that we do do something with it ;)
| # in separate terminal, start build watch | ||
| find lighthouse-treemap | entr -s 'DEBUG=1 yarn build-treemap' | ||
|
|
||
| # visit http://localhost:8000/treemap/?debug |
There was a problem hiding this comment.
| # visit http://localhost:8000/treemap/?debug | |
| open http://localhost:8000/treemap/?debug |
:)
| yarn serve-treemap | ||
|
|
||
| # in separate terminal, start build watch | ||
| find lighthouse-treemap | entr -s 'DEBUG=1 yarn build-treemap' |
There was a problem hiding this comment.
is this a new dependency we need to add to CONTRIBUTING.md?
$ which entr
entr not foundThere was a problem hiding this comment.
No, that doesn't seem important to add there. I'll just add a comment here brew install entr.
| <span class="lh-header--url"></span> • <span class="lh-header--size lh-text-dim"></span></span> | ||
| </span> | ||
| <div class="panel panel--modals"> | ||
| <!-- View modes go here --> |
There was a problem hiding this comment.
maybe use an id for component slots?
| } | ||
|
|
||
| render() { | ||
| webtreemap.render(this.el, this.currentRootNode, { |
There was a problem hiding this comment.
I guess we own webtreemap, so you're confident we can customize this as much as we need for our purposes?
See the spacing in the PR image. Note that I'm waiting on @paulirish to publish a new version that supports the
Could, do you think the associated code is worth separating?
idk |
No, not anymore once I started reviewing and came up with a much larger 3-way split :) |


ref #11254
This is a first pass of the Lighthouse Treemap app, with minimal features. See https://github.com/GoogleChrome/lighthouse/compare/viewer-treemap-2 for a rough WIP view of what the app might look like with all features intact.
I ripped out a ton of code/features to make a simpler initial PR to review. Please point out if I missed something that could be deferred for later.
Please note that there's quite a bit of design work left to do. I've got the rough look and structure down, but in total it's too much for an initial PR, so let's defer most of it for now.
https://lighthouse-chk0pd53k.vercel.app/treemap/?debug (won't have spacing, waiting on @paulirish to publish webtreemap package)