lighthouse 12.3.0 → 12.4.0-dev.20250227

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 (142) hide show
  1. package/cli/test/smokehouse/core-tests.js +4 -0
  2. package/core/audits/audit.d.ts +5 -0
  3. package/core/audits/audit.js +12 -0
  4. package/core/audits/bootup-time.js +0 -2
  5. package/core/audits/byte-efficiency/duplicated-javascript.d.ts +4 -5
  6. package/core/audits/byte-efficiency/duplicated-javascript.js +9 -5
  7. package/core/audits/byte-efficiency/legacy-javascript.d.ts +2 -2
  8. package/core/audits/byte-efficiency/legacy-javascript.js +17 -5
  9. package/core/audits/byte-efficiency/polyfill-graph-data.json +48 -49
  10. package/core/audits/byte-efficiency/total-byte-weight.js +0 -2
  11. package/core/audits/clickjacking-mitigation.d.ts +42 -0
  12. package/core/audits/clickjacking-mitigation.js +139 -0
  13. package/core/audits/dobetterweb/dom-size.js +0 -2
  14. package/core/audits/insights/README.md +3 -0
  15. package/core/audits/insights/cls-culprits-insight.d.ts +25 -0
  16. package/core/audits/insights/cls-culprits-insight.js +137 -0
  17. package/core/audits/insights/document-latency-insight.d.ts +11 -0
  18. package/core/audits/insights/document-latency-insight.js +48 -0
  19. package/core/audits/insights/dom-size-insight.d.ts +11 -0
  20. package/core/audits/insights/dom-size-insight.js +85 -0
  21. package/core/audits/insights/font-display-insight.d.ts +11 -0
  22. package/core/audits/insights/font-display-insight.js +53 -0
  23. package/core/audits/insights/forced-reflow-insight.d.ts +11 -0
  24. package/core/audits/insights/forced-reflow-insight.js +52 -0
  25. package/core/audits/insights/image-delivery-insight.d.ts +11 -0
  26. package/core/audits/insights/image-delivery-insight.js +83 -0
  27. package/core/audits/insights/insight-audit.d.ts +23 -0
  28. package/core/audits/insights/insight-audit.js +133 -0
  29. package/core/audits/insights/interaction-to-next-paint-insight.d.ts +11 -0
  30. package/core/audits/insights/interaction-to-next-paint-insight.js +71 -0
  31. package/core/audits/insights/lcp-discovery-insight.d.ts +11 -0
  32. package/core/audits/insights/lcp-discovery-insight.js +48 -0
  33. package/core/audits/insights/lcp-phases-insight.d.ts +16 -0
  34. package/core/audits/insights/lcp-phases-insight.js +87 -0
  35. package/core/audits/insights/long-critical-network-tree-insight.d.ts +11 -0
  36. package/core/audits/insights/long-critical-network-tree-insight.js +53 -0
  37. package/core/audits/insights/render-blocking-insight.d.ts +11 -0
  38. package/core/audits/insights/render-blocking-insight.js +57 -0
  39. package/core/audits/insights/slow-css-selector-insight.d.ts +11 -0
  40. package/core/audits/insights/slow-css-selector-insight.js +52 -0
  41. package/core/audits/insights/third-parties-insight.d.ts +28 -0
  42. package/core/audits/insights/third-parties-insight.js +90 -0
  43. package/core/audits/insights/viewport-insight.d.ts +11 -0
  44. package/core/audits/insights/viewport-insight.js +54 -0
  45. package/core/audits/layout-shifts.d.ts +0 -1
  46. package/core/audits/layout-shifts.js +18 -21
  47. package/core/audits/mainthread-work-breakdown.js +0 -2
  48. package/core/audits/seo/is-crawlable.d.ts +1 -0
  49. package/core/audits/server-response-time.js +0 -1
  50. package/core/computed/metrics/lantern-metric.js +5 -1
  51. package/core/computed/trace-engine-result.js +71 -17
  52. package/core/config/default-config.js +37 -1
  53. package/core/gather/gatherers/inspector-issues.js +3 -0
  54. package/core/gather/gatherers/trace-elements.d.ts +10 -2
  55. package/core/gather/gatherers/trace-elements.js +89 -12
  56. package/core/lib/bf-cache-strings.d.ts +7 -4
  57. package/core/lib/bf-cache-strings.js +174 -140
  58. package/core/lib/cdt/generated/ParsedURL.d.ts +1 -0
  59. package/core/lib/cdt/generated/ParsedURL.js +16 -4
  60. package/core/lib/cdt/generated/SourceMap.d.ts +32 -5
  61. package/core/lib/cdt/generated/SourceMap.js +192 -100
  62. package/core/lib/deprecations-strings.d.ts +78 -98
  63. package/core/lib/deprecations-strings.js +23 -41
  64. package/core/lib/i18n/i18n.d.ts +1 -0
  65. package/core/lib/i18n/i18n.js +2 -0
  66. package/core/lib/trace-engine.d.ts +1 -0
  67. package/core/lib/trace-engine.js +2 -0
  68. package/core/runner.js +2 -0
  69. package/dist/report/bundle.esm.js +196 -9
  70. package/dist/report/flow.js +197 -10
  71. package/dist/report/standalone.js +197 -10
  72. package/flow-report/src/i18n/i18n.d.ts +2 -0
  73. package/package.json +15 -13
  74. package/readme.md +3 -0
  75. package/report/assets/styles.css +179 -5
  76. package/report/assets/templates.html +14 -0
  77. package/report/renderer/components.js +9 -3
  78. package/report/renderer/details-renderer.d.ts +5 -0
  79. package/report/renderer/details-renderer.js +24 -0
  80. package/report/renderer/dom.d.ts +12 -1
  81. package/report/renderer/dom.js +26 -1
  82. package/report/renderer/i18n-formatter.d.ts +1 -1
  83. package/report/renderer/performance-category-renderer.d.ts +10 -0
  84. package/report/renderer/performance-category-renderer.js +81 -20
  85. package/report/renderer/report-utils.d.ts +1 -0
  86. package/report/renderer/report-utils.js +2 -0
  87. package/report/renderer/topbar-features.js +7 -0
  88. package/shared/localization/locales/ar-XB.json +74 -26
  89. package/shared/localization/locales/ar.json +76 -28
  90. package/shared/localization/locales/bg.json +74 -26
  91. package/shared/localization/locales/ca.json +74 -26
  92. package/shared/localization/locales/cs.json +74 -26
  93. package/shared/localization/locales/da.json +74 -26
  94. package/shared/localization/locales/de.json +75 -27
  95. package/shared/localization/locales/el.json +74 -26
  96. package/shared/localization/locales/en-GB.json +74 -26
  97. package/shared/localization/locales/en-US.json +288 -30
  98. package/shared/localization/locales/en-XA.json +48 -24
  99. package/shared/localization/locales/en-XL.json +288 -30
  100. package/shared/localization/locales/es-419.json +74 -26
  101. package/shared/localization/locales/es.json +74 -26
  102. package/shared/localization/locales/fi.json +74 -26
  103. package/shared/localization/locales/fil.json +75 -27
  104. package/shared/localization/locales/fr.json +74 -26
  105. package/shared/localization/locales/he.json +82 -34
  106. package/shared/localization/locales/hi.json +74 -26
  107. package/shared/localization/locales/hr.json +75 -27
  108. package/shared/localization/locales/hu.json +74 -26
  109. package/shared/localization/locales/id.json +74 -26
  110. package/shared/localization/locales/it.json +85 -37
  111. package/shared/localization/locales/ja.json +75 -27
  112. package/shared/localization/locales/ko.json +75 -27
  113. package/shared/localization/locales/lt.json +75 -27
  114. package/shared/localization/locales/lv.json +74 -26
  115. package/shared/localization/locales/nl.json +74 -26
  116. package/shared/localization/locales/no.json +75 -27
  117. package/shared/localization/locales/pl.json +74 -26
  118. package/shared/localization/locales/pt-PT.json +74 -26
  119. package/shared/localization/locales/pt.json +74 -26
  120. package/shared/localization/locales/ro.json +74 -26
  121. package/shared/localization/locales/ru.json +74 -26
  122. package/shared/localization/locales/sk.json +74 -26
  123. package/shared/localization/locales/sl.json +74 -26
  124. package/shared/localization/locales/sr-Latn.json +74 -26
  125. package/shared/localization/locales/sr.json +74 -26
  126. package/shared/localization/locales/sv.json +74 -26
  127. package/shared/localization/locales/ta.json +74 -26
  128. package/shared/localization/locales/te.json +74 -26
  129. package/shared/localization/locales/th.json +76 -28
  130. package/shared/localization/locales/tr.json +74 -26
  131. package/shared/localization/locales/uk.json +74 -26
  132. package/shared/localization/locales/vi.json +74 -26
  133. package/shared/localization/locales/zh-HK.json +75 -27
  134. package/shared/localization/locales/zh-TW.json +74 -26
  135. package/shared/localization/locales/zh.json +74 -26
  136. package/third-party/chromium-synchronization/inspector-issueAdded-types-test.js +3 -0
  137. package/types/artifacts.d.ts +5 -3
  138. package/types/audit.d.ts +2 -0
  139. package/types/lhr/audit-details.d.ts +13 -1
  140. package/types/lhr/audit-result.d.ts +2 -0
  141. package/core/gather/gatherers/root-causes.d.ts +0 -19
  142. package/core/gather/gatherers/root-causes.js +0 -144
