lighthouse 12.6.1-dev.20250625 → 12.6.1-dev.20250626

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 (59) hide show
  1. package/core/audits/insights/cls-culprits-insight.js +2 -2
  2. package/core/audits/insights/{interaction-to-next-paint-insight.d.ts → inp-breakdown-insight.d.ts} +3 -3
  3. package/core/audits/insights/{interaction-to-next-paint-insight.js → inp-breakdown-insight.js} +10 -10
  4. package/core/audits/insights/lcp-breakdown-insight.d.ts +16 -0
  5. package/core/audits/insights/{lcp-phases-insight.js → lcp-breakdown-insight.js} +19 -19
  6. package/core/audits/layout-shifts.js +1 -1
  7. package/core/config/default-config.js +4 -4
  8. package/core/config/experimental-config.js +2 -2
  9. package/core/scoring.d.ts +6 -0
  10. package/package.json +2 -2
  11. package/shared/localization/locales/ar-XB.json +0 -57
  12. package/shared/localization/locales/ar.json +0 -57
  13. package/shared/localization/locales/bg.json +0 -57
  14. package/shared/localization/locales/ca.json +0 -57
  15. package/shared/localization/locales/cs.json +0 -57
  16. package/shared/localization/locales/da.json +0 -57
  17. package/shared/localization/locales/de.json +0 -57
  18. package/shared/localization/locales/el.json +0 -57
  19. package/shared/localization/locales/en-GB.json +0 -57
  20. package/shared/localization/locales/en-US.json +61 -49
  21. package/shared/localization/locales/en-XL.json +61 -49
  22. package/shared/localization/locales/es-419.json +0 -57
  23. package/shared/localization/locales/es.json +0 -57
  24. package/shared/localization/locales/fi.json +0 -57
  25. package/shared/localization/locales/fil.json +0 -57
  26. package/shared/localization/locales/fr.json +0 -57
  27. package/shared/localization/locales/he.json +0 -57
  28. package/shared/localization/locales/hi.json +0 -57
  29. package/shared/localization/locales/hr.json +0 -57
  30. package/shared/localization/locales/hu.json +0 -57
  31. package/shared/localization/locales/id.json +0 -57
  32. package/shared/localization/locales/it.json +0 -57
  33. package/shared/localization/locales/ja.json +0 -57
  34. package/shared/localization/locales/ko.json +0 -57
  35. package/shared/localization/locales/lt.json +0 -57
  36. package/shared/localization/locales/lv.json +0 -57
  37. package/shared/localization/locales/nl.json +0 -57
  38. package/shared/localization/locales/no.json +0 -57
  39. package/shared/localization/locales/pl.json +0 -57
  40. package/shared/localization/locales/pt-PT.json +0 -57
  41. package/shared/localization/locales/pt.json +0 -57
  42. package/shared/localization/locales/ro.json +0 -57
  43. package/shared/localization/locales/ru.json +0 -57
  44. package/shared/localization/locales/sk.json +0 -57
  45. package/shared/localization/locales/sl.json +0 -57
  46. package/shared/localization/locales/sr-Latn.json +0 -57
  47. package/shared/localization/locales/sr.json +0 -57
  48. package/shared/localization/locales/sv.json +0 -57
  49. package/shared/localization/locales/ta.json +0 -57
  50. package/shared/localization/locales/te.json +0 -57
  51. package/shared/localization/locales/th.json +0 -57
  52. package/shared/localization/locales/tr.json +0 -57
  53. package/shared/localization/locales/uk.json +0 -57
  54. package/shared/localization/locales/vi.json +0 -57
  55. package/shared/localization/locales/zh-HK.json +0 -57
  56. package/shared/localization/locales/zh-TW.json +0 -57
  57. package/shared/localization/locales/zh.json +0 -57
  58. package/types/lhr/audit-details.d.ts +1 -0
  59. package/core/audits/insights/lcp-phases-insight.d.ts +0 -16
@@ -62,11 +62,11 @@ class CLSCulpritsInsight extends Audit {
62
62
  cause: insightStr_(InsightUIStrings.unsizedImage),
63
63
  });
64
64
  }
