lighthouse 11.3.0-dev.20231210 → 11.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/core/audits/layout-shift-elements.js +12 -8
  2. package/core/audits/metrics/max-potential-fid.d.ts +20 -0
  3. package/core/audits/metrics/max-potential-fid.js +69 -0
  4. package/package.json +2 -2
  5. package/shared/localization/locales/ar-XB.json +34 -25
  6. package/shared/localization/locales/ar.json +35 -26
  7. package/shared/localization/locales/bg.json +34 -25
  8. package/shared/localization/locales/ca.json +35 -26
  9. package/shared/localization/locales/cs.json +34 -25
  10. package/shared/localization/locales/da.json +51 -42
  11. package/shared/localization/locales/de.json +38 -29
  12. package/shared/localization/locales/el.json +34 -25
  13. package/shared/localization/locales/en-GB.json +35 -26
  14. package/shared/localization/locales/en-US.json +2 -2
  15. package/shared/localization/locales/en-XA.json +34 -25
  16. package/shared/localization/locales/en-XL.json +2 -2
  17. package/shared/localization/locales/es-419.json +34 -25
  18. package/shared/localization/locales/es.json +34 -25
  19. package/shared/localization/locales/fi.json +34 -25
  20. package/shared/localization/locales/fil.json +35 -26
  21. package/shared/localization/locales/fr.json +34 -25
  22. package/shared/localization/locales/he.json +35 -26
  23. package/shared/localization/locales/hi.json +35 -26
  24. package/shared/localization/locales/hr.json +35 -26
  25. package/shared/localization/locales/hu.json +34 -25
  26. package/shared/localization/locales/id.json +34 -25
  27. package/shared/localization/locales/it.json +34 -25
  28. package/shared/localization/locales/ja.json +34 -25
  29. package/shared/localization/locales/ko.json +35 -26
  30. package/shared/localization/locales/lt.json +34 -25
  31. package/shared/localization/locales/lv.json +35 -26
  32. package/shared/localization/locales/nl.json +35 -26
  33. package/shared/localization/locales/no.json +34 -25
  34. package/shared/localization/locales/pl.json +34 -25
  35. package/shared/localization/locales/pt-PT.json +35 -26
  36. package/shared/localization/locales/pt.json +35 -26
  37. package/shared/localization/locales/ro.json +34 -25
  38. package/shared/localization/locales/ru.json +35 -26
  39. package/shared/localization/locales/sk.json +35 -26
  40. package/shared/localization/locales/sl.json +35 -26
  41. package/shared/localization/locales/sr-Latn.json +34 -25
  42. package/shared/localization/locales/sr.json +34 -25
  43. package/shared/localization/locales/sv.json +35 -26
  44. package/shared/localization/locales/ta.json +35 -26
  45. package/shared/localization/locales/te.json +35 -26
  46. package/shared/localization/locales/th.json +34 -25
  47. package/shared/localization/locales/tr.json +35 -26
  48. package/shared/localization/locales/uk.json +34 -25
  49. package/shared/localization/locales/vi.json +34 -25
  50. package/shared/localization/locales/zh-HK.json +35 -26
  51. package/shared/localization/locales/zh-TW.json +38 -29
  52. package/shared/localization/locales/zh.json +34 -25
  53. package/types/artifacts.d.ts +2 -0
@@ -9,12 +9,12 @@ import {CumulativeLayoutShift as CumulativeLayoutShiftComputed} from '../compute
9
9
  import CumulativeLayoutShift from './metrics/cumulative-layout-shift.js';
10
10
 
11
11
  const UIStrings = {
12
- /** Descriptive title of a diagnostic audit that provides up to the top five elements contributing to Cumulative Layout Shift. */
12
+ /** Descriptive title of a diagnostic audit that provides the top elements affected by layout shifts. */
13
13
  title: 'Avoid large layout shifts',
14
- /** Description of a diagnostic audit that provides up to the top five elements contributing to Cumulative Layout Shift. The last sentence starting with 'Learn' becomes link text to additional documentation. */
15
- description: 'These DOM elements contribute most to the CLS of the page. [Learn how to improve CLS](https://web.dev/articles/optimize-cls)',
16
- /** Label for a column in a data table; entries in this column will be the amount that the corresponding element contributes to the total CLS metric score. */
17
- columnContribution: 'CLS Contribution',
14
+ /** Description of a diagnostic audit that provides the top elements affected by layout shifts. "windowing" means the metric value is calculated using the subset of events in a small window of time during the run. "normalization" is a good substitute for "windowing". The last sentence starting with 'Learn' becomes link text to additional documentation. */
15
+ description: 'These DOM elements were most affected by layout shifts. Some layout shifts may not be included in the CLS metric value due to [windowing](https://web.dev/articles/cls#what_is_cls). [Learn how to improve CLS](https://web.dev/articles/optimize-cls)',
16
+ /** Label for a column in a data table; entries in this column will be the amount that the corresponding element affected by layout shifts. */
17
+ columnContribution: 'Layout shift impact',
18
18
  };
19
19
 
20
20
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -52,14 +52,18 @@ class LayoutShiftElements extends Audit {
52
52
  }));
53
53
 
54
54
  if (clsElementData.length < impactByNodeId.size) {
55
- const elementDataImpact = clsElementData.reduce((sum, {score}) => sum += score || 0, 0);
56
- const remainingImpact = Math.max(clsSavings - elementDataImpact, 0);
55
+ const displayedNodeImpact = clsElementData.reduce((sum, {score}) => sum += score, 0);
56
+
57
+ // This is not necessarily the same as CLS due to normalization.
58
+ const totalNodeImpact = Array.from(impactByNodeId.values())
59
+ .reduce((sum, score) => sum + score);
60
+
57
61
  clsElementData.push({
58
62
  node: {
59
63
  type: 'code',
60
64
  value: str_(i18n.UIStrings.otherResourceType),
61
65
  },
62
- score: remainingImpact,
66
+ score: totalNodeImpact - displayedNodeImpact,
63
67
  });
64
68
  }
65
69
 
@@ -1,4 +1,14 @@
1
1
  export default MaxPotentialFID;
2
+ export type LoafDebugDetails = {
3
+ type: 'debugdata';
4
+ observedMaxDurationLoaf?: LH.TraceEvent | undefined;
5
+ observedMaxBlockingLoaf?: LH.TraceEvent | undefined;
6
+ observedLoafs: Array<{
7
+ startTime: number;
8
+ duration: number;
9
+ blockingDuration: number;
10
+ }>;
11
+ };
2
12
  /**
3
13
  * @fileoverview This metric is the duration of the longest task after FCP. It is meant to capture
4
14
  * the worst case First Input Delay that a user might experience.
@@ -9,6 +19,14 @@ declare class MaxPotentialFID extends Audit {
9
19
  * @return {LH.Audit.ScoreOptions}
10
20
  */
11
21
  static get defaultOptions(): import("../../../types/audit.js").default.ScoreOptions;
