-
Notifications
You must be signed in to change notification settings - Fork 9.4k
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
core: add hidden audits for each insight #16312
base: main
Are you sure you want to change the base?
Conversation
@@ -44,7 +44,7 @@ function buildStandaloneReport() { | |||
outfile: 'dist/report/standalone.js', | |||
format: 'iife', | |||
bundle: true, | |||
minify: true, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
drive by. this is very useful. surprised we didn't already do this.
const navigationId = traceEngineResult.data.Meta.mainFrameNavigations[0].args.data?.navigationId; | ||
if (!navigationId) { | ||
throw new Error(`Lantern metrics could not be calculated due to missing navigation id`); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
shifts in types with trace engine...
* @param {(obj: Record<string, string>, key: string) => void} cb | ||
* @param {Set<object>} seen | ||
*/ | ||
function recursiveObjectEnumerate(obj, cb, seen) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think there is some risk that we will resolve node details for a bunch of nodes we don't necessarily need. An insight might hold on to a trace event with a nodeId
that never gets used in one of the insights.
I guess the alternative is to manually curate the list of nodeId
s but then we would potentially miss some. False positives > false negatives so this seems good.
// Can only resolve elements for the latest insight set, which should correspond | ||
// to the current frame id. Can't resolve elements for pages that are gone. | ||
const insightSet = [...traceEngineResult.insights.values()] | ||
.reverse().find(insightSet => insightSet.frameId === mainFrameId); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pretty sure this will always be the last insight set in the list. The main frame ID does not change across navigations.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should actually just grab the last one, and then check if it is valid by looking at navigation id. updated.
*/ | ||
static async audit(artifacts, context) { | ||
return adaptInsightToAuditProduct(artifacts, context, 'DOMSize', (insight) => { | ||
if (!insight.maxDOMStats?.args.data.maxChildren || !insight.maxDOMStats?.args.data.maxDepth) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Technically we will still have a valid totalElements
value even if these are missing. In practice though, this will only happen if the document element is removed so it's an edge case that really doesn't matter.
adaptInsightToAuditProduct
helper, which is given the insight model and the caller returns aLH.Audit.Product
yarn generate-insight-audits
script, to quickly make and configure new audits (just run when new insights exists, no flags). Calling in CI so we don't forget to add a new insight when upgrading trace enginedom-size-insight
andviewport-insight
have been implemented. The other 12 are blank implementationstrace-engine
, which grabs all the node ids referenced in insights and collects their node information