65
- for (const request of culprits.fontRequests) {
65
+ for (const request of culprits.webFonts) {
66
66
  const url = request.args.data.url;
67
67
  subItems.push({
68
68
  extra: {type: 'url', value: url},
69
- cause: insightStr_(InsightUIStrings.fontRequest),
69
+ cause: insightStr_(InsightUIStrings.webFont),
70
70
  });
71
71
  }
72
72
  for (const iframe of culprits.iframes) {
@@ -1,5 +1,5 @@
1
- export default InteractionToNextPaintInsight;
2
- declare class InteractionToNextPaintInsight extends Audit {
1
+ export default INPBreakdownInsight;
2
+ declare class INPBreakdownInsight extends Audit {
3
3
  /**
4
4
  * @param {LH.Artifacts} artifacts
5
5
  * @param {LH.Audit.Context} context
@@ -8,4 +8,4 @@ declare class InteractionToNextPaintInsight extends Audit {
8
8
  static audit(artifacts: LH.Artifacts, context: LH.Audit.Context): Promise<LH.Audit.Product>;
9
9
  }
10
10
  import { Audit } from '../audit.js';
11
- //# sourceMappingURL=interaction-to-next-paint-insight.d.ts.map
11
+ //# sourceMappingURL=inp-breakdown-insight.d.ts.map
@@ -4,22 +4,22 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import {UIStrings} from '@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js';
7
+ import {UIStrings} from '@paulirish/trace_engine/models/trace/insights/INPBreakdown.js';
8
8
 
9
9
  import {Audit} from '../audit.js';
10
10
  import * as i18n from '../../lib/i18n/i18n.js';
11
11
  import {adaptInsightToAuditProduct, makeNodeItemForNodeId} from './insight-audit.js';
12
12
 
13
13
  // eslint-disable-next-line max-len
14
- const str_ = i18n.createIcuMessageFn('node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js', UIStrings);
14
+ const str_ = i18n.createIcuMessageFn('node_modules/@paulirish/trace_engine/models/trace/insights/INPBreakdown.js', UIStrings);
15
15
 
16
- class InteractionToNextPaintInsight extends Audit {
16
+ class INPBreakdownInsight extends Audit {
17
17
  /**
18
18
  * @return {LH.Audit.Meta}
19
19
  */
20
20
  static get meta() {
21
21
  return {
22
- id: 'interaction-to-next-paint-insight',
22
+ id: 'inp-breakdown-insight',
23
23
  title: str_(UIStrings.title),
24
24
  failureTitle: str_(UIStrings.title),
25
25
  description: str_(UIStrings.description),
@@ -35,7 +35,7 @@ class InteractionToNextPaintInsight extends Audit {
35
35
  * @return {Promise<LH.Audit.Product>}
36
36
  */
37
37
  static async audit(artifacts, context) {
38
- return adaptInsightToAuditProduct(artifacts, context, 'InteractionToNextPaint', (insight) => {
38
+ return adaptInsightToAuditProduct(artifacts, context, 'INPBreakdown', (insight) => {
39
39
  const event = insight.longestInteractionEvent;
40
40
  if (!event) {
41
41
  // TODO: show UIStrings.noInteractions?
@@ -44,16 +44,16 @@ class InteractionToNextPaintInsight extends Audit {
44
44
 
45
45
  /** @type {LH.Audit.Details.Table['headings']} */
46
46
  const headings = [
47
- {key: 'label', valueType: 'text', label: str_(UIStrings.phase)},
47
+ {key: 'label', valueType: 'text', label: str_(UIStrings.subpart)},
48
48
  {key: 'duration', valueType: 'ms', label: str_(i18n.UIStrings.columnDuration)},
49
49
  ];
50
50
 
51
51
  /** @type {LH.Audit.Details.Table['items']} */
52
52
  const items = [
53
53
  /* eslint-disable max-len */
54
- {phase: 'inputDelay', label: str_(UIStrings.inputDelay), duration: event.inputDelay / 1000},
55
- {phase: 'processingDuration', label: str_(UIStrings.processingDuration), duration: event.mainThreadHandling / 1000},
56
- {phase: 'presentationDelay', label: str_(UIStrings.presentationDelay), duration: event.presentationDelay / 1000},
54
+ {subpart: 'inputDelay', label: str_(UIStrings.inputDelay), duration: event.inputDelay / 1000},
55
+ {subpart: 'processingDuration', label: str_(UIStrings.processingDuration), duration: event.mainThreadHandling / 1000},
56
+ {subpart: 'presentationDelay', label: str_(UIStrings.presentationDelay), duration: event.presentationDelay / 1000},
57
57
  /* eslint-enable max-len */
58
58
  ];
59
59
 
@@ -65,4 +65,4 @@ class InteractionToNextPaintInsight extends Audit {
65
65
  }
66
66
  }
67
67
 
68
- export default InteractionToNextPaintInsight;
68
+ export default INPBreakdownInsight;
@@ -0,0 +1,16 @@
1
+ export default LCPBreakdownInsight;
2
+ declare class LCPBreakdownInsight extends Audit {
3
+ /**
4
+ * @param {Required<import('@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js').LCPBreakdownInsightModel>['subparts']} subparts
5
+ * @return {LH.Audit.Details.Table}
6
+ */
7
+ static makeSubpartsTable(subparts: Required<import("@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js").LCPBreakdownInsightModel>["subparts"]): LH.Audit.Details.Table;
8
+ /**
9
+ * @param {LH.Artifacts} artifacts
10
+ * @param {LH.Audit.Context} context
11
+ * @return {Promise<LH.Audit.Product>}
12
+ */
13
+ static audit(artifacts: LH.Artifacts, context: LH.Audit.Context): Promise<LH.Audit.Product>;
14
+ }
15
+ import { Audit } from '../audit.js';
16
+ //# sourceMappingURL=lcp-breakdown-insight.d.ts.map
@@ -4,22 +4,22 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import {UIStrings} from '@paulirish/trace_engine/models/trace/insights/LCPPhases.js';
7
+ import {UIStrings} from '@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js';
8
8
 
9
9
  import {Audit} from '../audit.js';
10
10
  import * as i18n from '../../lib/i18n/i18n.js';
11
11
  import {adaptInsightToAuditProduct, makeNodeItemForNodeId} from './insight-audit.js';
12
12
 
13
13
  // eslint-disable-next-line max-len
14
- const str_ = i18n.createIcuMessageFn('node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js', UIStrings);
14
+ const str_ = i18n.createIcuMessageFn('node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js', UIStrings);
15
15
 
16
- class LCPPhasesInsight extends Audit {
16
+ class LCPBreakdownInsight extends Audit {
17
17
  /**
18
18
  * @return {LH.Audit.Meta}
19
19
  */
20
20
  static get meta() {
21
21
  return {
22
- id: 'lcp-phases-insight',
22
+ id: 'lcp-breakdown-insight',
23
23
  title: str_(UIStrings.title),
24
24
  failureTitle: str_(UIStrings.title),
25
25
  description: str_(UIStrings.description),
@@ -30,33 +30,33 @@ class LCPPhasesInsight extends Audit {
30
30
  }
31
31
 
32
32
  /**
33
- * @param {Required<import('@paulirish/trace_engine/models/trace/insights/LCPPhases.js').LCPPhasesInsightModel>['phases']} phases
33
+ * @param {Required<import('@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js').LCPBreakdownInsightModel>['subparts']} subparts
34
34
  * @return {LH.Audit.Details.Table}
35
35
  */
36
- static makePhaseTable(phases) {
37
- const {ttfb, loadDelay, loadTime, renderDelay} = phases;
36
+ static makeSubpartsTable(subparts) {
37
+ const {ttfb, loadDelay, loadDuration, renderDelay} = subparts;
38
38
 
39
39
  /** @type {LH.Audit.Details.Table['headings']} */
40
40
  const headings = [
41
- {key: 'label', valueType: 'text', label: str_(UIStrings.phase)},
41
+ {key: 'label', valueType: 'text', label: str_(UIStrings.subpart)},
42
42
  {key: 'duration', valueType: 'ms', label: str_(i18n.UIStrings.columnDuration)},
43
43
  ];
44
44
 
45
45
  /** @type {LH.Audit.Details.Table['items']} */
46
46
  let items = [
47
47
  /* eslint-disable max-len */
48
- {phase: 'timeToFirstByte', label: str_(UIStrings.timeToFirstByte), duration: ttfb},
49
- {phase: 'resourceLoadDelay', label: str_(UIStrings.resourceLoadDelay), duration: loadDelay},
50
- {phase: 'resourceLoadDuration', label: str_(UIStrings.resourceLoadDuration), duration: loadTime},
51
- {phase: 'elementRenderDelay', label: str_(UIStrings.elementRenderDelay), duration: renderDelay},
48
+ {subpart: 'timeToFirstByte', label: str_(UIStrings.timeToFirstByte), duration: ttfb.range / 1000},
49
+ {subpart: 'resourceLoadDelay', label: str_(UIStrings.resourceLoadDelay), duration: (loadDelay?.range ?? 0) / 1000},
50
+ {subpart: 'resourceLoadDuration', label: str_(UIStrings.resourceLoadDuration), duration: (loadDuration?.range ?? 0) / 1000},
51
+ {subpart: 'elementRenderDelay', label: str_(UIStrings.elementRenderDelay), duration: renderDelay.range / 1000},
52
52
  /* eslint-enable max-len */
53
53
  ];
54
54
 
55
55
  if (loadDelay === undefined) {
56
- items = items.filter(item => item.phase !== 'resourceLoadDelay');
56
+ items = items.filter(item => item.subpart !== 'resourceLoadDelay');
57
57
  }
58
- if (loadTime === undefined) {
59
- items = items.filter(item => item.phase !== 'resourceLoadDuration');
58
+ if (loadDuration === undefined) {
59
+ items = items.filter(item => item.subpart !== 'resourceLoadDuration');
60
60
  }
61
61
 
62
62
  return Audit.makeTableDetails(headings, items);
@@ -68,17 +68,17 @@ class LCPPhasesInsight extends Audit {
68
68
  * @return {Promise<LH.Audit.Product>}
69
69
  */
70
70
  static async audit(artifacts, context) {
71
- return adaptInsightToAuditProduct(artifacts, context, 'LCPPhases', (insight) => {
72
- if (!insight.phases) {
71
+ return adaptInsightToAuditProduct(artifacts, context, 'LCPBreakdown', (insight) => {
72
+ if (!insight.subparts) {
73
73
  return;
74
74
  }
75
75
 
76
76
  return Audit.makeListDetails([
77
- LCPPhasesInsight.makePhaseTable(insight.phases),
77
+ LCPBreakdownInsight.makeSubpartsTable(insight.subparts),
78
78
  makeNodeItemForNodeId(artifacts.TraceElements, insight.lcpEvent?.args.data?.nodeId),
79
79
  ].filter(table => table !== undefined));
80
80
  });
81
81
  }
82
82
  }
83
83
 
84
- export default LCPPhasesInsight;
84
+ export default LCPBreakdownInsight;
@@ -105,7 +105,7 @@ class LayoutShifts extends Audit {
105
105
  cause: str_(UIStrings.rootCauseUnsizedMedia),
106
106
  });
107
107
  }
108
- for (const request of rootCauses.fontRequests) {
108
+ for (const request of rootCauses.webFonts) {
109
109
  const url = request.args.data.url;
110
110
  subItems.push({
111
111
  extra: {type: 'url', value: url},
@@ -319,9 +319,9 @@ const defaultConfig = {
319
319
  'insights/font-display-insight',
320
320
  'insights/forced-reflow-insight',
321
321
  'insights/image-delivery-insight',
322
- 'insights/interaction-to-next-paint-insight',
322
+ 'insights/inp-breakdown-insight',
323
+ 'insights/lcp-breakdown-insight',
323
324
  'insights/lcp-discovery-insight',
324
- 'insights/lcp-phases-insight',
325
325
  'insights/legacy-javascript-insight',
326
326
  'insights/modern-http-insight',
327
327
  'insights/network-dependency-tree-insight',
@@ -421,9 +421,9 @@ const defaultConfig = {
421
421
  {id: 'font-display-insight', weight: 0, group: 'hidden'},
422
422
  {id: 'forced-reflow-insight', weight: 0, group: 'hidden'},
423
423
  {id: 'image-delivery-insight', weight: 0, group: 'hidden'},
424
- {id: 'interaction-to-next-paint-insight', weight: 0, group: 'hidden'},
424
+ {id: 'inp-breakdown-insight', weight: 0, group: 'hidden'},
425
+ {id: 'lcp-breakdown-insight', weight: 0, group: 'hidden'},
425
426
  {id: 'lcp-discovery-insight', weight: 0, group: 'hidden'},
426
- {id: 'lcp-phases-insight', weight: 0, group: 'hidden'},
427
427
  {id: 'legacy-javascript-insight', weight: 0, group: 'hidden'},
428
428
  {id: 'modern-http-insight', weight: 0, group: 'hidden'},
429
429
  {id: 'network-dependency-tree-insight', weight: 0, group: 'hidden'},
@@ -35,9 +35,9 @@ const config = {
35
35
  {id: 'font-display-insight', weight: 0, group: 'insights'},
36
36
  {id: 'forced-reflow-insight', weight: 0, group: 'insights'},
37
37
  {id: 'image-delivery-insight', weight: 0, group: 'insights'},
38
- {id: 'interaction-to-next-paint-insight', weight: 0, group: 'insights'},
38
+ {id: 'inp-breakdown-insight', weight: 0, group: 'insights'},
39
+ {id: 'lcp-breakdown-insight', weight: 0, group: 'insights'},
39
40
  {id: 'lcp-discovery-insight', weight: 0, group: 'insights'},
40
- {id: 'lcp-phases-insight', weight: 0, group: 'insights'},
41
41
  {id: 'legacy-javascript-insight', weight: 0, group: 'insights'},
42
42
  {id: 'modern-http-insight', weight: 0, group: 'insights'},
43
43
  {id: 'network-dependency-tree-insight', weight: 0, group: 'insights'},
package/core/scoring.d.ts CHANGED
@@ -187,6 +187,7 @@ export class ReportScoring {
187
187
  line: number;
188
188
  column: number;
189
189
  } | undefined;
190
+ functionName?: string | import("./index.js").IcuMessage | undefined;
190
191
  } | {
191
192
  type: "link";
192
193
  text: string | import("./index.js").IcuMessage;
@@ -330,6 +331,7 @@ export class ReportScoring {
330
331
  line: number;
331
332
  column: number;
332
333
  } | undefined;
334
+ functionName?: string | import("./index.js").IcuMessage | undefined;
333
335
  } | {
334
336
  type: "link";
335
337
  text: string | import("./index.js").IcuMessage;
@@ -464,6 +466,7 @@ export class ReportScoring {
464
466
  line: number;
465
467
  column: number;
466
468
  } | undefined;
469
+ functionName?: string | import("./index.js").IcuMessage | undefined;
467
470
  } | {
468
471
  type: "link";
469
472
  text: string | import("./index.js").IcuMessage;
@@ -496,6 +499,7 @@ export class ReportScoring {
496
499
  line: number;
497
500
  column: number;
498
501
  } | undefined;
502
+ functionName?: string | import("./index.js").IcuMessage | undefined;
499
503
  } | {
500
504
  type: "link";
501
505
  text: string | import("./index.js").IcuMessage;
@@ -555,6 +559,7 @@ export class ReportScoring {
555
559
  line: number;
556
560
  column: number;
557
561
  } | undefined;
562
+ functionName?: string | import("./index.js").IcuMessage | undefined;
558
563
  } | {
559
564
  type: "link";
560
565
  text: string | import("./index.js").IcuMessage;
@@ -660,6 +665,7 @@ export class ReportScoring {
660
665
  line: number;
661
666
  column: number;
662
667
  } | undefined;
668
+ functionName?: string | import("./index.js").IcuMessage | undefined;
663
669
  } | {
664
670
  type: "link";
665
671
  text: string | import("./index.js").IcuMessage;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "lighthouse",
3
3
  "type": "module",
4
- "version": "12.6.1-dev.20250625",
4
+ "version": "12.6.1-dev.20250626",
5
5
  "description": "Automated auditing, performance metrics, and best practices for the web.",
6
6
  "main": "./core/index.js",
7
7
  "bin": {
@@ -189,7 +189,7 @@
189
189
  "webtreemap-cdt": "^3.2.1"
190
190
  },
191
191
  "dependencies": {
192
- "@paulirish/trace_engine": "0.0.55",
192
+ "@paulirish/trace_engine": "0.0.56",
193
193
  "@sentry/node": "^9.28.1",
194
194
  "axe-core": "^4.10.3",
195
195
  "chrome-launcher": "^1.2.0",
@@ -2336,9 +2336,6 @@
2336
2336
  "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | description": {
2337
2337
  "message": "تحدث تغييرات التصميم عندما تتحرك العناصر بدون أي تدخُّل من المستخدم. [تحقَّق من أسباب تغييرات التصميم](https://web.dev/articles/optimize-cls)، مثل إضافة عناصر أو إزالتها أو تغيير خطوطها أثناء تحميل الصفحة."
2338
2338
  },
2339
- "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | fontRequest": {
2340
- "message": "طلب الخط"
2341
- },
2342
2339
  "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | injectedIframe": {
2343
2340
  "message": "إطار iframe الذي تم إدخاله"
2344
2341
  },
@@ -2513,30 +2510,6 @@
2513
2510
  "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | useVideoFormat": {
2514
2511
  "message": "إنّ استخدام تنسيقات الفيديو بدلاً من ملفات GIF يمكن أن يؤدي إلى تحسين حجم تنزيل المحتوى المتحرك."
2515
2512
  },
2516
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | description": {
2517
- "message": "ابدأ بالتحقيق في المرحلة الأطول. [يمكن تقليل التأخيرات](https://web.dev/articles/optimize-inp#optimize_interactions). ولتقليل مدة المعالجة، [حسِّن تكاليف سلسلة التعليمات الرئيسية](https://web.dev/articles/optimize-long-tasks)، والتي تكون في الغالب بيانات JavaScript."
2518
- },
2519
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | duration": {
2520
- "message": "المدة"
2521
- },
2522
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | inputDelay": {
2523
- "message": "تأخير عملية الإدخال"
2524
- },
2525
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | noInteractions": {
2526
- "message": "لم يتم رصد أي تفاعلات"
2527
- },
2528
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | phase": {
2529
- "message": "المرحلة"
2530
- },
2531
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | presentationDelay": {
2532
- "message": "تأخير العرض"
2533
- },
2534
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | processingDuration": {
2535
- "message": "مدة المعالجة"
2536
- },
2537
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | title": {
2538
- "message": "مدى استجابة الصفحة لتفاعلات المستخدم (INP) حسب المرحلة"
2539
- },
2540
2513
  "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | description": {
2541
2514
  "message": "يمكنك تحسين مقياس سرعة عرض أكبر محتوى مرئي (LCP) من خلال جعل صورة مقياس LCP [قابلة للاكتشاف](https://web.dev/articles/optimize-lcp#1_eliminate_resource_load_delay) من HTML على الفور، و[تجنُّب التحميل الكسول](https://web.dev/articles/lcp-lazy-loading)."
2542
2515
  },
@@ -2564,36 +2537,6 @@
2564
2537
  "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | title": {
2565
2538
  "message": "الاطّلاع على طلبات LCP"
2566
2539
  },
2567
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | description": {
2568
- "message": "لكل [مرحلة استراتيجيات تحسين محدَّدة](https://web.dev/articles/optimize-lcp#lcp-breakdown). ومن الأفضل أن يتم قضاء معظم وقت سرعة عرض أكبر محتوى مرئي (LCP) في تحميل الموارد، وليس في التأخيرات."
2569
- },
2570
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | duration": {
2571
- "message": "المدة"
2572
- },
2573
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | elementRenderDelay": {
2574
- "message": "مهلة عرض العناصر"
2575
- },
2576
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | fieldDuration": {
2577
- "message": "الشريحة المئوية الـ 75 من بيانات تجارب المستخدمِين الحقيقيين"
2578
- },
2579
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | noLcp": {
2580
- "message": "لم يتم رصد أي مقياس لسرعة عرض أكبر محتوى مرئي (LCP)"
2581
- },
2582
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | phase": {
2583
- "message": "المرحلة"
2584
- },
2585
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | resourceLoadDelay": {
2586
- "message": "مهلة تحميل الموارد"
2587
- },
2588
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | resourceLoadDuration": {
2589
- "message": "مدة تحميل المورد"
2590
- },
2591
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | timeToFirstByte": {
2592
- "message": "مدة تحميل أول بايت"
2593
- },
2594
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | title": {
2595
- "message": "سرعة عرض أكبر محتوى مرئي (LCP) حسب المرحلة"
2596
- },
2597
2540
  "node_modules/@paulirish/trace_engine/models/trace/insights/LegacyJavaScript.js | columnScript": {
2598
2541
  "message": "النص البرمجي"
2599
2542
  },
@@ -2336,9 +2336,6 @@
2336
2336
  "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | description": {
2337
2337
  "message": "تحدث تغييرات التصميم عندما تتحرك العناصر بدون أي تدخُّل من المستخدم. [تحقَّق من أسباب تغييرات التصميم](https://web.dev/articles/optimize-cls)، مثل إضافة عناصر أو إزالتها أو تغيير خطوطها أثناء تحميل الصفحة."
2338
2338
  },
2339
- "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | fontRequest": {
2340
- "message": "طلب الخط"
2341
- },
2342
2339
  "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | injectedIframe": {
2343
2340
  "message": "إطار iframe الذي تم إدخاله"
2344
2341
  },
@@ -2513,30 +2510,6 @@
2513
2510
  "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | useVideoFormat": {
2514
2511
  "message": "إنّ استخدام تنسيقات الفيديو بدلاً من ملفات GIF يمكن أن يؤدي إلى تحسين حجم تنزيل المحتوى المتحرك."
2515
2512
  },
2516
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | description": {
2517
- "message": "ابدأ بالتحقيق في المرحلة الأطول. [يمكن تقليل التأخيرات](https://web.dev/articles/optimize-inp#optimize_interactions). ولتقليل مدة المعالجة، [حسِّن تكاليف سلسلة التعليمات الرئيسية](https://web.dev/articles/optimize-long-tasks)، والتي تكون في الغالب بيانات JavaScript."
2518
- },
2519
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | duration": {
2520
- "message": "المدة"
2521
- },
2522
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | inputDelay": {
2523
- "message": "تأخير عملية الإدخال"
2524
- },
2525
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | noInteractions": {
2526
- "message": "لم يتم رصد أي تفاعلات"
2527
- },
2528
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | phase": {
2529
- "message": "المرحلة"
2530
- },
2531
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | presentationDelay": {
2532
- "message": "تأخير العرض"
2533
- },
2534
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | processingDuration": {
2535
- "message": "مدة المعالجة"
2536
- },
2537
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | title": {
2538
- "message": "مدى استجابة الصفحة لتفاعلات المستخدم (INP) حسب المرحلة"
2539
- },
2540
2513
  "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | description": {
2541
2514
  "message": "يمكنك تحسين مقياس سرعة عرض أكبر محتوى مرئي (LCP) من خلال جعل صورة مقياس LCP [قابلة للاكتشاف](https://web.dev/articles/optimize-lcp#1_eliminate_resource_load_delay) من HTML على الفور، و[تجنُّب التحميل الكسول](https://web.dev/articles/lcp-lazy-loading)."
2542
2515
  },
@@ -2564,36 +2537,6 @@
2564
2537
  "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | title": {
2565
2538
  "message": "الاطّلاع على طلبات LCP"
2566
2539
  },
2567
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | description": {
2568
- "message": "لكل [مرحلة استراتيجيات تحسين محدَّدة](https://web.dev/articles/optimize-lcp#lcp-breakdown). ومن الأفضل أن يتم قضاء معظم وقت سرعة عرض أكبر محتوى مرئي (LCP) في تحميل الموارد، وليس في التأخيرات."
2569
- },
2570
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | duration": {
2571
- "message": "المدة"
2572
- },
2573
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | elementRenderDelay": {
2574
- "message": "مهلة عرض العناصر"
2575
- },
2576
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | fieldDuration": {
2577
- "message": "الشريحة المئوية الـ 75 من بيانات تجارب المستخدمِين الحقيقيين"
2578
- },
2579
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | noLcp": {
2580
- "message": "لم يتم رصد أي مقياس لسرعة عرض أكبر محتوى مرئي (LCP)"
2581
- },
2582
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | phase": {
2583
- "message": "المرحلة"
2584
- },
2585
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | resourceLoadDelay": {
2586
- "message": "مهلة تحميل الموارد"
2587
- },
2588
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | resourceLoadDuration": {
2589
- "message": "مدة تحميل المورد"
2590
- },
2591
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | timeToFirstByte": {
2592
- "message": "مدة تحميل أول بايت"
2593
- },
2594
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | title": {
2595
- "message": "سرعة عرض أكبر محتوى مرئي (LCP) حسب المرحلة"
2596
- },
2597
2540
  "node_modules/@paulirish/trace_engine/models/trace/insights/LegacyJavaScript.js | columnScript": {
2598
2541
  "message": "النص البرمجي"
2599
2542
  },