@@ -201,8 +201,62 @@ export class PerformanceCategoryRenderer extends CategoryRenderer {
201
201
  filmstripEl && timelineEl.append(filmstripEl);
202
202
  }
203
203
 
204
- const allInsights = category.auditRefs
205
- .filter(audit => audit.group === 'diagnostics')
204
+ const legacyAuditsSection =
205
+ this.renderFilterableSection(category, groups, ['diagnostics'], metricAudits);
206
+ legacyAuditsSection?.classList.add('lh-perf-audits--swappable', 'lh-perf-audits--legacy');
207
+
208
+ const experimentalInsightsSection =
209
+ this.renderFilterableSection(category, groups, ['insights', 'diagnostics'], metricAudits);
210
+ experimentalInsightsSection?.classList.add(
211
+ 'lh-perf-audits--swappable', 'lh-perf-audits--experimental');
212
+
213
+ if (legacyAuditsSection) {
214
+ element.append(legacyAuditsSection);
215
+
216
+ // Many tests expect just one of these sections to be in the DOM at a given time.
217
+ // To prevent the hidden section from tripping up these tests, we will just remove the hidden
218
+ // section from the DOM and store it in memory.
219
+ if (experimentalInsightsSection) {
220
+ this.dom.registerSwappableSections(legacyAuditsSection, experimentalInsightsSection);
221
+ }
222
+ }
223
+
224
+ const isNavigationMode = !options || options?.gatherMode === 'navigation';
225
+ if (isNavigationMode && category.score !== null) {
226
+ const el = createGauge(this.dom);
227
+ updateGauge(this.dom, el, category);
228
+ this.dom.find('.lh-score__gauge', element).replaceWith(el);
229
+ }
230
+
231
+ return element;
232
+ }
233
+
234
+ /**
235
+ * @param {LH.ReportResult.Category} category
236
+ * @param {Object<string, LH.Result.ReportGroup>} groups
237
+ * @param {string[]} groupNames
238
+ * @param {LH.ReportResult.AuditRef[]} metricAudits
239
+ * @return {Element|null}
240
+ */
241
+ renderFilterableSection(category, groups, groupNames, metricAudits) {
242
+ if (groupNames.some(groupName => !groups[groupName])) return null;
243
+
244
+ const element = this.dom.createElement('div');
245
+
246
+ /** @type {Set<string>} */
247
+ const replacedAuditIds = new Set();
248
+
249
+ const allGroupAudits =
250
+ category.auditRefs.filter(audit => audit.group && groupNames.includes(audit.group));
251
+ for (const auditRef of allGroupAudits) {
252
+ auditRef.result.replacesAudits?.forEach(replacedAuditId => {
253
+ replacedAuditIds.add(replacedAuditId);
254
+ });
255
+ }
256
+
257
+ // Diagnostics
258
+ const allFilterableAudits = allGroupAudits
259
+ .filter(audit => !replacedAuditIds.has(audit.id))
206
260
  .map(auditRef => {
207
261
  const {overallImpact, overallLinearImpact} = this.overallImpact(auditRef, metricAudits);
208
262
  const guidanceLevel = auditRef.result.guidanceLevel || 1;
@@ -211,21 +265,25 @@ export class PerformanceCategoryRenderer extends CategoryRenderer {
211
265
  return {auditRef, auditEl, overallImpact, overallLinearImpact, guidanceLevel};
212
266
  });
213
267
 
214
- // Diagnostics
215
- const diagnosticAudits = allInsights
268
+ const filterableAudits = allFilterableAudits
216
269
  .filter(audit => !ReportUtils.showAsPassed(audit.auditRef.result));
217
270
 
218
- const passedAudits = allInsights
271
+ const passedAudits = allFilterableAudits
219
272
  .filter(audit => ReportUtils.showAsPassed(audit.auditRef.result));
220
273
 
221
- const [groupEl, footerEl] = this.renderAuditGroup(groups['diagnostics']);
222
- groupEl.classList.add('lh-audit-group--diagnostics');
274
+ /** @type {Record<string, [Element, Element|null]|undefined>} */
275
+ const groupElsMap = {};
276
+ for (const groupName of groupNames) {
277
+ const groupEls = this.renderAuditGroup(groups[groupName]);
278
+ groupEls[0].classList.add(`lh-audit-group--${groupName}`);
279
+ groupElsMap[groupName] = groupEls;
280
+ }
223
281
 
224
282
  /**
225
283
  * @param {string} acronym
226
284
  */
227
285
  function refreshFilteredAudits(acronym) {
228
- for (const audit of allInsights) {
286
+ for (const audit of allFilterableAudits) {
229
287
  if (acronym === 'All') {
230
288
  audit.auditEl.hidden = false;
231
289
  } else {
@@ -234,7 +292,7 @@ export class PerformanceCategoryRenderer extends CategoryRenderer {
234
292
  }
235
293
  }
236
294
 
237
- diagnosticAudits.sort((a, b) => {
295
+ filterableAudits.sort((a, b) => {
238
296
  // Performance diagnostics should only have score display modes of "informative" and "metricSavings"
239
297
  // If the score display mode is "metricSavings", the `score` will be a coarse approximation of the overall impact.
240
298
  // Therefore, it makes sense to sort audits by score first to ensure visual clarity with the score icons.
@@ -266,14 +324,20 @@ export class PerformanceCategoryRenderer extends CategoryRenderer {
266
324
  return b.guidanceLevel - a.guidanceLevel;
267
325
  });
268
326
 
269
- for (const audit of diagnosticAudits) {
327
+ for (const audit of filterableAudits) {
328
+ if (!audit.auditRef.group) continue;
329
+
330
+ const groupEls = groupElsMap[audit.auditRef.group];
331
+ if (!groupEls) continue;
332
+
333
+ const [groupEl, footerEl] = groupEls;
270
334
  groupEl.insertBefore(audit.auditEl, footerEl);
271
335
  }
272
336
  }
273
337
 
274
338
  /** @type {Set<string>} */
275
339
  const filterableMetricAcronyms = new Set();
276
- for (const audit of diagnosticAudits) {
340
+ for (const audit of filterableAudits) {
277
341
  const metricSavings = audit.auditRef.result.metricSavings || {};
278
342
  for (const [key, value] of Object.entries(metricSavings)) {
279
343
  if (typeof value === 'number') filterableMetricAcronyms.add(key);
@@ -290,8 +354,12 @@ export class PerformanceCategoryRenderer extends CategoryRenderer {
290
354
 
291
355
  refreshFilteredAudits('All');
292
356
 
293
- if (diagnosticAudits.length) {
294
- element.append(groupEl);
357
+ for (const groupName of groupNames) {
358
+ if (filterableAudits.some(auditRef => auditRef.auditRef.group === groupName)) {
359
+ const groupEls = groupElsMap[groupName];
360
+ if (!groupEls) continue;
361
+ element.append(groupEls[0]);
362
+ }
295
363
  }
296
364
 
297
365
  if (!passedAudits.length) return element;
@@ -303,13 +371,6 @@ export class PerformanceCategoryRenderer extends CategoryRenderer {
303
371
  const passedElem = this.renderClump('passed', clumpOpts);
304
372
  element.append(passedElem);
305
373
 
306
- const isNavigationMode = !options || options?.gatherMode === 'navigation';
307
- if (isNavigationMode && category.score !== null) {
308
- const el = createGauge(this.dom);
309
- updateGauge(this.dom, el, category);
310
- this.dom.find('.lh-score__gauge', element).replaceWith(el);
311
- }
312
-
313
374
  return element;
314
375
  }
315
376
 
@@ -108,6 +108,7 @@ export namespace UIStrings {
108
108
  let dropdownViewer: string;
109
109
  let dropdownSaveGist: string;
110
110
  let dropdownDarkTheme: string;
111
+ let dropdownInsightsToggle: string;
111
112
  let dropdownViewUnthrottledTrace: string;
112
113
  let runtimeSettingsDevice: string;
113
114
  let runtimeSettingsNetworkThrottling: string;
@@ -418,6 +418,8 @@ const UIStrings = {
418
418
  dropdownSaveGist: 'Save as Gist',
419
419
  /** Option in a dropdown menu that toggles the themeing of the report between Light(default) and Dark themes. */
420
420
  dropdownDarkTheme: 'Toggle Dark Theme',
421
+ /** Option in a dropdown menu that toggles the type of performance insights displayed. */
422
+ dropdownInsightsToggle: 'Toggle experimental insights',
421
423
  /** Option in a dropdown menu that opens the trace of the page without throttling. "Unthrottled" can be replaced with "Original". */
422
424
  dropdownViewUnthrottledTrace: 'View Unthrottled Trace',
423
425
 
@@ -114,6 +114,13 @@ export class TopbarFeatures {
114
114
  toggleDarkTheme(this._dom);
115
115
  break;
116
116
  }
117
+ case 'toggle-insights': {
118
+ const swappableSection = this._dom.maybeFind('.lh-perf-audits--swappable');
119
+ if (swappableSection) {
120
+ this._dom.swapSectionIfPossible(swappableSection);
121
+ }
122
+ break;
123
+ }
117
124
  case 'view-unthrottled-trace': {
118
125
  this._reportUIFeatures._opts.onViewTrace?.();
119
126
  }
@@ -977,6 +977,36 @@
977
977
  "core/audits/font-display.js | undeclaredFontOriginWarning": {
978
978
  "message": "{fontCountForOrigin,plural, =1{‏‮Lighthouse‬‏ ‏‮was‬‏ ‏‮unable‬‏ ‏‮to‬‏ ‏‮automatically‬‏ ‏‮check‬‏ ‏‮the‬‏ `font-display` ‏‮value‬‏ ‏‮for‬‏ ‏‮the‬‏ ‏‮origin‬‏ {fontOrigin}.}zero{‏‮Lighthouse‬‏ ‏‮was‬‏ ‏‮unable‬‏ ‏‮to‬‏ ‏‮automatically‬‏ ‏‮check‬‏ ‏‮the‬‏ `font-display` ‏‮values‬‏ ‏‮for‬‏ ‏‮the‬‏ ‏‮origin‬‏ {fontOrigin}.}two{‏‮Lighthouse‬‏ ‏‮was‬‏ ‏‮unable‬‏ ‏‮to‬‏ ‏‮automatically‬‏ ‏‮check‬‏ ‏‮the‬‏ `font-display` ‏‮values‬‏ ‏‮for‬‏ ‏‮the‬‏ ‏‮origin‬‏ {fontOrigin}.}few{‏‮Lighthouse‬‏ ‏‮was‬‏ ‏‮unable‬‏ ‏‮to‬‏ ‏‮automatically‬‏ ‏‮check‬‏ ‏‮the‬‏ `font-display` ‏‮values‬‏ ‏‮for‬‏ ‏‮the‬‏ ‏‮origin‬‏ {fontOrigin}.}many{‏‮Lighthouse‬‏ ‏‮was‬‏ ‏‮unable‬‏ ‏‮to‬‏ ‏‮automatically‬‏ ‏‮check‬‏ ‏‮the‬‏ `font-display` ‏‮values‬‏ ‏‮for‬‏ ‏‮the‬‏ ‏‮origin‬‏ {fontOrigin}.}other{‏‮Lighthouse‬‏ ‏‮was‬‏ ‏‮unable‬‏ ‏‮to‬‏ ‏‮automatically‬‏ ‏‮check‬‏ ‏‮the‬‏ `font-display` ‏‮values‬‏ ‏‮for‬‏ ‏‮the‬‏ ‏‮origin‬‏ {fontOrigin}.}}"
979
979
  },
980
+ "core/audits/has-hsts.js | columnDirective": {
981
+ "message": "‏‮Directive‬‏"
982
+ },
983
+ "core/audits/has-hsts.js | columnSeverity": {
984
+ "message": "‏‮Severity‬‏"
985
+ },
986
+ "core/audits/has-hsts.js | description": {
987
+ "message": "‏‮Deployment‬‏ ‏‮of‬‏ ‏‮the‬‏ ‏‮HSTS‬‏ ‏‮header‬‏ ‏‮significantly‬‏ ‏‮reduces‬‏ ‏‮the‬‏ ‏‮risk‬‏ ‏‮of‬‏ ‏‮downgrading‬‏ ‏‮HTTP‬‏ ‏‮connections‬‏ ‏‮and‬‏ ‏‮eavesdropping‬‏ ‏‮attacks‬‏. ‏‮A‬‏ ‏‮rollout‬‏ ‏‮in‬‏ ‏‮stages‬‏, ‏‮starting‬‏ ‏‮with‬‏ ‏‮a‬‏ ‏‮low‬‏ ‏‮max‬‏-‏‮age‬‏ ‏‮is‬‏ ‏‮recommended‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮using‬‏ ‏‮a‬‏ ‏‮strong‬‏ ‏‮HSTS‬‏ ‏‮policy‬‏.](https://developer.chrome.com/docs/lighthouse/best-practices/has-hsts)"
988
+ },
989
+ "core/audits/has-hsts.js | invalidSyntax": {
990
+ "message": "‏‮Invalid‬‏ ‏‮syntax‬‏"
991
+ },
992
+ "core/audits/has-hsts.js | lowMaxAge": {
993
+ "message": "`max-age` ‏‮is‬‏ ‏‮too‬‏ ‏‮low‬‏"
994
+ },
995
+ "core/audits/has-hsts.js | noHsts": {
996
+ "message": "‏‮No‬‏ ‏‮HSTS‬‏ ‏‮header‬‏ ‏‮found‬‏"
997
+ },
998
+ "core/audits/has-hsts.js | noMaxAge": {
999
+ "message": "‏‮No‬‏ `max-age` ‏‮directive‬‏"
1000
+ },
1001
+ "core/audits/has-hsts.js | noPreload": {
1002
+ "message": "‏‮No‬‏ `preload` ‏‮directive‬‏ ‏‮found‬‏"
1003
+ },
1004
+ "core/audits/has-hsts.js | noSubdomain": {
1005
+ "message": "‏‮No‬‏ `includeSubDomains` ‏‮directive‬‏ ‏‮found‬‏"
1006
+ },
1007
+ "core/audits/has-hsts.js | title": {
1008
+ "message": "‏‮Use‬‏ ‏‮a‬‏ ‏‮strong‬‏ ‏‮HSTS‬‏ ‏‮policy‬‏"
1009
+ },
980
1010
  "core/audits/image-aspect-ratio.js | columnActual": {
981
1011
  "message": "‏‮Aspect‬‏ ‏‮Ratio‬‏ (‏‮Actual‬‏)"
982
1012
  },
@@ -1082,9 +1112,6 @@
1082
1112
  "core/audits/layout-shifts.js | rootCauseInjectedIframe": {
1083
1113
  "message": "‏‮Injected‬‏ ‏‮iframe‬‏"
1084
1114
  },
1085
- "core/audits/layout-shifts.js | rootCauseRenderBlockingRequest": {
1086
- "message": "‏‮A‬‏ ‏‮late‬‏ ‏‮network‬‏ ‏‮request‬‏ ‏‮adjusted‬‏ ‏‮the‬‏ ‏‮page‬‏ ‏‮layout‬‏"
1087
- },
1088
1115
  "core/audits/layout-shifts.js | rootCauseUnsizedMedia": {
1089
1116
  "message": "‏‮Media‬‏ ‏‮element‬‏ ‏‮lacking‬‏ ‏‮an‬‏ ‏‮explicit‬‏ ‏‮size‬‏"
1090
1117
  },
@@ -1187,6 +1214,24 @@
1187
1214
  "core/audits/non-composited-animations.js | unsupportedTimingParameters": {
1188
1215
  "message": "‏‮Effect‬‏ ‏‮has‬‏ ‏‮unsupported‬‏ ‏‮timing‬‏ ‏‮parameters‬‏"
1189
1216
  },
1217
+ "core/audits/origin-isolation.js | columnDirective": {
1218
+ "message": "‏‮Directive‬‏"
1219
+ },
1220
+ "core/audits/origin-isolation.js | columnSeverity": {
1221
+ "message": "‏‮Severity‬‏"
1222
+ },
1223
+ "core/audits/origin-isolation.js | description": {
1224
+ "message": "‏‮The‬‏ ‏‮Cross‬‏-‏‮Origin‬‏-‏‮Opener‬‏-‏‮Policy‬‏ (‏‮COOP‬‏) ‏‮can‬‏ ‏‮be‬‏ ‏‮used‬‏ ‏‮to‬‏ ‏‮isolate‬‏ ‏‮the‬‏ ‏‮top‬‏-‏‮level‬‏ ‏‮window‬‏ ‏‮from‬‏ ‏‮other‬‏ ‏‮documents‬‏ ‏‮such‬‏ ‏‮as‬‏ ‏‮pop‬‏-‏‮ups‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮deploying‬‏ ‏‮the‬‏ ‏‮COOP‬‏ ‏‮header‬‏.](https://web.dev/articles/why-coop-coep#coop)"
1225
+ },
1226
+ "core/audits/origin-isolation.js | invalidSyntax": {
1227
+ "message": "‏‮Invalid‬‏ ‏‮syntax‬‏"
1228
+ },
1229
+ "core/audits/origin-isolation.js | noCoop": {
1230
+ "message": "‏‮No‬‏ ‏‮COOP‬‏ ‏‮header‬‏ ‏‮found‬‏"
1231
+ },
1232
+ "core/audits/origin-isolation.js | title": {
1233
+ "message": "‏‮Ensure‬‏ ‏‮proper‬‏ ‏‮origin‬‏ ‏‮isolation‬‏ ‏‮with‬‏ ‏‮COOP‬‏"
1234
+ },
1190
1235
  "core/audits/preload-fonts.js | description": {
1191
1236
  "message": "‏‮Preload‬‏ `optional` ‏‮fonts‬‏ ‏‮so‬‏ ‏‮first‬‏-‏‮time‬‏ ‏‮visitors‬‏ ‏‮may‬‏ ‏‮use‬‏ ‏‮them‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮preloading‬‏ ‏‮fonts‬‏](https://web.dev/articles/preload-optional-fonts)"
1192
1237
  },
@@ -1688,9 +1733,6 @@
1688
1733
  "core/lib/bf-cache-strings.js | appBanner": {
1689
1734
  "message": "‏‮Pages‬‏ ‏‮that‬‏ ‏‮requested‬‏ ‏‮an‬‏ ‏‮AppBanner‬‏ ‏‮are‬‏ ‏‮not‬‏ ‏‮currently‬‏ ‏‮eligible‬‏ ‏‮for‬‏ ‏‮back‬‏/‏‮forward‬‏ ‏‮cache‬‏."
1690
1735
  },
1691
- "core/lib/bf-cache-strings.js | authorizationHeader": {
1692
- "message": "‏‮Back‬‏/‏‮forward‬‏ ‏‮cache‬‏ ‏‮is‬‏ ‏‮disabled‬‏ ‏‮due‬‏ ‏‮to‬‏ ‏‮a‬‏ ‏‮keepalive‬‏ ‏‮request‬‏."
1693
- },
1694
1736
  "core/lib/bf-cache-strings.js | backForwardCacheDisabled": {
1695
1737
  "message": "‏‮Back‬‏/‏‮forward‬‏ ‏‮cache‬‏ ‏‮is‬‏ ‏‮disabled‬‏ ‏‮by‬‏ ‏‮flags‬‏. ‏‮Visit‬‏ ‏‮chrome‬‏://‏‮flags‬‏/#‏‮back‬‏-‏‮forward‬‏-‏‮cache‬‏ ‏‮to‬‏ ‏‮enable‬‏ ‏‮it‬‏ ‏‮locally‬‏ ‏‮on‬‏ ‏‮this‬‏ ‏‮device‬‏."
1696
1738
  },
@@ -1907,9 +1949,6 @@
1907
1949
  "core/lib/bf-cache-strings.js | pictureInPicture": {
1908
1950
  "message": "‏‮Pages‬‏ ‏‮that‬‏ ‏‮use‬‏ ‏‮Picture‬‏-‏‮in‬‏-‏‮Picture‬‏ ‏‮are‬‏ ‏‮not‬‏ ‏‮currently‬‏ ‏‮eligible‬‏ ‏‮for‬‏ ‏‮back‬‏/‏‮forward‬‏ ‏‮cache‬‏."
1909
1951
  },
1910
- "core/lib/bf-cache-strings.js | portal": {
1911
- "message": "‏‮Pages‬‏ ‏‮that‬‏ ‏‮use‬‏ ‏‮portals‬‏ ‏‮are‬‏ ‏‮not‬‏ ‏‮currently‬‏ ‏‮eligible‬‏ ‏‮for‬‏ ‏‮back‬‏/‏‮forward‬‏ ‏‮cache‬‏."
1912
- },
1913
1952
  "core/lib/bf-cache-strings.js | printing": {
1914
1953
  "message": "‏‮Pages‬‏ ‏‮that‬‏ ‏‮show‬‏ ‏‮Printing‬‏ ‏‮UI‬‏ ‏‮are‬‏ ‏‮not‬‏ ‏‮currently‬‏ ‏‮eligible‬‏ ‏‮for‬‏ ‏‮back‬‏/‏‮forward‬‏ ‏‮cache‬‏."
1915
1954
  },
@@ -2129,12 +2168,6 @@
2129
2168
  "core/lib/deprecations-strings.js | DataUrlInSvgUse": {
2130
2169
  "message": "‏‮Support‬‏ ‏‮for‬‏ ‏‮data‬‏: ‏‮URLs‬‏ ‏‮in‬‏ ‏‮SVG‬‏ <use> ‏‮element‬‏ ‏‮is‬‏ ‏‮deprecated‬‏ ‏‮and‬‏ ‏‮it‬‏ ‏‮will‬‏ ‏‮be‬‏ ‏‮removed‬‏ ‏‮in‬‏ ‏‮the‬‏ ‏‮future‬‏."
2131
2170
  },
2132
- "core/lib/deprecations-strings.js | DocumentDomainSettingWithoutOriginAgentClusterHeader": {
2133
- "message": "‏‮Relaxing‬‏ ‏‮the‬‏ ‏‮same‬‏-‏‮origin‬‏ ‏‮policy‬‏ ‏‮by‬‏ ‏‮setting‬‏ `document.domain` ‏‮is‬‏ ‏‮deprecated‬‏, ‏‮and‬‏ ‏‮will‬‏ ‏‮be‬‏ ‏‮disabled‬‏ ‏‮by‬‏ ‏‮default‬‏. ‏‮To‬‏ ‏‮continue‬‏ ‏‮using‬‏ ‏‮this‬‏ ‏‮feature‬‏, ‏‮please‬‏ ‏‮opt‬‏-‏‮out‬‏ ‏‮of‬‏ ‏‮origin‬‏-‏‮keyed‬‏ ‏‮agent‬‏ ‏‮clusters‬‏ ‏‮by‬‏ ‏‮sending‬‏ ‏‮an‬‏ `Origin-Agent-Cluster: ?0` ‏‮header‬‏ ‏‮along‬‏ ‏‮with‬‏ ‏‮the‬‏ ‏‮HTTP‬‏ ‏‮response‬‏ ‏‮for‬‏ ‏‮the‬‏ ‏‮document‬‏ ‏‮and‬‏ ‏‮frames‬‏. ‏‮See‬‏ ‏‮https‬‏://‏‮developer‬‏.‏‮chrome‬‏.‏‮com‬‏/‏‮blog‬‏/‏‮immutable‬‏-‏‮document‬‏-‏‮domain‬‏/ ‏‮for‬‏ ‏‮more‬‏ ‏‮details‬‏."
2134
- },
2135
- "core/lib/deprecations-strings.js | ExpectCTHeader": {
2136
- "message": "‏‮The‬‏ `Expect-CT` ‏‮header‬‏ ‏‮is‬‏ ‏‮deprecated‬‏ ‏‮and‬‏ ‏‮will‬‏ ‏‮be‬‏ ‏‮removed‬‏. ‏‮Chrome‬‏ ‏‮requires‬‏ ‏‮Certificate‬‏ ‏‮Transparency‬‏ ‏‮for‬‏ ‏‮all‬‏ ‏‮publicly‬‏ ‏‮trusted‬‏ ‏‮certificates‬‏ ‏‮issued‬‏ ‏‮after‬‏ ‏‮April‬‏ 30, 2018."
2137
- },
2138
2171
  "core/lib/deprecations-strings.js | GeolocationInsecureOrigin": {
2139
2172
  "message": "`getCurrentPosition()` ‏‮and‬‏ `watchPosition()` ‏‮no‬‏ ‏‮longer‬‏ ‏‮work‬‏ ‏‮on‬‏ ‏‮insecure‬‏ ‏‮origins‬‏. ‏‮To‬‏ ‏‮use‬‏ ‏‮this‬‏ ‏‮feature‬‏, ‏‮you‬‏ ‏‮should‬‏ ‏‮consider‬‏ ‏‮switching‬‏ ‏‮your‬‏ ‏‮application‬‏ ‏‮to‬‏ ‏‮a‬‏ ‏‮secure‬‏ ‏‮origin‬‏, ‏‮such‬‏ ‏‮as‬‏ ‏‮HTTPS‬‏. ‏‮See‬‏ ‏‮https‬‏://‏‮goo‬‏.‏‮gle‬‏/‏‮chrome‬‏-‏‮insecure‬‏-‏‮origins‬‏ ‏‮for‬‏ ‏‮more‬‏ ‏‮details‬‏."
2140
2173
  },
@@ -2168,9 +2201,6 @@
2168
2201
  "core/lib/deprecations-strings.js | NoSysexWebMIDIWithoutPermission": {
2169
2202
  "message": "‏‮Web‬‏ ‏‮MIDI‬‏ ‏‮will‬‏ ‏‮ask‬‏ ‏‮a‬‏ ‏‮permission‬‏ ‏‮to‬‏ ‏‮use‬‏ ‏‮even‬‏ ‏‮if‬‏ ‏‮the‬‏ ‏‮sysex‬‏ ‏‮is‬‏ ‏‮not‬‏ ‏‮specified‬‏ ‏‮in‬‏ ‏‮the‬‏ `MIDIOptions`."
2170
2203
  },
2171
- "core/lib/deprecations-strings.js | NonStandardDeclarativeShadowDOM": {
2172
- "message": "‏‮The‬‏ ‏‮older‬‏, ‏‮non‬‏-‏‮standardized‬‏ `shadowroot` ‏‮attribute‬‏ ‏‮is‬‏ ‏‮deprecated‬‏, ‏‮and‬‏ ‏‮will‬‏ *‏‮no‬‏ ‏‮longer‬‏ ‏‮function‬‏* ‏‮in‬‏ ‏‮M‬‏119. ‏‮Please‬‏ ‏‮use‬‏ ‏‮the‬‏ ‏‮new‬‏, ‏‮standardized‬‏ `shadowrootmode` ‏‮attribute‬‏ ‏‮instead‬‏."
2173
- },
2174
2204
  "core/lib/deprecations-strings.js | NotificationInsecureOrigin": {
2175
2205
  "message": "‏‮The‬‏ ‏‮Notification‬‏ ‏‮API‬‏ ‏‮may‬‏ ‏‮no‬‏ ‏‮longer‬‏ ‏‮be‬‏ ‏‮used‬‏ ‏‮from‬‏ ‏‮insecure‬‏ ‏‮origins‬‏. ‏‮You‬‏ ‏‮should‬‏ ‏‮consider‬‏ ‏‮switching‬‏ ‏‮your‬‏ ‏‮application‬‏ ‏‮to‬‏ ‏‮a‬‏ ‏‮secure‬‏ ‏‮origin‬‏, ‏‮such‬‏ ‏‮as‬‏ ‏‮HTTPS‬‏. ‏‮See‬‏ ‏‮https‬‏://‏‮goo‬‏.‏‮gle‬‏/‏‮chrome‬‏-‏‮insecure‬‏-‏‮origins‬‏ ‏‮for‬‏ ‏‮more‬‏ ‏‮details‬‏."
2176
2206
  },
@@ -2255,12 +2285,6 @@
2255
2285
  "core/lib/deprecations-strings.js | WebSQL": {
2256
2286
  "message": "‏‮Web‬‏ ‏‮SQL‬‏ ‏‮is‬‏ ‏‮deprecated‬‏. ‏‮Please‬‏ ‏‮use‬‏ ‏‮SQLite‬‏ ‏‮WebAssembly‬‏ ‏‮or‬‏ ‏‮Indexed‬‏ ‏‮Database‬‏"
2257
2287
  },
2258
- "core/lib/deprecations-strings.js | WindowPlacementPermissionDescriptorUsed": {
2259
- "message": "‏‮The‬‏ ‏‮permission‬‏ ‏‮descriptor‬‏ `window-placement` ‏‮is‬‏ ‏‮deprecated‬‏. ‏‮Use‬‏ `window-management` ‏‮instead‬‏. ‏‮For‬‏ ‏‮more‬‏ ‏‮help‬‏, ‏‮check‬‏ ‏‮https‬‏://‏‮bit‬‏.‏‮ly‬‏/‏‮window‬‏-‏‮placement‬‏-‏‮rename‬‏."
2260
- },
2261
- "core/lib/deprecations-strings.js | WindowPlacementPermissionPolicyParsed": {
2262
- "message": "‏‮The‬‏ ‏‮permission‬‏ ‏‮policy‬‏ `window-placement` ‏‮is‬‏ ‏‮deprecated‬‏. ‏‮Use‬‏ `window-management` ‏‮instead‬‏. ‏‮For‬‏ ‏‮more‬‏ ‏‮help‬‏, ‏‮check‬‏ ‏‮https‬‏://‏‮bit‬‏.‏‮ly‬‏/‏‮window‬‏-‏‮placement‬‏-‏‮rename‬‏."
2263
- },
2264
2288
  "core/lib/deprecations-strings.js | XHRJSONEncodingDetection": {
2265
2289
  "message": "‏‮UTF‬‏-16 ‏‮is‬‏ ‏‮not‬‏ ‏‮supported‬‏ ‏‮by‬‏ ‏‮response‬‏ ‏‮json‬‏ ‏‮in‬‏ `XMLHttpRequest`"
2266
2290
  },
@@ -2627,6 +2651,12 @@
2627
2651
  "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | title": {
2628
2652
  "message": "أسباب تغييرات التصميم"
2629
2653
  },
2654
+ "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | description": {
2655
+ "message": "سيؤدي حجم عناصر DOM الكبير إلى زيادة استخدام الذاكرة وإطالة مدة عمليات احتساب الأنماط وإنتاج عمليات مُكلِفة لإعادة تدفق التنسيقات والتي تؤثر في استجابة الصفحة. [التعرّف على كيفية تجنُّب زيادة حجم عناصر DOM](https://developer.chrome.com/docs/lighthouse/performance/dom-size/)"
2656
+ },
2657
+ "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | title": {
2658
+ "message": "تحسين حجم عناصر DOM"
2659
+ },
2630
2660
  "node_modules/@paulirish/trace_engine/models/trace/insights/DocumentLatency.js | description": {
2631
2661
  "message": "طلب الشبكة الأول هو الأهم. يمكنك تقليل وقت الاستجابة للطلب عن طريق تجنُّب عمليات إعادة التوجيه وضمان استجابة الخادم بسرعة وتفعيل ميزة ضغط النص."
2632
2662
  },
@@ -2639,6 +2669,24 @@
2639
2669
  "node_modules/@paulirish/trace_engine/models/trace/insights/FontDisplay.js | title": {
2640
2670
  "message": "عرض الخط"
2641
2671
  },
2672
+ "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | description": {
2673
+ "message": "يمكن أن يؤدي تقليل وقت تنزيل الصور إلى تحسين مدّة التحميل المُدرَكة للصفحة، بالإضافة إلى تحسين سرعة عرض أكبر محتوى مرئي. [مزيد من المعلومات حول تحسين حجم الصورة](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/)"
2674
+ },
2675
+ "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | title": {
2676
+ "message": "تحسين عرض الصور"
2677
+ },
2678
+ "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | useCompression": {
2679
+ "message": "يمكن أن يؤدي زيادة عامل ضغط الصورة إلى تحسين حجم تنزيلها. (الحجم المقدّر: {PH1})"
2680
+ },
2681
+ "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | useModernFormat": {
2682
+ "message": "يمكن تحسين حجم تنزيل هذه الصورة باستخدام تنسيق صور حديث (مثل WebP أو AVIF) أو زيادة ضغط الصورة. (الحجم المقدّر: {PH1})"
2683
+ },
2684
+ "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | useResponsiveSize": {
2685
+ "message": "حجم ملف الصورة هذا أكبر من الحجم المطلوب ({PH2}) لأبعادها المعروضة ({PH3}). يُرجى استخدام الصور المتجاوبة مع مختلف الأجهزة لتقليل حجم تنزيل الصورة. (الحجم المقدّر: {PH1})"
2686
+ },
2687
+ "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | useVideoFormat": {
2688
+ "message": "إنّ استخدام تنسيقات الفيديو بدلاً من ملفات GIF يمكن أن يؤدي إلى تحسين حجم تنزيل المحتوى المتحرك. (الحجم المقدّر: {PH1})"
2689
+ },
2642
2690
  "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | description": {
2643
2691
  "message": "ابدأ بالتحقيق في المرحلة الأطول. [يمكن تقليل التأخيرات](https://web.dev/articles/optimize-inp#optimize_interactions). ولتقليل مدة المعالجة، [حسِّن تكاليف سلسلة التعليمات الرئيسية](https://web.dev/articles/optimize-long-tasks)، والتي تكون في الغالب بيانات JavaScript."
2644
2692
  },
@@ -2676,10 +2724,10 @@
2676
2724
  "message": "الجهات الخارجية"
2677
2725
  },
2678
2726
  "node_modules/@paulirish/trace_engine/models/trace/insights/Viewport.js | description": {
2679
- "message": "إنّ إطار عرض الصفحة غير محسّن للأجهزة الجوّالة، لذا قد يتم [تأخير التفاعلات التي تتم من خلال النقر بمقدار 300 ملي ثانية على الأكثر](https://developer.chrome.com/blog/300ms-tap-delay-gone-away/)."
2727
+ "message": "قد يتم [تأخير الاستجابة لتفاعلات النقر بمقدار 300 ملي ثانية كحد أقصى](https://developer.chrome.com/blog/300ms-tap-delay-gone-away/) إذا لم يتم تحسين إطار العرض للأجهزة الجوّالة."
2680
2728
  },
2681
2729
  "node_modules/@paulirish/trace_engine/models/trace/insights/Viewport.js | title": {
2682
- "message": "إطار العرض غير محسَّن للأجهزة الجوّالة"
2730
+ "message": "تحسين إطار العرض للأجهزة الجوّالة"
2683
2731
  },
2684
2732
  "node_modules/lighthouse-stack-packs/packs/amp.js | efficient-animated-content": {
2685
2733
  "message": "‏‮For‬‏ ‏‮animated‬‏ ‏‮content‬‏, ‏‮use‬‏ [`amp-anim`](https://amp.dev/documentation/components/amp-anim/) ‏‮to‬‏ ‏‮minimize‬‏ ‏‮CPU‬‏ ‏‮usage‬‏ ‏‮when‬‏ ‏‮the‬‏ ‏‮content‬‏ ‏‮is‬‏ ‏‮offscreen‬‏."
@@ -771,7 +771,7 @@
771
771
  "message": "تجنَّب سلاسل الطلبات المهمة"
772
772
  },
773
773
  "core/audits/csp-xss.js | columnDirective": {
774
- "message": "أمر توجيهي"
774
+ "message": "التوجيه"
775
775
  },
776
776
  "core/audits/csp-xss.js | columnSeverity": {
777
777
  "message": "درجة الخطورة"
@@ -977,6 +977,36 @@
977
977
  "core/audits/font-display.js | undeclaredFontOriginWarning": {
978
978
  "message": "{fontCountForOrigin,plural, =1{لم تتمكّن أداة Lighthouse من التحقّق تلقائيًا من قيمة `font-display` في الأصل التالي: {fontOrigin}.}zero{لم تتمكّن أداة Lighthouse من التحقّق تلقائيًا من قيم `font-display` في الأصول التالية: {fontOrigin}.}two{لم تتمكّن أداة Lighthouse من التحقّق تلقائيًا من قيم `font-display` في الأصلَين التاليَين: {fontOrigin}.}few{لم تتمكّن أداة Lighthouse من التحقّق تلقائيًا من قيم `font-display` في الأصول التالية: {fontOrigin}.}many{لم تتمكّن أداة Lighthouse من التحقّق تلقائيًا من قيم `font-display` في الأصول التالية: {fontOrigin}.}other{لم تتمكّن أداة Lighthouse من التحقّق تلقائيًا من قيم `font-display` في الأصول التالية: {fontOrigin}.}}"
979
979
  },
980
+ "core/audits/has-hsts.js | columnDirective": {
981
+ "message": "التوجيه"
982
+ },
983
+ "core/audits/has-hsts.js | columnSeverity": {
984
+ "message": "درجة الخطورة"
985
+ },
986
+ "core/audits/has-hsts.js | description": {
987
+ "message": "يساهم تفعيل عنوان HSTS في تقليل خطر خفض مستوى اتصالات HTTP بشكل كبير مع منع محاولات التجسس على البيانات. يُنصح بتنفيذ الميزة على مراحل، بدءًا من قيمة منخفضة لتوجيه max-age. [مزيد من المعلومات عن استخدام سياسة HSTS قوية](https://developer.chrome.com/docs/lighthouse/best-practices/has-hsts)"
988
+ },
989
+ "core/audits/has-hsts.js | invalidSyntax": {
990
+ "message": "بنية غير صالحة"
991
+ },
992
+ "core/audits/has-hsts.js | lowMaxAge": {
993
+ "message": "قيمة توجيه `max-age` منخفضة جدًا"
994
+ },
995
+ "core/audits/has-hsts.js | noHsts": {
996
+ "message": "لم يتم العثور على عنوان HSTS"
997
+ },
998
+ "core/audits/has-hsts.js | noMaxAge": {
999
+ "message": "لم يتم العثور على توجيه `max-age`"
1000
+ },
1001
+ "core/audits/has-hsts.js | noPreload": {
1002
+ "message": "لم يتم العثور على توجيه `preload`"
1003
+ },
1004
+ "core/audits/has-hsts.js | noSubdomain": {
1005
+ "message": "لم يتم العثور على توجيه `includeSubDomains`"
1006
+ },
1007
+ "core/audits/has-hsts.js | title": {
1008
+ "message": "استخدام سياسة HSTS قوية"
1009
+ },
980
1010
  "core/audits/image-aspect-ratio.js | columnActual": {
981
1011
  "message": "نسبة العرض إلى الارتفاع (الفعلية)"
982
1012
  },
@@ -1082,9 +1112,6 @@
1082
1112
  "core/audits/layout-shifts.js | rootCauseInjectedIframe": {
1083
1113
  "message": "إطار iframe الذي تم إدخاله"
1084
1114
  },
1085
- "core/audits/layout-shifts.js | rootCauseRenderBlockingRequest": {
1086
- "message": "أدَّى طلب الشبكة المتأخّر إلى تعديل تصميم الصفحة."
1087
- },
1088
1115
  "core/audits/layout-shifts.js | rootCauseUnsizedMedia": {
1089
1116
  "message": "لم يتم تحديد حجم واضح لعنصر الوسائط."
1090
1117
  },
@@ -1187,6 +1214,24 @@
1187
1214
  "core/audits/non-composited-animations.js | unsupportedTimingParameters": {
1188
1215
  "message": "يحتوي \"التأثير\" على مَعلَمات توقيت غير متوافقة"
1189
1216
  },
1217
+ "core/audits/origin-isolation.js | columnDirective": {
1218
+ "message": "التوجيه"
1219
+ },
1220
+ "core/audits/origin-isolation.js | columnSeverity": {
1221
+ "message": "درجة الخطورة"
1222
+ },
1223
+ "core/audits/origin-isolation.js | description": {
1224
+ "message": "يمكن استخدام سياسة Cross-Origin-Opener-Policy (COOP) لعزل النافذة ذات المستوى الأعلى عن المستندات الأخرى، مثل النوافذ المنبثقة. [مزيد من المعلومات حول تفعيل عنوان COOP](https://web.dev/articles/why-coop-coep#coop)"
1225
+ },
1226
+ "core/audits/origin-isolation.js | invalidSyntax": {
1227
+ "message": "بنية غير صالحة"
1228
+ },
1229
+ "core/audits/origin-isolation.js | noCoop": {
1230
+ "message": "لم يتم العثور على عنوان COOP"
1231
+ },
1232
+ "core/audits/origin-isolation.js | title": {
1233
+ "message": "ضمان عزل النطاق بشكلٍ صحيح باستخدام سياسة COOP"
1234
+ },
1190
1235
  "core/audits/preload-fonts.js | description": {
1191
1236
  "message": "يجب تحميل الخطوط `optional` بشكل مسبق حتى يتسنى للزوار الجدد استخدامها. [مزيد من المعلومات عن التحميل المسبَق للخطوط](https://web.dev/articles/preload-optional-fonts)"
1192
1237
  },
@@ -1688,9 +1733,6 @@
1688
1733
  "core/lib/bf-cache-strings.js | appBanner": {
1689
1734
  "message": "لا يمكن استخدام ميزة \"التخزين المؤقت للصفحات\" حاليًا لتخزين الصفحات التي طلبت AppBanner."
1690
1735
  },
1691
- "core/lib/bf-cache-strings.js | authorizationHeader": {
1692
- "message": "تم إيقاف ميزة \"التخزين المؤقت للصفحات\" بسبب طلب التحقّق من الاتصال."
1693
- },
1694
1736
  "core/lib/bf-cache-strings.js | backForwardCacheDisabled": {
1695
1737
  "message": "تم إيقاف ميزة \"التخزين المؤقت للصفحات\" في chrome://flags. يمكنك الانتقال إلى الرابط chrome://flags/#back-forward-cache لتفعيلها على هذا الجهاز."
1696
1738
  },
@@ -1907,9 +1949,6 @@
1907
1949
  "core/lib/bf-cache-strings.js | pictureInPicture": {
1908
1950
  "message": "لا يمكن استخدام ميزة \"التخزين المؤقت للصفحات\" حاليًا لتخزين الصفحات التي تستخدم ميزة \"نافذة ضمن النافذة\"."
1909
1951
  },
1910
- "core/lib/bf-cache-strings.js | portal": {
1911
- "message": "لا يمكن استخدام ميزة \"التخزين المؤقت للصفحات\" حاليًا لتخزين الصفحات التي تستخدم بوابات الويب."
1912
- },
1913
1952
  "core/lib/bf-cache-strings.js | printing": {
1914
1953
  "message": "لا يمكن استخدام ميزة \"التخزين المؤقت للصفحات\" حاليًا لتخزين الصفحات التي تعرض \"واجهة المستخدم الخاصة بالطباعة\"."
1915
1954
  },
@@ -2129,12 +2168,6 @@
2129
2168
  "core/lib/deprecations-strings.js | DataUrlInSvgUse": {
2130
2169
  "message": "تم إيقاف المخطّطات data: URL نهائيًا في عنصر <use> للرسومات الموجّهة التي يمكن تغيير حجمها (SVG) وستتم إزالتها في المستقبل."
2131
2170
  },
2132
- "core/lib/deprecations-strings.js | DocumentDomainSettingWithoutOriginAgentClusterHeader": {
2133
- "message": "إنّ ميزة تخفيف قيود السياسة المشتركة المصدر من خلال ضبط `document.domain` تم إيقافها نهائيًا، وستصبح غير مفعَّلة تلقائيًا. لمواصلة استخدام هذه الميزة، يُرجى إيقاف مجموعات الوكلاء المرتبطة حسب المصدر من خلال إرسال العنوان `Origin-Agent-Cluster: ?0` مع استجابة HTTP للمستند والإطارات. لمعرفة مزيد من التفاصيل، يمكنك الاطّلاع على https://developer.chrome.com/blog/immutable-document-domain/‎."
2134
- },
2135
- "core/lib/deprecations-strings.js | ExpectCTHeader": {
2136
- "message": "تم إيقاف عنوان `Expect-CT` نهائيًا وستتم إزالته. يتطلَّب Chrome توفُّر شهادة الشفافية لجميع الشهادات الموثوق بها التي تم إصدارها بشكل علني بعد 30 نيسان (أبريل) 2018."
2137
- },
2138
2171
  "core/lib/deprecations-strings.js | GeolocationInsecureOrigin": {
2139
2172
  "message": "لم تعُد الميزتان `getCurrentPosition()` و`watchPosition()` متوافقتين مع المصادر غير الآمنة. لاستخدام هذه الميزة، يجب مراعاة نقل تطبيقك إلى مصدر آمن مثل HTTPS. لمعرفة مزيد من التفاصيل، يُرجى الاطّلاع على https://goo.gle/chrome-insecure-origins."
2140
2173
  },
@@ -2168,9 +2201,6 @@
2168
2201
  "core/lib/deprecations-strings.js | NoSysexWebMIDIWithoutPermission": {
2169
2202
  "message": "ستطلب واجهة برمجة التطبيقات Web MIDI إذنًا للاستخدام حتى في حال عدم تحديد رسائل النظام الحصرية (Sysex) في `MIDIOptions`."
2170
2203
  },
2171
- "core/lib/deprecations-strings.js | NonStandardDeclarativeShadowDOM": {
2172
- "message": "إنّ سمة `shadowroot` القديمة غير الموحّدة تم إيقافها نهائيًا، و*لن تعمل* بعد الآن في الإصدار M119. يُرجى استخدام سمة `shadowrootmode` الجديدة الموحّدة بدلاً منها."
2173
- },
2174
2204
  "core/lib/deprecations-strings.js | NotificationInsecureOrigin": {
2175
2205
  "message": "قد يتوقف استخدام واجهة برمجة التطبيقات Notification API من مصادر غير آمنة. يجب مراعاة نقل تطبيقك إلى مصدر آمن، مثل HTTPS. لمعرفة مزيد من التفاصيل، يُرجى الاطّلاع على https://goo.gle/chrome-insecure-origins."
2176
2206
  },
@@ -2255,12 +2285,6 @@
2255
2285
  "core/lib/deprecations-strings.js | WebSQL": {
2256
2286
  "message": "تم إيقاف لغة الاستعلامات البنيوية (SQL) على الويب نهائيًا. يُرجى استخدام SQLite WebAssembly أو Indexed Database."
2257
2287
  },
2258
- "core/lib/deprecations-strings.js | WindowPlacementPermissionDescriptorUsed": {
2259
- "message": "تم إيقاف واصف الأذونات `window-placement` نهائيًا. يمكنك استخدام `window-management` كبديل. للحصول على مزيد من المساعدة، يُرجى الاطّلاع على الرابط https://bit.ly/window-placement-rename."
2260
- },
2261
- "core/lib/deprecations-strings.js | WindowPlacementPermissionPolicyParsed": {
2262
- "message": "تم إيقاف سياسة الأذونات `window-placement` نهائيًا. يمكنك استخدام `window-management` كبديل. للحصول على مزيد من المساعدة، يُرجى الاطّلاع على الرابط https://bit.ly/window-placement-rename."
2263
- },
2264
2288
  "core/lib/deprecations-strings.js | XHRJSONEncodingDetection": {
2265
2289
  "message": "لا يتوفّر الترميز UTF-16 من خلال استجابة تنسيق json في واجهة برمجة التطبيقات `XMLHttpRequest`."
2266
2290
  },
@@ -2627,6 +2651,12 @@
2627
2651
  "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | title": {
2628
2652
  "message": "أسباب تغييرات التصميم"
2629
2653
  },
2654
+ "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | description": {
2655
+ "message": "سيؤدي حجم عناصر DOM الكبير إلى زيادة استخدام الذاكرة وإطالة مدة عمليات احتساب الأنماط وإنتاج عمليات مُكلِفة لإعادة تدفق التنسيقات والتي تؤثر في استجابة الصفحة. [التعرّف على كيفية تجنُّب زيادة حجم عناصر DOM](https://developer.chrome.com/docs/lighthouse/performance/dom-size/)"
2656
+ },
2657
+ "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | title": {
2658
+ "message": "تحسين حجم عناصر DOM"
2659
+ },
2630
2660
  "node_modules/@paulirish/trace_engine/models/trace/insights/DocumentLatency.js | description": {
2631
2661
  "message": "طلب الشبكة الأول هو الأهم. يمكنك تقليل وقت الاستجابة للطلب عن طريق تجنُّب عمليات إعادة التوجيه وضمان استجابة الخادم بسرعة وتفعيل ميزة ضغط النص."
2632
2662
  },
@@ -2639,6 +2669,24 @@
2639
2669
  "node_modules/@paulirish/trace_engine/models/trace/insights/FontDisplay.js | title": {
2640
2670
  "message": "عرض الخط"
2641
2671
  },
2672
+ "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | description": {
2673
+ "message": "يمكن أن يؤدي تقليل وقت تنزيل الصور إلى تحسين مدّة التحميل المُدرَكة للصفحة، بالإضافة إلى تحسين سرعة عرض أكبر محتوى مرئي. [مزيد من المعلومات حول تحسين حجم الصورة](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/)"
2674
+ },
2675
+ "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | title": {
2676
+ "message": "تحسين عرض الصور"
2677
+ },
2678
+ "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | useCompression": {
2679
+ "message": "يمكن أن يؤدي زيادة عامل ضغط الصورة إلى تحسين حجم تنزيلها. (الحجم المقدّر: {PH1})"
2680
+ },
2681
+ "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | useModernFormat": {
2682
+ "message": "يمكن تحسين حجم تنزيل هذه الصورة باستخدام تنسيق صور حديث (مثل WebP أو AVIF) أو زيادة ضغط الصورة. (الحجم المقدّر: {PH1})"
2683
+ },
2684
+ "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | useResponsiveSize": {
2685
+ "message": "حجم ملف الصورة هذا أكبر من الحجم المطلوب ({PH2}) لأبعادها المعروضة ({PH3}). يُرجى استخدام الصور المتجاوبة مع مختلف الأجهزة لتقليل حجم تنزيل الصورة. (الحجم المقدّر: {PH1})"
2686
+ },
2687
+ "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | useVideoFormat": {
2688
+ "message": "إنّ استخدام تنسيقات الفيديو بدلاً من ملفات GIF يمكن أن يؤدي إلى تحسين حجم تنزيل المحتوى المتحرك. (الحجم المقدّر: {PH1})"
2689
+ },
2642
2690
  "node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js | description": {
2643
2691
  "message": "ابدأ بالتحقيق في المرحلة الأطول. [يمكن تقليل التأخيرات](https://web.dev/articles/optimize-inp#optimize_interactions). ولتقليل مدة المعالجة، [حسِّن تكاليف سلسلة التعليمات الرئيسية](https://web.dev/articles/optimize-long-tasks)، والتي تكون في الغالب بيانات JavaScript."
2644
2692
  },
@@ -2676,10 +2724,10 @@
2676
2724
  "message": "الجهات الخارجية"
2677
2725
  },
2678
2726
  "node_modules/@paulirish/trace_engine/models/trace/insights/Viewport.js | description": {
2679
- "message": "إنّ إطار عرض الصفحة غير محسّن للأجهزة الجوّالة، لذا قد يتم [تأخير التفاعلات التي تتم من خلال النقر بمقدار 300 ملي ثانية على الأكثر](https://developer.chrome.com/blog/300ms-tap-delay-gone-away/)."
2727
+ "message": "قد يتم [تأخير الاستجابة لتفاعلات النقر بمقدار 300 ملي ثانية كحد أقصى](https://developer.chrome.com/blog/300ms-tap-delay-gone-away/) إذا لم يتم تحسين إطار العرض للأجهزة الجوّالة."
2680
2728
  },
2681
2729
  "node_modules/@paulirish/trace_engine/models/trace/insights/Viewport.js | title": {
2682
- "message": "إطار العرض غير محسَّن للأجهزة الجوّالة"
2730
+ "message": "تحسين إطار العرض للأجهزة الجوّالة"
2683
2731
  },
2684
2732
  "node_modules/lighthouse-stack-packs/packs/amp.js | efficient-animated-content": {
2685
2733
  "message": "بالنسبة إلى المحتوى الذي يتضمن صورًا متحركة، يمكنك استخدام [`amp-anim`](https://amp.dev/documentation/components/amp-anim/) لتقليل استخدام وحدة المعالجة المركزية (CPU) عندما يكون المحتوى خارج الشاشة."
@@ -3120,7 +3168,7 @@
3120
3168
  "message": "يمكنك استخدام [مكون WordPress الإضافي لتحسين الصورة](https://wordpress.org/plugins/search/optimize+images/) الذي يضغط صورك مع المحافظة على الجودة."
3121
3169
  },
3122
3170
  "node_modules/lighthouse-stack-packs/packs/wordpress.js | uses-responsive-images": {
3123
- "message": "يمكنك تحميل الصور مباشرةً من خلال [مكتبة الوسائط](https://wordpress.org/support/article/media-library-screen/) للتأكّد من توفّر أحجام الصور المطلوبة، ثم إدراجها من مكتبة الوسائط أو استخدام أداة الصورة لضمان استخدام أفضل حجم للصورة (بما في ذلك تلك الخاصة بنقاط فاصلة متجاوبة). يمكنك تجنب استخدام صور `Full Size` إلا إذا كانت الأبعاد كافية لاستخدامها. [مزيد من المعلومات](https://wordpress.org/support/article/inserting-images-into-posts-and-pages/)"
3171
+ "message": "يمكنك تحميل الصور مباشرةً من خلال [مكتبة الوسائط](https://wordpress.org/support/article/media-library-screen/) للتأكّد من توفّر أحجام الصور المطلوبة، ثم إدراجها من مكتبة الوسائط أو استخدام تطبيق الصورة المصغَّر لضمان استخدام أفضل حجم للصورة (بما في ذلك تلك الخاصة بنقاط فاصلة متجاوبة). يمكنك تجنب استخدام صور `Full Size` إلا إذا كانت الأبعاد كافية لاستخدامها. [مزيد من المعلومات](https://wordpress.org/support/article/inserting-images-into-posts-and-pages/)"
3124
3172
  },
3125
3173
  "node_modules/lighthouse-stack-packs/packs/wordpress.js | uses-text-compression": {
3126
3174
  "message": "يمكنك تفعيل ضغط النص في إعداد خادم الويب."