22
+ /**
23
+ * Extract potential LoAF replacements for MPFID from the trace to log in
24
+ * debugdata details.
25
+ * @param {LH.Artifacts.ProcessedTrace} processedTrace
26
+ * @param {LH.Artifacts.ProcessedNavigation} processedNavigation
27
+ * @return {LoafDebugDetails|undefined}
28
+ */
29
+ static getLongAnimationFrameDetails(processedTrace: LH.Artifacts.ProcessedTrace, processedNavigation: LH.Artifacts.ProcessedNavigation): LoafDebugDetails | undefined;
12
30
  /**
13
31
  * @param {LH.Artifacts} artifacts
14
32
  * @param {LH.Audit.Context} context
@@ -20,4 +38,6 @@ export namespace UIStrings {
20
38
  const description: string;
21
39
  }
22
40
  import { Audit } from '../audit.js';
41
+ import { ProcessedTrace } from '../../computed/processed-trace.js';
42
+ import { ProcessedNavigation } from '../../computed/processed-navigation.js';
23
43
  //# sourceMappingURL=max-potential-fid.d.ts.map
@@ -6,8 +6,18 @@
6
6
 
7
7
  import {Audit} from '../audit.js';
8
8
  import {MaxPotentialFID as ComputedFid} from '../../computed/metrics/max-potential-fid.js';
9
+ import {ProcessedTrace} from '../../computed/processed-trace.js';
10
+ import {ProcessedNavigation} from '../../computed/processed-navigation.js';
9
11
  import * as i18n from '../../lib/i18n/i18n.js';
10
12
 
13
+ /**
14
+ * @typedef LoafDebugDetails
15
+ * @property {'debugdata'} type
16
+ * @property {LH.TraceEvent=} observedMaxDurationLoaf
17
+ * @property {LH.TraceEvent=} observedMaxBlockingLoaf
18
+ * @property {Array<{startTime: number, duration: number, blockingDuration: number}>} observedLoafs
19
+ */
20
+
11
21
  const UIStrings = {
12
22
  /** Description of the Maximum Potential First Input Delay metric that marks the maximum estimated time between the page receiving input (a user clicking, tapping, or typing) and the page responding. This description is displayed within a tooltip when the user hovers on the metric name to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
13
23
  description: 'The maximum potential First Input Delay that your users could experience is the ' +
@@ -48,6 +58,59 @@ class MaxPotentialFID extends Audit {
48
58
  };
49
59
  }
50
60
 
61
+ /**
62
+ * Extract potential LoAF replacements for MPFID from the trace to log in
63
+ * debugdata details.
64
+ * @param {LH.Artifacts.ProcessedTrace} processedTrace
65
+ * @param {LH.Artifacts.ProcessedNavigation} processedNavigation
66
+ * @return {LoafDebugDetails|undefined}
67
+ */
68
+ static getLongAnimationFrameDetails(processedTrace, processedNavigation) {
69
+ const {firstContentfulPaint, timeOrigin} = processedNavigation.timestamps;
70
+
71
+ const loafEvents = processedTrace.mainThreadEvents.filter(evt => {
72
+ return evt.name === 'LongAnimationFrame' && evt.ph === 'b';
73
+ });
74
+ if (loafEvents.length === 0) return;
75
+
76
+ let currentMaxDuration = -Infinity;
77
+ let currentMaxDurationLoaf;
78
+ let currentMaxBlocking = -Infinity;
79
+ let currentMaxBlockingLoaf;
80
+ const observedLoafs = [];
81
+ for (const loafEvent of loafEvents) {
82
+ const loafDuration = loafEvent.args?.data?.duration;
83
+ const loafBlocking = loafEvent.args?.data?.blockingDuration;
84
+ // Should never happen, so mostly keeping the type checker happy.
85
+ if (loafDuration === undefined || loafBlocking === undefined) continue;
86
+
87
+ observedLoafs.push({
88
+ startTime: (loafEvent.ts - timeOrigin) / 1000,
89
+ duration: loafDuration,
90
+ blockingDuration: loafBlocking,
91
+ });
92
+
93
+ // Max LoAFs are only considered after FCP.
94
+ if (loafEvent.ts < firstContentfulPaint) continue;
95
+
96
+ if (loafDuration > currentMaxDuration) {
97
+ currentMaxDuration = loafDuration;
98
+ currentMaxDurationLoaf = loafEvent;
99
+ }
100
+ if (loafBlocking > currentMaxBlocking) {
101
+ currentMaxBlocking = loafBlocking;
102
+ currentMaxBlockingLoaf = loafEvent;
103
+ }
104
+ }
105
+
106
+ return {
107
+ type: 'debugdata',
108
+ observedMaxDurationLoaf: currentMaxDurationLoaf,
109
+ observedMaxBlockingLoaf: currentMaxBlockingLoaf,
110
+ observedLoafs,
111
+ };
112
+ }
113
+
51
114
  /**
52
115
  * @param {LH.Artifacts} artifacts
53
116
  * @param {LH.Audit.Context} context
@@ -61,6 +124,11 @@ class MaxPotentialFID extends Audit {
61
124
  settings: context.settings, URL: artifacts.URL};
62
125
  const metricResult = await ComputedFid.request(metricComputationData, context);
63
126
 
127
+ const processedTrace = await ProcessedTrace.request(trace, context);
128
+ const processedNavigation = await ProcessedNavigation.request(trace, context);
129
+ const details = MaxPotentialFID.getLongAnimationFrameDetails(processedTrace,
130
+ processedNavigation);
131
+
64
132
  return {
65
133
  score: Audit.computeLogNormalScore(
66
134
  {p10: context.options.p10, median: context.options.median},
@@ -69,6 +137,7 @@ class MaxPotentialFID extends Audit {
69
137
  numericValue: metricResult.timing,
70
138
  numericUnit: 'millisecond',
71
139
  displayValue: str_(i18n.UIStrings.ms, {timeInMs: metricResult.timing}),
140
+ details,
72
141
  };
73
142
  }
74
143
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "lighthouse",
3
3
  "type": "module",
4
- "version": "11.3.0-dev.20231210",
4
+ "version": "11.4.0",
5
5
  "description": "Automated auditing, performance metrics, and best practices for the web.",
6
6
  "main": "./core/index.js",
7
7
  "bin": {
@@ -203,7 +203,7 @@
203
203
  "robots-parser": "^3.0.1",
204
204
  "semver": "^5.3.0",
205
205
  "speedline-core": "^1.4.3",
206
- "third-party-web": "^0.24.0",
206
+ "third-party-web": "^0.24.1",
207
207
  "tldts-icann": "^6.1.0",
208
208
  "ws": "^7.0.0",
209
209
  "yargs": "^17.3.1",
@@ -639,7 +639,7 @@
639
639
  "message": "‏‮Use‬‏ ‏‮video‬‏ ‏‮formats‬‏ ‏‮for‬‏ ‏‮animated‬‏ ‏‮content‬‏"
640
640
  },
641
641
  "core/audits/byte-efficiency/legacy-javascript.js | description": {
642
- "message": "‏‮Polyfills‬‏ ‏‮and‬‏ ‏‮transforms‬‏ ‏‮enable‬‏ ‏‮legacy‬‏ ‏‮browsers‬‏ ‏‮to‬‏ ‏‮use‬‏ ‏‮new‬‏ ‏‮JavaScript‬‏ ‏‮features‬‏. ‏‮However‬‏, ‏‮many‬‏ ‏‮aren‬‏'‏‮t‬‏ ‏‮necessary‬‏ ‏‮for‬‏ ‏‮modern‬‏ ‏‮browsers‬‏. ‏‮For‬‏ ‏‮your‬‏ ‏‮bundled‬‏ ‏‮JavaScript‬‏, ‏‮adopt‬‏ ‏‮a‬‏ ‏‮modern‬‏ ‏‮script‬‏ ‏‮deployment‬‏ ‏‮strategy‬‏ ‏‮using‬‏ ‏‮module‬‏/‏‮nomodule‬‏ ‏‮feature‬‏ ‏‮detection‬‏ ‏‮to‬‏ ‏‮reduce‬‏ ‏‮the‬‏ ‏‮amount‬‏ ‏‮of‬‏ ‏‮code‬‏ ‏‮shipped‬‏ ‏‮to‬‏ ‏‮modern‬‏ ‏‮browsers‬‏, ‏‮while‬‏ ‏‮retaining‬‏ ‏‮support‬‏ ‏‮for‬‏ ‏‮legacy‬‏ ‏‮browsers‬‏. [‏‮Learn‬‏ ‏‮how‬‏ ‏‮to‬‏ ‏‮use‬‏ ‏‮modern‬‏ ‏‮JavaScript‬‏](https://web.dev/publish-modern-javascript/)"
642
+ "message": "‏‮Polyfills‬‏ ‏‮and‬‏ ‏‮transforms‬‏ ‏‮enable‬‏ ‏‮legacy‬‏ ‏‮browsers‬‏ ‏‮to‬‏ ‏‮use‬‏ ‏‮new‬‏ ‏‮JavaScript‬‏ ‏‮features‬‏. ‏‮However‬‏, ‏‮many‬‏ ‏‮aren‬‏'‏‮t‬‏ ‏‮necessary‬‏ ‏‮for‬‏ ‏‮modern‬‏ ‏‮browsers‬‏. ‏‮For‬‏ ‏‮your‬‏ ‏‮bundled‬‏ ‏‮JavaScript‬‏, ‏‮adopt‬‏ ‏‮a‬‏ ‏‮modern‬‏ ‏‮script‬‏ ‏‮deployment‬‏ ‏‮strategy‬‏ ‏‮using‬‏ ‏‮module‬‏/‏‮nomodule‬‏ ‏‮feature‬‏ ‏‮detection‬‏ ‏‮to‬‏ ‏‮reduce‬‏ ‏‮the‬‏ ‏‮amount‬‏ ‏‮of‬‏ ‏‮code‬‏ ‏‮shipped‬‏ ‏‮to‬‏ ‏‮modern‬‏ ‏‮browsers‬‏, ‏‮while‬‏ ‏‮retaining‬‏ ‏‮support‬‏ ‏‮for‬‏ ‏‮legacy‬‏ ‏‮browsers‬‏. [‏‮Learn‬‏ ‏‮how‬‏ ‏‮to‬‏ ‏‮use‬‏ ‏‮modern‬‏ ‏‮JavaScript‬‏](https://web.dev/articles/publish-modern-javascript)"
643
643
  },
644
644
  "core/audits/byte-efficiency/legacy-javascript.js | title": {
645
645
  "message": "‏‮Avoid‬‏ ‏‮serving‬‏ ‏‮legacy‬‏ ‏‮JavaScript‬‏ ‏‮to‬‏ ‏‮modern‬‏ ‏‮browsers‬‏"
@@ -993,7 +993,7 @@
993
993
  "message": "‏‮Expected‬‏ ‏‮size‬‏"
994
994
  },
995
995
  "core/audits/image-size-responsive.js | description": {
996
- "message": "‏‮Image‬‏ ‏‮natural‬‏ ‏‮dimensions‬‏ ‏‮should‬‏ ‏‮be‬‏ ‏‮proportional‬‏ ‏‮to‬‏ ‏‮the‬‏ ‏‮display‬‏ ‏‮size‬‏ ‏‮and‬‏ ‏‮the‬‏ ‏‮pixel‬‏ ‏‮ratio‬‏ ‏‮to‬‏ ‏‮maximize‬‏ ‏‮image‬‏ ‏‮clarity‬‏. [‏‮Learn‬‏ ‏‮how‬‏ ‏‮to‬‏ ‏‮provide‬‏ ‏‮responsive‬‏ ‏‮images‬‏](https://web.dev/serve-responsive-images/)."
996
+ "message": "‏‮Image‬‏ ‏‮natural‬‏ ‏‮dimensions‬‏ ‏‮should‬‏ ‏‮be‬‏ ‏‮proportional‬‏ ‏‮to‬‏ ‏‮the‬‏ ‏‮display‬‏ ‏‮size‬‏ ‏‮and‬‏ ‏‮the‬‏ ‏‮pixel‬‏ ‏‮ratio‬‏ ‏‮to‬‏ ‏‮maximize‬‏ ‏‮image‬‏ ‏‮clarity‬‏. [‏‮Learn‬‏ ‏‮how‬‏ ‏‮to‬‏ ‏‮provide‬‏ ‏‮responsive‬‏ ‏‮images‬‏](https://web.dev/articles/serve-responsive-images)."
997
997
  },
998
998
  "core/audits/image-size-responsive.js | failureTitle": {
999
999
  "message": "‏‮Serves‬‏ ‏‮images‬‏ ‏‮with‬‏ ‏‮low‬‏ ‏‮resolution‬‏"
@@ -1158,13 +1158,13 @@
1158
1158
  "message": "‏‮CLS‬‏ ‏‮Contribution‬‏"
1159
1159
  },
1160
1160
  "core/audits/layout-shift-elements.js | description": {
1161
- "message": "‏‮These‬‏ ‏‮DOM‬‏ ‏‮elements‬‏ ‏‮contribute‬‏ ‏‮most‬‏ ‏‮to‬‏ ‏‮the‬‏ ‏‮CLS‬‏ ‏‮of‬‏ ‏‮the‬‏ ‏‮page‬‏. [‏‮Learn‬‏ ‏‮how‬‏ ‏‮to‬‏ ‏‮improve‬‏ ‏‮CLS‬‏](https://web.dev/optimize-cls/)"
1161
+ "message": "‏‮These‬‏ ‏‮DOM‬‏ ‏‮elements‬‏ ‏‮contribute‬‏ ‏‮most‬‏ ‏‮to‬‏ ‏‮the‬‏ ‏‮CLS‬‏ ‏‮of‬‏ ‏‮the‬‏ ‏‮page‬‏. [‏‮Learn‬‏ ‏‮how‬‏ ‏‮to‬‏ ‏‮improve‬‏ ‏‮CLS‬‏](https://web.dev/articles/optimize-cls)"
1162
1162
  },
1163
1163
  "core/audits/layout-shift-elements.js | title": {
1164
1164
  "message": "‏‮Avoid‬‏ ‏‮large‬‏ ‏‮layout‬‏ ‏‮shifts‬‏"
1165
1165
  },
1166
1166
  "core/audits/lcp-lazy-loaded.js | description": {
1167
- "message": "‏‮Above‬‏-‏‮the‬‏-‏‮fold‬‏ ‏‮images‬‏ ‏‮that‬‏ ‏‮are‬‏ ‏‮lazily‬‏ ‏‮loaded‬‏ ‏‮render‬‏ ‏‮later‬‏ ‏‮in‬‏ ‏‮the‬‏ ‏‮page‬‏ ‏‮lifecycle‬‏, ‏‮which‬‏ ‏‮can‬‏ ‏‮delay‬‏ ‏‮the‬‏ ‏‮largest‬‏ ‏‮contentful‬‏ ‏‮paint‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮optimal‬‏ ‏‮lazy‬‏ ‏‮loading‬‏](https://web.dev/lcp-lazy-loading/)."
1167
+ "message": "‏‮Above‬‏-‏‮the‬‏-‏‮fold‬‏ ‏‮images‬‏ ‏‮that‬‏ ‏‮are‬‏ ‏‮lazily‬‏ ‏‮loaded‬‏ ‏‮render‬‏ ‏‮later‬‏ ‏‮in‬‏ ‏‮the‬‏ ‏‮page‬‏ ‏‮lifecycle‬‏, ‏‮which‬‏ ‏‮can‬‏ ‏‮delay‬‏ ‏‮the‬‏ ‏‮largest‬‏ ‏‮contentful‬‏ ‏‮paint‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮optimal‬‏ ‏‮lazy‬‏ ‏‮loading‬‏](https://web.dev/articles/lcp-lazy-loading)."
1168
1168
  },
1169
1169
  "core/audits/lcp-lazy-loaded.js | failureTitle": {
1170
1170
  "message": "‏‮Largest‬‏ ‏‮Contentful‬‏ ‏‮Paint‬‏ ‏‮image‬‏ ‏‮was‬‏ ‏‮lazily‬‏ ‏‮loaded‬‏"
@@ -1173,7 +1173,7 @@
1173
1173
  "message": "‏‮Largest‬‏ ‏‮Contentful‬‏ ‏‮Paint‬‏ ‏‮image‬‏ ‏‮was‬‏ ‏‮not‬‏ ‏‮lazily‬‏ ‏‮loaded‬‏"
1174
1174
  },
1175
1175
  "core/audits/long-tasks.js | description": {
1176
- "message": "‏‮Lists‬‏ ‏‮the‬‏ ‏‮longest‬‏ ‏‮tasks‬‏ ‏‮on‬‏ ‏‮the‬‏ ‏‮main‬‏ ‏‮thread‬‏, ‏‮useful‬‏ ‏‮for‬‏ ‏‮identifying‬‏ ‏‮worst‬‏ ‏‮contributors‬‏ ‏‮to‬‏ ‏‮input‬‏ ‏‮delay‬‏. [‏‮Learn‬‏ ‏‮how‬‏ ‏‮to‬‏ ‏‮avoid‬‏ ‏‮long‬‏ ‏‮main‬‏-‏‮thread‬‏ ‏‮tasks‬‏](https://web.dev/long-tasks-devtools/)"
1176
+ "message": "‏‮Lists‬‏ ‏‮the‬‏ ‏‮longest‬‏ ‏‮tasks‬‏ ‏‮on‬‏ ‏‮the‬‏ ‏‮main‬‏ ‏‮thread‬‏, ‏‮useful‬‏ ‏‮for‬‏ ‏‮identifying‬‏ ‏‮worst‬‏ ‏‮contributors‬‏ ‏‮to‬‏ ‏‮input‬‏ ‏‮delay‬‏. [‏‮Learn‬‏ ‏‮how‬‏ ‏‮to‬‏ ‏‮avoid‬‏ ‏‮long‬‏ ‏‮main‬‏-‏‮thread‬‏ ‏‮tasks‬‏](https://web.dev/articles/long-tasks-devtools)"
1177
1177
  },
1178
1178
  "core/audits/long-tasks.js | displayValue": {
1179
1179
  "message": "{itemCount,plural, =1{# ‏‮long‬‏ ‏‮task‬‏ ‏‮found‬‏}zero{# ‏‮long‬‏ ‏‮tasks‬‏ ‏‮found‬‏}two{# ‏‮long‬‏ ‏‮tasks‬‏ ‏‮found‬‏}few{# ‏‮long‬‏ ‏‮tasks‬‏ ‏‮found‬‏}many{# ‏‮long‬‏ ‏‮tasks‬‏ ‏‮found‬‏}other{# ‏‮long‬‏ ‏‮tasks‬‏ ‏‮found‬‏}}"
@@ -1221,7 +1221,7 @@
1221
1221
  "message": "‏‮Manifest‬‏ ‏‮has‬‏ ‏‮a‬‏ ‏‮maskable‬‏ ‏‮icon‬‏"
1222
1222
  },
1223
1223
  "core/audits/metrics/cumulative-layout-shift.js | description": {
1224
- "message": "‏‮Cumulative‬‏ ‏‮Layout‬‏ ‏‮Shift‬‏ ‏‮measures‬‏ ‏‮the‬‏ ‏‮movement‬‏ ‏‮of‬‏ ‏‮visible‬‏ ‏‮elements‬‏ ‏‮within‬‏ ‏‮the‬‏ ‏‮viewport‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ ‏‮Cumulative‬‏ ‏‮Layout‬‏ ‏‮Shift‬‏ ‏‮metric‬‏](https://web.dev/cls/)."
1224
+ "message": "‏‮Cumulative‬‏ ‏‮Layout‬‏ ‏‮Shift‬‏ ‏‮measures‬‏ ‏‮the‬‏ ‏‮movement‬‏ ‏‮of‬‏ ‏‮visible‬‏ ‏‮elements‬‏ ‏‮within‬‏ ‏‮the‬‏ ‏‮viewport‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ ‏‮Cumulative‬‏ ‏‮Layout‬‏ ‏‮Shift‬‏ ‏‮metric‬‏](https://web.dev/articles/cls)."
1225
1225
  },
1226
1226
  "core/audits/metrics/first-contentful-paint.js | description": {
1227
1227
  "message": "‏‮First‬‏ ‏‮Contentful‬‏ ‏‮Paint‬‏ ‏‮marks‬‏ ‏‮the‬‏ ‏‮time‬‏ ‏‮at‬‏ ‏‮which‬‏ ‏‮the‬‏ ‏‮first‬‏ ‏‮text‬‏ ‏‮or‬‏ ‏‮image‬‏ ‏‮is‬‏ ‏‮painted‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ ‏‮First‬‏ ‏‮Contentful‬‏ ‏‮Paint‬‏ ‏‮metric‬‏](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
@@ -1230,7 +1230,7 @@
1230
1230
  "message": "‏‮First‬‏ ‏‮Meaningful‬‏ ‏‮Paint‬‏ ‏‮measures‬‏ ‏‮when‬‏ ‏‮the‬‏ ‏‮primary‬‏ ‏‮content‬‏ ‏‮of‬‏ ‏‮a‬‏ ‏‮page‬‏ ‏‮is‬‏ ‏‮visible‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ ‏‮First‬‏ ‏‮Meaningful‬‏ ‏‮Paint‬‏ ‏‮metric‬‏](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
1231
1231
  },
1232
1232
  "core/audits/metrics/interaction-to-next-paint.js | description": {
1233
- "message": "‏‮Interaction‬‏ ‏‮to‬‏ ‏‮Next‬‏ ‏‮Paint‬‏ ‏‮measures‬‏ ‏‮page‬‏ ‏‮responsiveness‬‏, ‏‮how‬‏ ‏‮long‬‏ ‏‮it‬‏ ‏‮takes‬‏ ‏‮the‬‏ ‏‮page‬‏ ‏‮to‬‏ ‏‮visibly‬‏ ‏‮respond‬‏ ‏‮to‬‏ ‏‮user‬‏ ‏‮input‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ ‏‮Interaction‬‏ ‏‮to‬‏ ‏‮Next‬‏ ‏‮Paint‬‏ ‏‮metric‬‏](https://web.dev/inp/)."
1233
+ "message": "‏‮Interaction‬‏ ‏‮to‬‏ ‏‮Next‬‏ ‏‮Paint‬‏ ‏‮measures‬‏ ‏‮page‬‏ ‏‮responsiveness‬‏, ‏‮how‬‏ ‏‮long‬‏ ‏‮it‬‏ ‏‮takes‬‏ ‏‮the‬‏ ‏‮page‬‏ ‏‮to‬‏ ‏‮visibly‬‏ ‏‮respond‬‏ ‏‮to‬‏ ‏‮user‬‏ ‏‮input‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ ‏‮Interaction‬‏ ‏‮to‬‏ ‏‮Next‬‏ ‏‮Paint‬‏ ‏‮metric‬‏](https://web.dev/articles/inp)."
1234
1234
  },
1235
1235
  "core/audits/metrics/interactive.js | description": {
1236
1236
  "message": "‏‮Time‬‏ ‏‮to‬‏ ‏‮Interactive‬‏ ‏‮is‬‏ ‏‮the‬‏ ‏‮amount‬‏ ‏‮of‬‏ ‏‮time‬‏ ‏‮it‬‏ ‏‮takes‬‏ ‏‮for‬‏ ‏‮the‬‏ ‏‮page‬‏ ‏‮to‬‏ ‏‮become‬‏ ‏‮fully‬‏ ‏‮interactive‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ ‏‮Time‬‏ ‏‮to‬‏ ‏‮Interactive‬‏ ‏‮metric‬‏](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
@@ -1260,7 +1260,7 @@
1260
1260
  "message": "‏‮Server‬‏ ‏‮Backend‬‏ ‏‮Latencies‬‏"
1261
1261
  },
1262
1262
  "core/audits/no-unload-listeners.js | description": {
1263
- "message": "‏‮The‬‏ `unload` ‏‮event‬‏ ‏‮does‬‏ ‏‮not‬‏ ‏‮fire‬‏ ‏‮reliably‬‏ ‏‮and‬‏ ‏‮listening‬‏ ‏‮for‬‏ ‏‮it‬‏ ‏‮can‬‏ ‏‮prevent‬‏ ‏‮browser‬‏ ‏‮optimizations‬‏ ‏‮like‬‏ ‏‮the‬‏ ‏‮Back‬‏-‏‮Forward‬‏ ‏‮Cache‬‏. ‏‮Use‬‏ `pagehide` ‏‮or‬‏ `visibilitychange` ‏‮events‬‏ ‏‮instead‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮unload‬‏ ‏‮event‬‏ ‏‮listeners‬‏](https://web.dev/bfcache/#never-use-the-unload-event)"
1263
+ "message": "‏‮The‬‏ `unload` ‏‮event‬‏ ‏‮does‬‏ ‏‮not‬‏ ‏‮fire‬‏ ‏‮reliably‬‏ ‏‮and‬‏ ‏‮listening‬‏ ‏‮for‬‏ ‏‮it‬‏ ‏‮can‬‏ ‏‮prevent‬‏ ‏‮browser‬‏ ‏‮optimizations‬‏ ‏‮like‬‏ ‏‮the‬‏ ‏‮Back‬‏-‏‮Forward‬‏ ‏‮Cache‬‏. ‏‮Use‬‏ `pagehide` ‏‮or‬‏ `visibilitychange` ‏‮events‬‏ ‏‮instead‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮unload‬‏ ‏‮event‬‏ ‏‮listeners‬‏](https://web.dev/articles/bfcache#never_use_the_unload_event)"
1264
1264
  },
1265
1265
  "core/audits/no-unload-listeners.js | failureTitle": {
1266
1266
  "message": "‏‮Registers‬‏ ‏‮an‬‏ `unload` ‏‮listener‬‏"
@@ -1305,7 +1305,7 @@
1305
1305
  "message": "‏‮Performance‬‏ ‏‮budget‬‏"
1306
1306
  },
1307
1307
  "core/audits/preload-fonts.js | description": {
1308
- "message": "‏‮Preload‬‏ `optional` ‏‮fonts‬‏ ‏‮so‬‏ ‏‮first‬‏-‏‮time‬‏ ‏‮visitors‬‏ ‏‮may‬‏ ‏‮use‬‏ ‏‮them‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮preloading‬‏ ‏‮fonts‬‏](https://web.dev/preload-optional-fonts/)"
1308
+ "message": "‏‮Preload‬‏ `optional` ‏‮fonts‬‏ ‏‮so‬‏ ‏‮first‬‏-‏‮time‬‏ ‏‮visitors‬‏ ‏‮may‬‏ ‏‮use‬‏ ‏‮them‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮preloading‬‏ ‏‮fonts‬‏](https://web.dev/articles/preload-optional-fonts)"
1309
1309
  },
1310
1310
  "core/audits/preload-fonts.js | failureTitle": {
1311
1311
  "message": "‏‮Fonts‬‏ ‏‮with‬‏ `font-display: optional` ‏‮are‬‏ ‏‮not‬‏ ‏‮preloaded‬‏"
@@ -1314,7 +1314,7 @@
1314
1314
  "message": "‏‮Fonts‬‏ ‏‮with‬‏ `font-display: optional` ‏‮are‬‏ ‏‮preloaded‬‏"
1315
1315
  },
1316
1316
  "core/audits/prioritize-lcp-image.js | description": {
1317
- "message": "‏‮If‬‏ ‏‮the‬‏ ‏‮LCP‬‏ ‏‮element‬‏ ‏‮is‬‏ ‏‮dynamically‬‏ ‏‮added‬‏ ‏‮to‬‏ ‏‮the‬‏ ‏‮page‬‏, ‏‮you‬‏ ‏‮should‬‏ ‏‮preload‬‏ ‏‮the‬‏ ‏‮image‬‏ ‏‮in‬‏ ‏‮order‬‏ ‏‮to‬‏ ‏‮improve‬‏ ‏‮LCP‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮preloading‬‏ ‏‮LCP‬‏ ‏‮elements‬‏](https://web.dev/optimize-lcp/#optimize-when-the-resource-is-discovered)."
1317
+ "message": "‏‮If‬‏ ‏‮the‬‏ ‏‮LCP‬‏ ‏‮element‬‏ ‏‮is‬‏ ‏‮dynamically‬‏ ‏‮added‬‏ ‏‮to‬‏ ‏‮the‬‏ ‏‮page‬‏, ‏‮you‬‏ ‏‮should‬‏ ‏‮preload‬‏ ‏‮the‬‏ ‏‮image‬‏ ‏‮in‬‏ ‏‮order‬‏ ‏‮to‬‏ ‏‮improve‬‏ ‏‮LCP‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮preloading‬‏ ‏‮LCP‬‏ ‏‮elements‬‏](https://web.dev/articles/optimize-lcp#optimize_when_the_resource_is_discovered)."
1318
1318
  },
1319
1319
  "core/audits/prioritize-lcp-image.js | title": {
1320
1320
  "message": "‏‮Preload‬‏ ‏‮Largest‬‏ ‏‮Contentful‬‏ ‏‮Paint‬‏ ‏‮image‬‏"
@@ -1587,7 +1587,7 @@
1587
1587
  "message": "‏‮Timing‬‏ ‏‮budget‬‏"
1588
1588
  },
1589
1589
  "core/audits/unsized-images.js | description": {
1590
- "message": "‏‮Set‬‏ ‏‮an‬‏ ‏‮explicit‬‏ ‏‮width‬‏ ‏‮and‬‏ ‏‮height‬‏ ‏‮on‬‏ ‏‮image‬‏ ‏‮elements‬‏ ‏‮to‬‏ ‏‮reduce‬‏ ‏‮layout‬‏ ‏‮shifts‬‏ ‏‮and‬‏ ‏‮improve‬‏ ‏‮CLS‬‏. [‏‮Learn‬‏ ‏‮how‬‏ ‏‮to‬‏ ‏‮set‬‏ ‏‮image‬‏ ‏‮dimensions‬‏](https://web.dev/optimize-cls/#images-without-dimensions)"
1590
+ "message": "‏‮Set‬‏ ‏‮an‬‏ ‏‮explicit‬‏ ‏‮width‬‏ ‏‮and‬‏ ‏‮height‬‏ ‏‮on‬‏ ‏‮image‬‏ ‏‮elements‬‏ ‏‮to‬‏ ‏‮reduce‬‏ ‏‮layout‬‏ ‏‮shifts‬‏ ‏‮and‬‏ ‏‮improve‬‏ ‏‮CLS‬‏. [‏‮Learn‬‏ ‏‮how‬‏ ‏‮to‬‏ ‏‮set‬‏ ‏‮image‬‏ ‏‮dimensions‬‏](https://web.dev/articles/optimize-cls#images_without_dimensions)"
1591
1591
  },
1592
1592
  "core/audits/unsized-images.js | failureTitle": {
1593
1593
  "message": "‏‮Image‬‏ ‏‮elements‬‏ ‏‮do‬‏ ‏‮not‬‏ ‏‮have‬‏ ‏‮explicit‬‏ `width` ‏‮and‬‏ `height`"
@@ -1662,7 +1662,7 @@
1662
1662
  "message": "‏‮Has‬‏ ‏‮a‬‏ `<meta name=\"viewport\">` ‏‮tag‬‏ ‏‮with‬‏ `width` ‏‮or‬‏ `initial-scale`"
1663
1663
  },
1664
1664
  "core/audits/work-during-interaction.js | description": {
1665
- "message": "‏‮This‬‏ ‏‮is‬‏ ‏‮the‬‏ ‏‮thread‬‏-‏‮blocking‬‏ ‏‮work‬‏ ‏‮occurring‬‏ ‏‮during‬‏ ‏‮the‬‏ ‏‮Interaction‬‏ ‏‮to‬‏ ‏‮Next‬‏ ‏‮Paint‬‏ ‏‮measurement‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ ‏‮Interaction‬‏ ‏‮to‬‏ ‏‮Next‬‏ ‏‮Paint‬‏ ‏‮metric‬‏](https://web.dev/inp/)."
1665
+ "message": "‏‮This‬‏ ‏‮is‬‏ ‏‮the‬‏ ‏‮thread‬‏-‏‮blocking‬‏ ‏‮work‬‏ ‏‮occurring‬‏ ‏‮during‬‏ ‏‮the‬‏ ‏‮Interaction‬‏ ‏‮to‬‏ ‏‮Next‬‏ ‏‮Paint‬‏ ‏‮measurement‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ ‏‮Interaction‬‏ ‏‮to‬‏ ‏‮Next‬‏ ‏‮Paint‬‏ ‏‮metric‬‏](https://web.dev/articles/inp)."
1666
1666
  },
1667
1667
  "core/audits/work-during-interaction.js | displayValue": {
1668
1668
  "message": "{timeInMs, number, milliseconds} ‏‮ms‬‏ ‏‮spent‬‏ ‏‮on‬‏ ‏‮event‬‏ '{interactionType}'"
@@ -1704,10 +1704,10 @@
1704
1704
  "message": "‏‮Best‬‏ ‏‮practices‬‏"
1705
1705
  },
1706
1706
  "core/config/default-config.js | a11yCategoryDescription": {
1707
- "message": "‏‮These‬‏ ‏‮checks‬‏ ‏‮highlight‬‏ ‏‮opportunities‬‏ ‏‮to‬‏ [‏‮improve‬‏ ‏‮the‬‏ ‏‮accessibility‬‏ ‏‮of‬‏ ‏‮your‬‏ ‏‮web‬‏ ‏‮app‬‏](https://developer.chrome.com/docs/lighthouse/accessibility/). ‏‮Automatic‬‏ ‏‮detection‬‏ ‏‮can‬‏ ‏‮only‬‏ ‏‮detect‬‏ ‏‮a‬‏ ‏‮subset‬‏ ‏‮of‬‏ ‏‮issues‬‏ ‏‮and‬‏ ‏‮does‬‏ ‏‮not‬‏ ‏‮guarantee‬‏ ‏‮the‬‏ ‏‮accessibility‬‏ ‏‮of‬‏ ‏‮your‬‏ ‏‮web‬‏ ‏‮app‬‏, ‏‮so‬‏ [‏‮manual‬‏ ‏‮testing‬‏](https://web.dev/how-to-review/) ‏‮is‬‏ ‏‮also‬‏ ‏‮encouraged‬‏."
1707
+ "message": "‏‮These‬‏ ‏‮checks‬‏ ‏‮highlight‬‏ ‏‮opportunities‬‏ ‏‮to‬‏ [‏‮improve‬‏ ‏‮the‬‏ ‏‮accessibility‬‏ ‏‮of‬‏ ‏‮your‬‏ ‏‮web‬‏ ‏‮app‬‏](https://developer.chrome.com/docs/lighthouse/accessibility/). ‏‮Automatic‬‏ ‏‮detection‬‏ ‏‮can‬‏ ‏‮only‬‏ ‏‮detect‬‏ ‏‮a‬‏ ‏‮subset‬‏ ‏‮of‬‏ ‏‮issues‬‏ ‏‮and‬‏ ‏‮does‬‏ ‏‮not‬‏ ‏‮guarantee‬‏ ‏‮the‬‏ ‏‮accessibility‬‏ ‏‮of‬‏ ‏‮your‬‏ ‏‮web‬‏ ‏‮app‬‏, ‏‮so‬‏ [‏‮manual‬‏ ‏‮testing‬‏](https://web.dev/articles/how-to-review) ‏‮is‬‏ ‏‮also‬‏ ‏‮encouraged‬‏."
1708
1708
  },
1709
1709
  "core/config/default-config.js | a11yCategoryManualDescription": {
1710
- "message": "‏‮These‬‏ ‏‮items‬‏ ‏‮address‬‏ ‏‮areas‬‏ ‏‮which‬‏ ‏‮an‬‏ ‏‮automated‬‏ ‏‮testing‬‏ ‏‮tool‬‏ ‏‮cannot‬‏ ‏‮cover‬‏. ‏‮Learn‬‏ ‏‮more‬‏ ‏‮in‬‏ ‏‮our‬‏ ‏‮guide‬‏ ‏‮on‬‏ [‏‮conducting‬‏ ‏‮an‬‏ ‏‮accessibility‬‏ ‏‮review‬‏](https://web.dev/how-to-review/)."
1710
+ "message": "‏‮These‬‏ ‏‮items‬‏ ‏‮address‬‏ ‏‮areas‬‏ ‏‮which‬‏ ‏‮an‬‏ ‏‮automated‬‏ ‏‮testing‬‏ ‏‮tool‬‏ ‏‮cannot‬‏ ‏‮cover‬‏. ‏‮Learn‬‏ ‏‮more‬‏ ‏‮in‬‏ ‏‮our‬‏ ‏‮guide‬‏ ‏‮on‬‏ [‏‮conducting‬‏ ‏‮an‬‏ ‏‮accessibility‬‏ ‏‮review‬‏](https://web.dev/articles/how-to-review)."
1711
1711
  },
1712
1712
  "core/config/default-config.js | a11yCategoryTitle": {
1713
1713
  "message": "‏‮Accessibility‬‏"
@@ -1794,10 +1794,10 @@
1794
1794
  "message": "‏‮Performance‬‏"
1795
1795
  },
1796
1796
  "core/config/default-config.js | pwaCategoryDescription": {
1797
- "message": "‏‮These‬‏ ‏‮checks‬‏ ‏‮validate‬‏ ‏‮the‬‏ ‏‮aspects‬‏ ‏‮of‬‏ ‏‮a‬‏ ‏‮Progressive‬‏ ‏‮Web‬‏ ‏‮App‬‏. [‏‮Learn‬‏ ‏‮what‬‏ ‏‮makes‬‏ ‏‮a‬‏ ‏‮good‬‏ ‏‮Progressive‬‏ ‏‮Web‬‏ ‏‮App‬‏](https://web.dev/pwa-checklist/)."
1797
+ "message": "‏‮These‬‏ ‏‮checks‬‏ ‏‮validate‬‏ ‏‮the‬‏ ‏‮aspects‬‏ ‏‮of‬‏ ‏‮a‬‏ ‏‮Progressive‬‏ ‏‮Web‬‏ ‏‮App‬‏. [‏‮Learn‬‏ ‏‮what‬‏ ‏‮makes‬‏ ‏‮a‬‏ ‏‮good‬‏ ‏‮Progressive‬‏ ‏‮Web‬‏ ‏‮App‬‏](https://web.dev/articles/pwa-checklist)."
1798
1798
  },
1799
1799
  "core/config/default-config.js | pwaCategoryManualDescription": {
1800
- "message": "‏‮These‬‏ ‏‮checks‬‏ ‏‮are‬‏ ‏‮required‬‏ ‏‮by‬‏ ‏‮the‬‏ ‏‮baseline‬‏ [‏‮PWA‬‏ ‏‮Checklist‬‏](https://web.dev/pwa-checklist/) ‏‮but‬‏ ‏‮are‬‏ ‏‮not‬‏ ‏‮automatically‬‏ ‏‮checked‬‏ ‏‮by‬‏ ‏‮Lighthouse‬‏. ‏‮They‬‏ ‏‮do‬‏ ‏‮not‬‏ ‏‮affect‬‏ ‏‮your‬‏ ‏‮score‬‏ ‏‮but‬‏ ‏‮it‬‏'‏‮s‬‏ ‏‮important‬‏ ‏‮that‬‏ ‏‮you‬‏ ‏‮verify‬‏ ‏‮them‬‏ ‏‮manually‬‏."
1800
+ "message": "‏‮These‬‏ ‏‮checks‬‏ ‏‮are‬‏ ‏‮required‬‏ ‏‮by‬‏ ‏‮the‬‏ ‏‮baseline‬‏ [‏‮PWA‬‏ ‏‮Checklist‬‏](https://web.dev/articles/pwa-checklist) ‏‮but‬‏ ‏‮are‬‏ ‏‮not‬‏ ‏‮automatically‬‏ ‏‮checked‬‏ ‏‮by‬‏ ‏‮Lighthouse‬‏. ‏‮They‬‏ ‏‮do‬‏ ‏‮not‬‏ ‏‮affect‬‏ ‏‮your‬‏ ‏‮score‬‏ ‏‮but‬‏ ‏‮it‬‏'‏‮s‬‏ ‏‮important‬‏ ‏‮that‬‏ ‏‮you‬‏ ‏‮verify‬‏ ‏‮them‬‏ ‏‮manually‬‏."
1801
1801
  },
1802
1802
  "core/config/default-config.js | pwaCategoryTitle": {
1803
1803
  "message": "‏‮PWA‬‏"
@@ -1809,7 +1809,7 @@
1809
1809
  "message": "‏‮PWA‬‏ ‏‮Optimized‬‏"
1810
1810
  },
1811
1811
  "core/config/default-config.js | seoCategoryDescription": {
1812
- "message": "‏‮These‬‏ ‏‮checks‬‏ ‏‮ensure‬‏ ‏‮that‬‏ ‏‮your‬‏ ‏‮page‬‏ ‏‮is‬‏ ‏‮following‬‏ ‏‮basic‬‏ ‏‮search‬‏ ‏‮engine‬‏ ‏‮optimization‬‏ ‏‮advice‬‏. ‏‮There‬‏ ‏‮are‬‏ ‏‮many‬‏ ‏‮additional‬‏ ‏‮factors‬‏ ‏‮Lighthouse‬‏ ‏‮does‬‏ ‏‮not‬‏ ‏‮score‬‏ ‏‮here‬‏ ‏‮that‬‏ ‏‮may‬‏ ‏‮affect‬‏ ‏‮your‬‏ ‏‮search‬‏ ‏‮ranking‬‏, ‏‮including‬‏ ‏‮performance‬‏ ‏‮on‬‏ [‏‮Core‬‏ ‏‮Web‬‏ ‏‮Vitals‬‏](https://web.dev/learn-core-web-vitals/). [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮Google‬‏ ‏‮Search‬‏ ‏‮Essentials‬‏](https://support.google.com/webmasters/answer/35769)."
1812
+ "message": "‏‮These‬‏ ‏‮checks‬‏ ‏‮ensure‬‏ ‏‮that‬‏ ‏‮your‬‏ ‏‮page‬‏ ‏‮is‬‏ ‏‮following‬‏ ‏‮basic‬‏ ‏‮search‬‏ ‏‮engine‬‏ ‏‮optimization‬‏ ‏‮advice‬‏. ‏‮There‬‏ ‏‮are‬‏ ‏‮many‬‏ ‏‮additional‬‏ ‏‮factors‬‏ ‏‮Lighthouse‬‏ ‏‮does‬‏ ‏‮not‬‏ ‏‮score‬‏ ‏‮here‬‏ ‏‮that‬‏ ‏‮may‬‏ ‏‮affect‬‏ ‏‮your‬‏ ‏‮search‬‏ ‏‮ranking‬‏, ‏‮including‬‏ ‏‮performance‬‏ ‏‮on‬‏ [‏‮Core‬‏ ‏‮Web‬‏ ‏‮Vitals‬‏](https://web.dev/explore/vitals). [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮Google‬‏ ‏‮Search‬‏ ‏‮Essentials‬‏](https://support.google.com/webmasters/answer/35769)."
1813
1813
  },
1814
1814
  "core/config/default-config.js | seoCategoryManualDescription": {
1815
1815
  "message": "‏‮Run‬‏ ‏‮these‬‏ ‏‮additional‬‏ ‏‮validators‬‏ ‏‮on‬‏ ‏‮your‬‏ ‏‮site‬‏ ‏‮to‬‏ ‏‮check‬‏ ‏‮additional‬‏ ‏‮SEO‬‏ ‏‮best‬‏ ‏‮practices‬‏."
@@ -2657,6 +2657,9 @@
2657
2657
  "core/lib/lh-error.js | urlInvalid": {
2658
2658
  "message": "‏‮The‬‏ ‏‮URL‬‏ ‏‮you‬‏ ‏‮have‬‏ ‏‮provided‬‏ ‏‮appears‬‏ ‏‮to‬‏ ‏‮be‬‏ ‏‮invalid‬‏."
2659
2659
  },
2660
+ "core/lib/navigation-error.js | warningStatusCode": {
2661
+ "message": "‏‮Lighthouse‬‏ ‏‮was‬‏ ‏‮unable‬‏ ‏‮to‬‏ ‏‮reliably‬‏ ‏‮load‬‏ ‏‮the‬‏ ‏‮page‬‏ ‏‮you‬‏ ‏‮requested‬‏. ‏‮Make‬‏ ‏‮sure‬‏ ‏‮you‬‏ ‏‮are‬‏ ‏‮testing‬‏ ‏‮the‬‏ ‏‮correct‬‏ ‏‮URL‬‏ ‏‮and‬‏ ‏‮that‬‏ ‏‮the‬‏ ‏‮server‬‏ ‏‮is‬‏ ‏‮properly‬‏ ‏‮responding‬‏ ‏‮to‬‏ ‏‮all‬‏ ‏‮requests‬‏. (‏‮Status‬‏ ‏‮code‬‏: {errorCode})"
2662
+ },
2660
2663
  "core/lib/navigation-error.js | warningXhtml": {
2661
2664
  "message": "‏‮The‬‏ ‏‮page‬‏ ‏‮MIME‬‏ ‏‮type‬‏ ‏‮is‬‏ ‏‮XHTML‬‏: ‏‮Lighthouse‬‏ ‏‮does‬‏ ‏‮not‬‏ ‏‮explicitly‬‏ ‏‮support‬‏ ‏‮this‬‏ ‏‮document‬‏ ‏‮type‬‏"
2662
2665
  },
@@ -3108,22 +3111,22 @@
3108
3111
  "message": "‏‮Use‬‏ [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) ‏‮in‬‏ ‏‮NitroPack‬‏ ‏‮to‬‏ ‏‮reduce‬‏ ‏‮the‬‏ ‏‮size‬‏ ‏‮of‬‏ ‏‮the‬‏ ‏‮files‬‏ ‏‮that‬‏ ‏‮are‬‏ ‏‮sent‬‏ ‏‮to‬‏ ‏‮the‬‏ ‏‮browser‬‏."
3109
3112
  },
3110
3113
  "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
3111
- "message": "‏‮Use‬‏ ‏‮the‬‏ `nuxt/image` ‏‮component‬‏ ‏‮and‬‏ ‏‮set‬‏ `format=\"webp\"`. [‏‮Learn‬‏ ‏‮more‬‏](https://image.nuxtjs.org/components/nuxt-img#format)."
3114
+ "message": "‏‮Use‬‏ ‏‮the‬‏ `nuxt/image` ‏‮component‬‏ ‏‮and‬‏ ‏‮set‬‏ `format=\"webp\"`. [‏‮Learn‬‏ ‏‮more‬‏](https://image.nuxt.com/usage/nuxt-img#format)."
3112
3115
  },
3113
3116
  "node_modules/lighthouse-stack-packs/packs/nuxt.js | offscreen-images": {
3114
- "message": "‏‮Use‬‏ ‏‮the‬‏ `nuxt/image` ‏‮component‬‏ ‏‮and‬‏ ‏‮set‬‏ `loading=\"lazy\"` ‏‮for‬‏ ‏‮offscreen‬‏ ‏‮images‬‏. [‏‮Learn‬‏ ‏‮more‬‏](https://image.nuxtjs.org/components/nuxt-img#loading)."
3117
+ "message": "‏‮Use‬‏ ‏‮the‬‏ `nuxt/image` ‏‮component‬‏ ‏‮and‬‏ ‏‮set‬‏ `loading=\"lazy\"` ‏‮for‬‏ ‏‮offscreen‬‏ ‏‮images‬‏. [‏‮Learn‬‏ ‏‮more‬‏](https://image.nuxt.com/usage/nuxt-img#loading)."
3115
3118
  },
3116
3119
  "node_modules/lighthouse-stack-packs/packs/nuxt.js | prioritize-lcp-image": {
3117
- "message": "‏‮Use‬‏ ‏‮the‬‏ `nuxt/image` ‏‮component‬‏ ‏‮and‬‏ ‏‮specify‬‏ `preload` ‏‮for‬‏ ‏‮LCP‬‏ ‏‮image‬‏. [‏‮Learn‬‏ ‏‮more‬‏](https://image.nuxtjs.org/components/nuxt-img#preload)."
3120
+ "message": "‏‮Use‬‏ ‏‮the‬‏ `nuxt/image` ‏‮component‬‏ ‏‮and‬‏ ‏‮specify‬‏ `preload` ‏‮for‬‏ ‏‮LCP‬‏ ‏‮image‬‏. [‏‮Learn‬‏ ‏‮more‬‏](https://image.nuxt.com/usage/nuxt-img#preload)."
3118
3121
  },
3119
3122
  "node_modules/lighthouse-stack-packs/packs/nuxt.js | unsized-images": {
3120
- "message": "‏‮Use‬‏ ‏‮the‬‏ `nuxt/image` ‏‮component‬‏ ‏‮and‬‏ ‏‮specify‬‏ ‏‮explicit‬‏ `width` ‏‮and‬‏ `height`. [‏‮Learn‬‏ ‏‮more‬‏](https://image.nuxtjs.org/components/nuxt-img#width--height)."
3123
+ "message": "‏‮Use‬‏ ‏‮the‬‏ `nuxt/image` ‏‮component‬‏ ‏‮and‬‏ ‏‮specify‬‏ ‏‮explicit‬‏ `width` ‏‮and‬‏ `height`. [‏‮Learn‬‏ ‏‮more‬‏](https://image.nuxt.com/usage/nuxt-img#width-height)."
3121
3124
  },
3122
3125
  "node_modules/lighthouse-stack-packs/packs/nuxt.js | uses-optimized-images": {
3123
- "message": "‏‮Use‬‏ ‏‮the‬‏ `nuxt/image` ‏‮component‬‏ ‏‮and‬‏ ‏‮set‬‏ ‏‮the‬‏ ‏‮appropriate‬‏ `quality`. [‏‮Learn‬‏ ‏‮more‬‏](https://image.nuxtjs.org/components/nuxt-img#quality)."
3126
+ "message": "‏‮Use‬‏ ‏‮the‬‏ `nuxt/image` ‏‮component‬‏ ‏‮and‬‏ ‏‮set‬‏ ‏‮the‬‏ ‏‮appropriate‬‏ `quality`. [‏‮Learn‬‏ ‏‮more‬‏](https://image.nuxt.com/usage/nuxt-img#quality)."
3124
3127
  },
3125
3128
  "node_modules/lighthouse-stack-packs/packs/nuxt.js | uses-responsive-images": {
3126
- "message": "‏‮Use‬‏ ‏‮the‬‏ `nuxt/image` ‏‮component‬‏ ‏‮and‬‏ ‏‮set‬‏ ‏‮the‬‏ ‏‮appropriate‬‏ `sizes`. [‏‮Learn‬‏ ‏‮more‬‏](https://image.nuxtjs.org/components/nuxt-img#sizes)."
3129
+ "message": "‏‮Use‬‏ ‏‮the‬‏ `nuxt/image` ‏‮component‬‏ ‏‮and‬‏ ‏‮set‬‏ ‏‮the‬‏ ‏‮appropriate‬‏ `sizes`. [‏‮Learn‬‏ ‏‮more‬‏](https://image.nuxt.com/usage/nuxt-img#sizes)."
3127
3130
  },
3128
3131
  "node_modules/lighthouse-stack-packs/packs/octobercms.js | efficient-animated-content": {
3129
3132
  "message": "[‏‮Replace‬‏ ‏‮animated‬‏ ‏‮GIFs‬‏ ‏‮with‬‏ ‏‮video‬‏](https://web.dev/replace-gifs-with-videos/) ‏‮for‬‏ ‏‮faster‬‏ ‏‮web‬‏ ‏‮page‬‏ ‏‮loads‬‏ ‏‮and‬‏ ‏‮consider‬‏ ‏‮using‬‏ ‏‮modern‬‏ ‏‮file‬‏ ‏‮formats‬‏ ‏‮such‬‏ ‏‮as‬‏ [‏‮WebM‬‏](https://web.dev/replace-gifs-with-videos/#create-webm-videos) ‏‮or‬‏ [‏‮AV‬‏1](https://developers.google.com/web/updates/2018/09/chrome-70-media-updates#av1-decoder) ‏‮to‬‏ ‏‮improve‬‏ ‏‮compression‬‏ ‏‮efficiency‬‏ ‏‮by‬‏ ‏‮greater‬‏ ‏‮than‬‏ 30% ‏‮over‬‏ ‏‮the‬‏ ‏‮current‬‏ ‏‮state‬‏-‏‮of‬‏-‏‮the‬‏-‏‮art‬‏ ‏‮video‬‏ ‏‮codec‬‏, ‏‮VP‬‏9."
@@ -3359,6 +3362,12 @@
3359
3362
  "report/renderer/report-utils.js | runtimeAnalysisWindow": {
3360
3363
  "message": "‏‮Initial‬‏ ‏‮page‬‏ ‏‮load‬‏"
3361
3364
  },
3365
+ "report/renderer/report-utils.js | runtimeAnalysisWindowSnapshot": {
3366
+ "message": "‏‮Point‬‏-‏‮in‬‏-‏‮time‬‏ ‏‮snapshot‬‏"
3367
+ },
3368
+ "report/renderer/report-utils.js | runtimeAnalysisWindowTimespan": {
3369
+ "message": "‏‮User‬‏ ‏‮interactions‬‏ ‏‮timespan‬‏"
3370
+ },
3362
3371
  "report/renderer/report-utils.js | runtimeCustom": {
3363
3372
  "message": "‏‮Custom‬‏ ‏‮throttling‬‏"
3364
3373
  },
@@ -3393,10 +3402,10 @@
3393
3402
  "message": "‏‮User‬‏ ‏‮agent‬‏ (‏‮network‬‏)"
3394
3403
  },
3395
3404
  "report/renderer/report-utils.js | runtimeSingleLoad": {
3396
- "message": "‏‮Single‬‏ ‏‮page‬‏ ‏‮load‬‏"
3405
+ "message": "‏‮Single‬‏ ‏‮page‬‏ ‏‮session‬‏"
3397
3406
  },
3398
3407
  "report/renderer/report-utils.js | runtimeSingleLoadTooltip": {
3399
- "message": "‏‮This‬‏ ‏‮data‬‏ ‏‮is‬‏ ‏‮taken‬‏ ‏‮from‬‏ ‏‮a‬‏ ‏‮single‬‏ ‏‮page‬‏ ‏‮load‬‏, ‏‮as‬‏ ‏‮opposed‬‏ ‏‮to‬‏ ‏‮field‬‏ ‏‮data‬‏ ‏‮summarizing‬‏ ‏‮many‬‏ ‏‮sessions‬‏."
3408
+ "message": "‏‮This‬‏ ‏‮data‬‏ ‏‮is‬‏ ‏‮taken‬‏ ‏‮from‬‏ ‏‮a‬‏ ‏‮single‬‏ ‏‮page‬‏ ‏‮session‬‏, ‏‮as‬‏ ‏‮opposed‬‏ ‏‮to‬‏ ‏‮field‬‏ ‏‮data‬‏ ‏‮summarizing‬‏ ‏‮many‬‏ ‏‮sessions‬‏."
3400
3409
  },
3401
3410
  "report/renderer/report-utils.js | runtimeSlow4g": {
3402
3411
  "message": "‏‮Slow‬‏ 4‏‮G‬‏ ‏‮throttling‬‏"