@@ -2336,9 +2336,6 @@
2336
2336
  "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | description": {
2337
2337
  "message": "Структурни промени настъпват, когато елементите се преместват без взаимодействие от страна на потребителя. [Проучете причините за структурните промени](https://web.dev/articles/optimize-cls), като например добавяне или премахване на елементи или промяна на шрифтовете им при зареждане на страницата."
2338
2338
  },
2339
- "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | fontRequest": {
2340
- "message": "Заявка за шрифт"
2341
- },
2342
2339
  "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | injectedIframe": {
2343
2340
  "message": "Вмъкната вложена рамка"
2344
2341
  },
@@ -2513,30 +2510,6 @@
2513
2510
  "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | useVideoFormat": {
2514
2511
  "message": "Използването на видеоформати вместо GIF файлове може да подобри размера за изтегляне на анимираното съдържание."
2515
2512
  },
2516
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | description": {
2517
- "message": "Започнете проверката от най-продължителната фаза. [Забавянията могат да бъдат сведени до минимум](https://web.dev/articles/optimize-inp#optimize_interactions). За да ускорите обработката, [оптимизирайте работата на основната нишка](https://web.dev/articles/optimize-long-tasks), която често е JS."
2518
- },
2519
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | duration": {
2520
- "message": "Продължителност"
2521
- },
2522
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | inputDelay": {
2523
- "message": "Забавяне след входящи данни от действие"
2524
- },
2525
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | noInteractions": {
2526
- "message": "Не са открити взаимодействия"
2527
- },
2528
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | phase": {
2529
- "message": "Фаза"
2530
- },
2531
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | presentationDelay": {
2532
- "message": "Забавяне на представянето"
2533
- },
2534
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | processingDuration": {
2535
- "message": "Продължителност на обработването"
2536
- },
2537
- "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | title": {
2538
- "message": "INP по фаза"
2539
- },
2540
2513
  "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | description": {
2541
2514
  "message": "Оптимизирайте LCP, като направите изображението, представляващо LCP, незабавно [откриваемо](https://web.dev/articles/optimize-lcp#1_eliminate_resource_load_delay) в HTML кода и [избягвате забавеното зареждане](https://web.dev/articles/lcp-lazy-loading)"
2542
2515
  },
@@ -2564,36 +2537,6 @@
2564
2537
  "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | title": {
2565
2538
  "message": "Откриване на заявките за LCP"
2566
2539
  },
2567
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | description": {
2568
- "message": "За всяка [фаза има конкретни стратегии за подобряване](https://web.dev/articles/optimize-lcp#lcp-breakdown). В идеалния случай по-голямата част от времето за LCP трябва да премине в зареждане на ресурсите, а не да е свързана със забавяния."
2569
- },
2570
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | duration": {
2571
- "message": "Продължителност"
2572
- },
2573
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | elementRenderDelay": {
2574
- "message": "Забавяне при рендерирането на елемента"
2575
- },
2576
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | fieldDuration": {
2577
- "message": "Поле със 75-и процентил"
2578
- },
2579
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | noLcp": {
2580
- "message": "Не е открито изобразяване на най-голямото съдържание (LCP)"
2581
- },
2582
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | phase": {
2583
- "message": "Фаза"
2584
- },
2585
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | resourceLoadDelay": {
2586
- "message": "Забавяне при зареждането на ресурсите"
2587
- },
2588
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | resourceLoadDuration": {
2589
- "message": "Продължителност на зареждането на ресурсите"
2590
- },
2591
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | timeToFirstByte": {
2592
- "message": "Време до първия байт"
2593
- },
2594
- "node_modules/@paulirish/trace_engine/models/trace/insights/LCPPhases.js | title": {
2595
- "message": "LCP по фаза"
2596
- },
2597
2540
  "node_modules/@paulirish/trace_engine/models/trace/insights/LegacyJavaScript.js | columnScript": {
2598
2541
  "message": "Скрипт"
2599
2542
  },