lighthouse 8.0.0-dev.20210709 → 8.0.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.
- package/docs/architecture.md +101 -0
- package/docs/authenticated-pages.md +44 -0
- package/docs/bug-labels.md +35 -0
- package/docs/configuration.md +213 -0
- package/docs/emulation.md +32 -0
- package/docs/error-reporting.md +42 -0
- package/docs/hacking-tips.md +55 -0
- package/docs/headless-chrome.md +119 -0
- package/docs/lantern.md +55 -0
- package/docs/new-audits.md +99 -0
- package/docs/performance-budgets.md +187 -0
- package/docs/plugins.md +374 -0
- package/docs/puppeteer.md +95 -0
- package/docs/readme.md +164 -0
- package/docs/recipes/auth/README.md +129 -0
- package/docs/recipes/auth/example-lh-auth.js +81 -0
- package/docs/recipes/auth/package.json +11 -0
- package/docs/recipes/auth/server/public/dashboard-unauthenticated.html +21 -0
- package/docs/recipes/auth/server/public/dashboard.html +25 -0
- package/docs/recipes/auth/server/public/home-unauthenticated.html +27 -0
- package/docs/recipes/auth/server/public/home.html +17 -0
- package/docs/recipes/auth/server/public/unauthenticated.html +22 -0
- package/docs/recipes/auth/server/server.js +85 -0
- package/docs/recipes/custom-audit/custom-config.js +36 -0
- package/docs/recipes/custom-audit/package.json +8 -0
- package/docs/recipes/custom-audit/readme.md +32 -0
- package/docs/recipes/custom-audit/searchable-audit.js +46 -0
- package/docs/recipes/custom-audit/searchable-gatherer.js +32 -0
- package/docs/recipes/custom-gatherer-puppeteer/custom-audit.js +34 -0
- package/{root.js → docs/recipes/custom-gatherer-puppeteer/custom-config.js} +23 -2
- package/docs/recipes/custom-gatherer-puppeteer/custom-gatherer.js +51 -0
- package/docs/recipes/custom-gatherer-puppeteer/package.json +13 -0
- package/docs/recipes/custom-gatherer-puppeteer/readme.md +7 -0
- package/docs/recipes/custom-gatherer-puppeteer/test.sh +9 -0
- package/docs/recipes/gulp/gulpfile.js +79 -0
- package/docs/recipes/gulp/package.json +12 -0
- package/docs/recipes/gulp/public/index.html +22 -0
- package/docs/recipes/gulp/readme.md +6 -0
- package/docs/recipes/integration-test/README.md +14 -0
- package/docs/recipes/integration-test/example-lh-auth.test.js +160 -0
- package/docs/recipes/integration-test/package.json +9 -0
- package/docs/recipes/lighthouse-plugin-example/audits/preload-as.js +46 -0
- package/docs/recipes/lighthouse-plugin-example/package.json +11 -0
- package/docs/recipes/lighthouse-plugin-example/plugin-recipe-screenshot.png +0 -0
- package/docs/recipes/lighthouse-plugin-example/plugin.js +24 -0
- package/docs/recipes/lighthouse-plugin-example/readme.md +53 -0
- package/docs/releasing.md +164 -0
- package/docs/scoring.md +79 -0
- package/docs/throttling.md +150 -0
- package/docs/understanding-results.md +209 -0
- package/docs/v8-perf-faq.md +244 -0
- package/docs/variability.md +150 -0
- package/jest.config.js +0 -3
- package/lighthouse-cli/bin.js +8 -6
- package/lighthouse-core/audits/accessibility/aria-command-name.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-meter-name.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-progressbar-name.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-tooltip-name.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-treeitem-name.js +1 -1
- package/lighthouse-core/audits/apple-touch-icon.js +0 -1
- package/lighthouse-core/audits/audit.js +3 -3
- package/lighthouse-core/audits/autocomplete.js +2 -2
- package/lighthouse-core/audits/byte-efficiency/byte-efficiency-audit.js +14 -29
- package/lighthouse-core/audits/byte-efficiency/duplicated-javascript.js +2 -3
- package/lighthouse-core/audits/byte-efficiency/efficient-animated-content.js +1 -1
- package/lighthouse-core/audits/byte-efficiency/legacy-javascript.js +2 -3
- package/lighthouse-core/audits/byte-efficiency/modern-image-formats.js +15 -55
- package/lighthouse-core/audits/byte-efficiency/offscreen-images.js +4 -8
- package/lighthouse-core/audits/byte-efficiency/render-blocking-resources.js +8 -15
- package/lighthouse-core/audits/byte-efficiency/total-byte-weight.js +9 -10
- package/lighthouse-core/audits/byte-efficiency/unminified-css.js +1 -1
- package/lighthouse-core/audits/byte-efficiency/unminified-javascript.js +1 -1
- package/lighthouse-core/audits/byte-efficiency/unused-css-rules.js +1 -1
- package/lighthouse-core/audits/byte-efficiency/unused-javascript.js +1 -2
- package/lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js +2 -2
- package/lighthouse-core/audits/byte-efficiency/uses-optimized-images.js +1 -2
- package/lighthouse-core/audits/byte-efficiency/uses-responsive-images.js +24 -46
- package/lighthouse-core/audits/byte-efficiency/uses-text-compression.js +1 -1
- package/lighthouse-core/audits/critical-request-chains.js +0 -1
- package/lighthouse-core/audits/csp-xss.js +1 -1
- package/lighthouse-core/audits/diagnostics.js +0 -1
- package/lighthouse-core/audits/dobetterweb/geolocation-on-start.js +0 -1
- package/lighthouse-core/audits/dobetterweb/inspector-issues.js +1 -1
- package/lighthouse-core/audits/dobetterweb/notification-on-start.js +0 -1
- package/lighthouse-core/audits/dobetterweb/uses-http2.js +0 -1
- package/lighthouse-core/audits/final-screenshot.js +4 -8
- package/lighthouse-core/audits/font-display.js +0 -1
- package/lighthouse-core/audits/installable-manifest.js +3 -4
- package/lighthouse-core/audits/largest-contentful-paint-element.js +0 -1
- package/lighthouse-core/audits/long-tasks.js +1 -1
- package/lighthouse-core/audits/maskable-icon.js +0 -1
- package/lighthouse-core/audits/metrics/first-contentful-paint-3g.js +2 -4
- package/lighthouse-core/audits/metrics/first-contentful-paint.js +2 -4
- package/lighthouse-core/audits/metrics/first-meaningful-paint.js +2 -4
- package/lighthouse-core/audits/metrics/interactive.js +2 -4
- package/lighthouse-core/audits/metrics/largest-contentful-paint.js +2 -4
- package/lighthouse-core/audits/metrics/max-potential-fid.js +2 -4
- package/lighthouse-core/audits/metrics/speed-index.js +2 -4
- package/lighthouse-core/audits/metrics/total-blocking-time.js +2 -10
- package/lighthouse-core/audits/metrics.js +2 -4
- package/lighthouse-core/audits/performance-budget.js +0 -1
- package/lighthouse-core/audits/predictive-perf.js +6 -9
- package/lighthouse-core/audits/preload-fonts.js +1 -11
- package/lighthouse-core/audits/preload-lcp-image.js +5 -18
- package/lighthouse-core/audits/redirects.js +8 -10
- package/lighthouse-core/audits/screenshot-thumbnails.js +13 -28
- package/lighthouse-core/audits/seo/canonical.js +1 -2
- package/lighthouse-core/audits/seo/font-size.js +4 -4
- package/lighthouse-core/audits/seo/hreflang.js +2 -3
- package/lighthouse-core/audits/seo/http-status-code.js +16 -21
- package/lighthouse-core/audits/seo/is-crawlable.js +3 -4
- package/lighthouse-core/audits/seo/robots-txt.js +2 -2
- package/lighthouse-core/audits/seo/tap-targets.js +5 -5
- package/lighthouse-core/audits/server-response-time.js +2 -20
- package/lighthouse-core/audits/splash-screen.js +0 -1
- package/lighthouse-core/audits/themed-omnibox.js +0 -1
- package/lighthouse-core/audits/third-party-facades.js +0 -1
- package/lighthouse-core/audits/third-party-summary.js +3 -1
- package/lighthouse-core/audits/timing-budget.js +2 -4
- package/lighthouse-core/audits/uses-rel-preconnect.js +9 -14
- package/lighthouse-core/audits/uses-rel-preload.js +2 -13
- package/lighthouse-core/computed/main-thread-tasks.js +2 -2
- package/lighthouse-core/computed/metrics/cumulative-layout-shift.js +3 -3
- package/lighthouse-core/computed/metrics/first-contentful-paint-all-frames.js +6 -6
- package/lighthouse-core/computed/metrics/first-contentful-paint.js +8 -9
- package/lighthouse-core/computed/metrics/first-meaningful-paint.js +9 -10
- package/lighthouse-core/computed/metrics/interactive.js +24 -25
- package/lighthouse-core/computed/metrics/lantern-first-contentful-paint.js +6 -6
- package/lighthouse-core/computed/metrics/lantern-first-meaningful-paint.js +6 -6
- package/lighthouse-core/computed/metrics/lantern-largest-contentful-paint.js +6 -6
- package/lighthouse-core/computed/metrics/lantern-metric.js +8 -16
- package/lighthouse-core/computed/metrics/largest-contentful-paint-all-frames.js +7 -7
- package/lighthouse-core/computed/metrics/largest-contentful-paint.js +9 -10
- package/lighthouse-core/computed/metrics/max-potential-fid.js +11 -8
- package/lighthouse-core/computed/metrics/metric.js +5 -32
- package/lighthouse-core/computed/metrics/speed-index.js +5 -6
- package/lighthouse-core/computed/metrics/timing-summary.js +45 -55
- package/lighthouse-core/computed/metrics/total-blocking-time.js +29 -36
- package/lighthouse-core/computed/page-dependency-graph.js +14 -14
- package/lighthouse-core/computed/resource-summary.js +7 -3
- package/lighthouse-core/computed/speedline.js +3 -3
- package/lighthouse-core/computed/trace-of-tab.js +86 -15
- package/lighthouse-core/computed/user-timings.js +5 -5
- package/lighthouse-core/config/default-config.js +0 -1
- package/lighthouse-core/fraggle-rock/config/config.js +7 -9
- package/lighthouse-core/fraggle-rock/config/default-config.js +2 -40
- package/lighthouse-core/fraggle-rock/config/filters.js +6 -39
- package/lighthouse-core/fraggle-rock/config/validation.js +4 -4
- package/lighthouse-core/fraggle-rock/gather/base-artifacts.js +19 -54
- package/lighthouse-core/fraggle-rock/gather/navigation-runner.js +10 -21
- package/lighthouse-core/fraggle-rock/gather/runner-helpers.js +2 -2
- package/lighthouse-core/fraggle-rock/gather/snapshot-runner.js +2 -2
- package/lighthouse-core/fraggle-rock/gather/timespan-runner.js +2 -2
- package/lighthouse-core/gather/driver/prepare.js +0 -3
- package/lighthouse-core/gather/fetcher.js +2 -0
- package/lighthouse-core/gather/gather-runner.js +14 -2
- package/lighthouse-core/gather/gatherers/image-elements.js +61 -24
- package/lighthouse-core/gather/gatherers/inspector-issues.js +2 -2
- package/lighthouse-core/gather/gatherers/script-elements.js +12 -45
- package/lighthouse-core/gather/gatherers/seo/font-size.js +5 -5
- package/lighthouse-core/gather/gatherers/seo/tap-targets.js +12 -64
- package/lighthouse-core/gather/gatherers/service-worker.js +3 -20
- package/lighthouse-core/gather/gatherers/trace-compat.js +1 -1
- package/lighthouse-core/gather/gatherers/trace-elements.js +3 -15
- package/lighthouse-core/gather/gatherers/trace.js +4 -13
- package/lighthouse-core/gather/gatherers/viewport-dimensions.js +1 -1
- package/lighthouse-core/lib/dependency-graph/simulator/network-analyzer.js +2 -13
- package/lighthouse-core/lib/emulation.js +2 -0
- package/lighthouse-core/lib/i18n/i18n.js +2 -2
- package/lighthouse-core/lib/i18n/locales/ar-XB.json +141 -141
- package/lighthouse-core/lib/i18n/locales/ar.json +143 -143
- package/lighthouse-core/lib/i18n/locales/bg.json +143 -143
- package/lighthouse-core/lib/i18n/locales/ca.json +141 -141
- package/lighthouse-core/lib/i18n/locales/cs.json +141 -141
- package/lighthouse-core/lib/i18n/locales/da.json +141 -141
- package/lighthouse-core/lib/i18n/locales/de.json +142 -142
- package/lighthouse-core/lib/i18n/locales/el.json +141 -141
- package/lighthouse-core/lib/i18n/locales/en-GB.json +141 -141
- package/lighthouse-core/lib/i18n/locales/en-US.ctc.json +6659 -0
- package/lighthouse-core/lib/i18n/locales/en-US.json +144 -150
- package/lighthouse-core/lib/i18n/locales/en-XA.json +141 -141
- package/lighthouse-core/lib/i18n/locales/en-XL.ctc.json +6628 -0
- package/lighthouse-core/lib/i18n/locales/en-XL.json +144 -150
- package/lighthouse-core/lib/i18n/locales/es-419.json +141 -141
- package/lighthouse-core/lib/i18n/locales/es.json +141 -141
- package/lighthouse-core/lib/i18n/locales/fi.json +143 -143
- package/lighthouse-core/lib/i18n/locales/fil.json +142 -142
- package/lighthouse-core/lib/i18n/locales/fr.json +141 -141
- package/lighthouse-core/lib/i18n/locales/he.json +142 -142
- package/lighthouse-core/lib/i18n/locales/hi.json +143 -143
- package/lighthouse-core/lib/i18n/locales/hr.json +141 -141
- package/lighthouse-core/lib/i18n/locales/hu.json +143 -143
- package/lighthouse-core/lib/i18n/locales/id.json +143 -143
- package/lighthouse-core/lib/i18n/locales/it.json +143 -143
- package/lighthouse-core/lib/i18n/locales/ja.json +143 -143
- package/lighthouse-core/lib/i18n/locales/ko.json +143 -143
- package/lighthouse-core/lib/i18n/locales/lt.json +143 -143
- package/lighthouse-core/lib/i18n/locales/lv.json +143 -143
- package/lighthouse-core/lib/i18n/locales/nl.json +141 -141
- package/lighthouse-core/lib/i18n/locales/no.json +141 -141
- package/lighthouse-core/lib/i18n/locales/pl.json +141 -141
- package/lighthouse-core/lib/i18n/locales/pt-PT.json +141 -141
- package/lighthouse-core/lib/i18n/locales/pt.json +141 -141
- package/lighthouse-core/lib/i18n/locales/ro.json +144 -144
- package/lighthouse-core/lib/i18n/locales/ru.json +143 -143
- package/lighthouse-core/lib/i18n/locales/sk.json +142 -142
- package/lighthouse-core/lib/i18n/locales/sl.json +141 -141
- package/lighthouse-core/lib/i18n/locales/sr-Latn.json +143 -143
- package/lighthouse-core/lib/i18n/locales/sr.json +143 -143
- package/lighthouse-core/lib/i18n/locales/sv.json +142 -142
- package/lighthouse-core/lib/i18n/locales/ta.json +141 -141
- package/lighthouse-core/lib/i18n/locales/te.json +143 -143
- package/lighthouse-core/lib/i18n/locales/th.json +143 -143
- package/lighthouse-core/lib/i18n/locales/tr.json +143 -143
- package/lighthouse-core/lib/i18n/locales/uk.json +141 -141
- package/lighthouse-core/lib/i18n/locales/vi.json +143 -143
- package/lighthouse-core/lib/i18n/locales/zh-HK.json +141 -141
- package/lighthouse-core/lib/i18n/locales/zh-TW.json +143 -143
- package/lighthouse-core/lib/i18n/locales/zh.json +143 -143
- package/lighthouse-core/lib/lh-error.js +2 -2
- package/lighthouse-core/lib/minify-trace.js +1 -1
- package/lighthouse-core/lib/network-request.js +1 -17
- package/lighthouse-core/lib/page-functions.js +5 -6
- package/lighthouse-core/lib/rect-helpers.js +3 -3
- package/lighthouse-core/lib/sd-validation/assets/jsonldcontext.json +7137 -0
- package/lighthouse-core/lib/sd-validation/assets/schema-tree.json +9900 -0
- package/{report/report-assets.js → lighthouse-core/lib/sd-validation/helpers/walk-object.js} +20 -12
- package/lighthouse-core/lib/sd-validation/json-expander.js +56 -0
- package/lighthouse-core/lib/sd-validation/json-linter.js +49 -0
- package/lighthouse-core/lib/sd-validation/jsonld-keyword-validator.js +50 -0
- package/lighthouse-core/lib/sd-validation/line-number-from-jsonld-path.js +60 -0
- package/lighthouse-core/lib/sd-validation/schema-validator.js +146 -0
- package/lighthouse-core/lib/sd-validation/scripts/download-jsonldcontext.js +30 -0
- package/lighthouse-core/lib/sd-validation/scripts/generate-schema-tree.js +97 -0
- package/lighthouse-core/lib/sd-validation/sd-validation.js +77 -0
- package/lighthouse-core/lib/tappable-rects.js +1 -1
- package/lighthouse-core/lib/tracehouse/trace-processor.js +42 -116
- package/lighthouse-core/lib/url-shim.js +2 -29
- package/lighthouse-core/report/html/html-report-assets.js +38 -0
- package/{report/README.md → lighthouse-core/report/html/readme.md} +11 -7
- package/{report → lighthouse-core/report/html}/renderer/category-renderer.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/crc-details-renderer.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/details-renderer.js +1 -1
- package/{report → lighthouse-core/report/html}/renderer/dom.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/element-screenshot-renderer.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/i18n.js +1 -1
- package/{report → lighthouse-core/report/html}/renderer/logger.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/performance-category-renderer.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/psi.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/pwa-category-renderer.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/report-renderer.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/report-ui-features.js +3 -3
- package/{report → lighthouse-core/report/html}/renderer/snippet-renderer.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/text-encoding.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/util.js +4 -7
- package/{report/assets/styles.css → lighthouse-core/report/html/report-styles.css} +0 -0
- package/{report/assets/standalone-template.html → lighthouse-core/report/html/report-template.html} +41 -1
- package/{report/assets → lighthouse-core/report/html}/templates.html +0 -0
- package/{report → lighthouse-core/report}/report-generator.js +1 -1
- package/lighthouse-core/runner.js +1 -1
- package/package.json +12 -13
- package/readme.md +2 -2
- package/third-party/chromium-synchronization/inspector-issueAdded-types-test.js +2 -3
- package/third-party/chromium-synchronization/installability-errors-test.js +2 -2
- package/third-party/download-content-shell/download-content-shell.js +1 -2
- package/third-party/snyk/snapshot.json +1 -1
- package/tsconfig.json +1 -0
- package/types/artifacts.d.ts +21 -41
- package/types/audit.d.ts +0 -2
- package/types/config.d.ts +2 -16
- package/types/externs.d.ts +0 -1
- package/types/gatherer.d.ts +13 -13
- package/types/html-renderer.d.ts +14 -14
- package/types/i18n.d.ts +1 -1
- package/lighthouse-core/audits/byte-efficiency/uses-responsive-images-snapshot.js +0 -94
- package/lighthouse-core/computed/image-records.js +0 -62
- package/lighthouse-core/computed/metrics/navigation-metric.js +0 -46
- package/lighthouse-core/computed/processed-navigation.js +0 -21
- package/lighthouse-core/computed/processed-trace.js +0 -21
- package/lighthouse-core/gather/gatherers/gather-context.js +0 -25
- package/lighthouse-core/gather/gatherers/host-form-factor.js +0 -31
- package/lighthouse-core/gather/gatherers/host-user-agent.js +0 -29
- package/lighthouse-core/lib/lh-trace-processor.js +0 -46
- package/report/clients/standalone.js +0 -52
- package/report/test/renderer/category-renderer-test.js +0 -488
- package/report/test/renderer/crc-details-renderer-test.js +0 -115
- package/report/test/renderer/details-renderer-test.js +0 -843
- package/report/test/renderer/dom-test.js +0 -157
- package/report/test/renderer/element-screenshot-renderer-test.js +0 -189
- package/report/test/renderer/i18n-test.js +0 -146
- package/report/test/renderer/performance-category-renderer-test.js +0 -332
- package/report/test/renderer/psi-test.js +0 -152
- package/report/test/renderer/pwa-category-renderer-test.js +0 -303
- package/report/test/renderer/report-renderer-test.js +0 -325
- package/report/test/renderer/report-ui-features-test.js +0 -572
- package/report/test/renderer/snippet-renderer-test.js +0 -291
- package/report/test/renderer/text-encoding-test.js +0 -41
- package/report/test/renderer/util-test.js +0 -388
- package/report/test/report-generator-test.js +0 -145
package/docs/lantern.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Lantern
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Project Lantern is an ongoing effort to reduce the run time of Lighthouse and improve audit quality by modeling page activity and simulating browser execution. This document details the accuracy of these models and captures the expected natural variability.
|
|
6
|
+
|
|
7
|
+
## Deep Dive
|
|
8
|
+
|
|
9
|
+
[](https://www.youtube.com/watch?v=0dkry1r49xw)
|
|
10
|
+
|
|
11
|
+
## Accuracy
|
|
12
|
+
|
|
13
|
+
All of the following accuracy stats are reported on a set of 300 URLs sampled from the Alexa top 1000, HTTPArchive dataset, and miscellaneous ad landing pages. Median was collected for *9 runs* in one environment and compared to the median of *9 runs* in a second environment.
|
|
14
|
+
|
|
15
|
+
Stats were collected using the [trace-evaluation](https://github.com/patrickhulce/lighthouse-trace-evaluations) scripts. Table cells contain [Spearman's rho](https://en.wikipedia.org/wiki/Spearman%27s_rank_correlation_coefficient) and [MAPE](https://en.wikipedia.org/wiki/Mean_absolute_percentage_error) for the respective metric.
|
|
16
|
+
|
|
17
|
+
### Lantern Accuracy Stats
|
|
18
|
+
| Comparison | FCP | FMP | TTI |
|
|
19
|
+
| -- | -- | -- | -- |
|
|
20
|
+
| Lantern predicting Default LH | .811 : 23.1% | .811 : 23.6% | .869 : 42.5% |
|
|
21
|
+
| Lantern predicting LH on WPT | .785 : 28.3% | .761 : 33.7% | .854 : 45.4% |
|
|
22
|
+
|
|
23
|
+
### Reference Stats
|
|
24
|
+
| Comparison | FCP | FMP | TTI |
|
|
25
|
+
| -- | -- | -- | -- |
|
|
26
|
+
| Unthrottled LH predicting Default LH | .738 : 27.1% | .694 : 33.8% | .743 : 62.0% |
|
|
27
|
+
| Unthrottled LH predicting WPT | .691 : 33.8% | .635 : 33.7% | .712 : 66.4% |
|
|
28
|
+
| Default LH predicting WPT | .855 : 22.3% | .813 : 27.0% | .889 : 32.3% |
|
|
29
|
+
|
|
30
|
+
## Conclusions
|
|
31
|
+
|
|
32
|
+
### Lantern Accuracy Conclusions
|
|
33
|
+
We conclude that Lantern is ~6-13% more inaccurate than DevTools throttling. When evaluating rank performance, Lantern achieves correlations within ~.04-.07 of DevTools throttling.
|
|
34
|
+
|
|
35
|
+
* For the single view use case, our original conclusion that Lantern's inaccuracy is roughly equal to the inaccuracy introduced by expected variance seems to hold. The standard deviation of single observations from DevTools throttling is ~9-13%, and given Lantern's much lower variance, single observations from Lantern are not significantly more inaccurate on average than single observations from DevTools throttling.
|
|
36
|
+
* For the repeat view use case, we can conclude that Lantern is systematically off by ~6-13% more than DevTools throttling.
|
|
37
|
+
|
|
38
|
+
### Metric Variability Conclusions
|
|
39
|
+
The reference stats demonstrate that there is high degree of variability with the user-centric metrics and strengthens the position that every load is just an observation of a point drawn from a distribution and to understand the entire experience, multiple draws must be taken, i.e. multiple runs are needed to have sufficiently small error bounds on the median load experience.
|
|
40
|
+
|
|
41
|
+
The current size of confidence intervals for DevTools throttled performance scores are as follows.
|
|
42
|
+
|
|
43
|
+
* 95% confidence interval for **1-run** of site at median: 50 **+/- 15** = 65-35
|
|
44
|
+
* 95% confidence interval for **3-runs** of site at median: 50 **+/- 11** = 61-39
|
|
45
|
+
* 95% confidence interval for **5-runs** of site at median: 50 **+/- 8** = 58-42
|
|
46
|
+
|
|
47
|
+
## Links
|
|
48
|
+
|
|
49
|
+
* [Lighthouse Variability and Accuracy Analysis](https://docs.google.com/document/d/1BqtL-nG53rxWOI5RO0pItSRPowZVnYJ_gBEQCJ5EeUE/edit?usp=sharing)
|
|
50
|
+
* [Lantern Deck](https://docs.google.com/presentation/d/1EsuNICCm6uhrR2PLNaI5hNkJ-q-8Mv592kwHmnf4c6U/edit?usp=sharing)
|
|
51
|
+
* [Lantern Design Doc](https://docs.google.com/a/chromium.org/document/d/1pHEjtQjeycMoFOtheLfFjqzggY8VvNaIRfjC7IgNLq0/edit?usp=sharing)
|
|
52
|
+
* [WPT Trace Data Set Half 1](https://drive.google.com/open?id=1Y_duiiJVljzIEaYWEmiTqKQFUBFWbKVZ) (access on request)
|
|
53
|
+
* [WPT Trace Data Set Half 2](https://drive.google.com/open?id=1EoHk8nQaBv9aoaVv81TvR7UfXTUu2fiu) (access on request)
|
|
54
|
+
* [Unthrottled Trace Data Set Half 1](https://drive.google.com/open?id=1axJf9R3FPpzxhR7FKOvXPLFLxxApfwD0) (access on request)
|
|
55
|
+
* [Unthrottled Trace Data Set Half 2](https://drive.google.com/open?id=1krcWq5DF0oB1hq90G29bEwIP7zDcJrYY) (access on request)
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
So, you want to create a new audit? Great! We're excited that you want to add to the Lighthouse project :) The goal of this
|
|
2
|
+
document is to help you understand what constitutes as a "good" audit for Lighthouse, and steps you can follow if you want
|
|
3
|
+
to propose a new audit.
|
|
4
|
+
|
|
5
|
+
## New audit principles
|
|
6
|
+
|
|
7
|
+
Lighthouse audits that surface in the report should:
|
|
8
|
+
- be applicable to a significant portion of web developers (based on scale and severity of impact)
|
|
9
|
+
- contribute significantly towards making the mobile web experience better for end users.
|
|
10
|
+
- not have a significant impact on our runtime performance or bundle size.
|
|
11
|
+
- be new, not something that is already measured by existing audits.
|
|
12
|
+
- be measurable (especially for performance audits) or have clear pass/fail states.
|
|
13
|
+
- be actionable - when failing, specific advice should be given. If the failure can be tied to a specific resource (a DOM element, script, line of code), use the appropriate detail type (see below). If multiple failures can occur for a page, return a table.
|
|
14
|
+
- not use 3rd party APIs for completing the audit check.
|
|
15
|
+
|
|
16
|
+
## Actionability
|
|
17
|
+
|
|
18
|
+
1. Specific advice should be given if the audit fails. If an audit can fail in multiple ways, each way should have specific guidance that the user should take to resolve the problem.
|
|
19
|
+
1. If the failure can be applied to a specific resource, use the appropriate detail type (see subsection).
|
|
20
|
+
1. If multiple failures can occur on a single page, show each (use a table - don't just return a binary score).
|
|
21
|
+
|
|
22
|
+
### Detail Types
|
|
23
|
+
|
|
24
|
+
An audit can return a number of different [detail types](https://github.com/GoogleChrome/lighthouse/blob/master/types/audit-details.d.ts).
|
|
25
|
+
|
|
26
|
+
| detail type | resource | notes |
|
|
27
|
+
|---------------------------|-----------------------|----------------------------------------|
|
|
28
|
+
| `'node'` | DOM element | set path to a devtoolsNodePath |
|
|
29
|
+
| `'source-location'` | Code Network Resource | use to point to specific line, column |
|
|
30
|
+
| `'code'` | N/A; freeform | render as monospace font `like this` |
|
|
31
|
+
| `'url'` | Network Resource | we will make it a pretty link |
|
|
32
|
+
| `'thumbnail'` | Image Resource | same as above, but we show a thumbnail |
|
|
33
|
+
| `'link'` | - | arbitrary link / url combination |
|
|
34
|
+
| `'text'\|'ms'\|'numeric'` | - | |
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
<!--- https://docs.google.com/document/d/1KS6PGPYDfE_TWrRdw55Rd67P-g_MU4KdMetT3cTPHjI/edit#heading=h.32w9jjm4c70w -->
|
|
38
|
+

|
|
39
|
+
|
|
40
|
+
## Naming
|
|
41
|
+
|
|
42
|
+
### Audit ID
|
|
43
|
+
|
|
44
|
+
The audit ID should be based on the noun of the subject matter that it surfaces to the user.
|
|
45
|
+
|
|
46
|
+
The filename should match the audit ID.
|
|
47
|
+
|
|
48
|
+
**Policy**
|
|
49
|
+
|
|
50
|
+
- No verbs.
|
|
51
|
+
- No `no-` prefixes.
|
|
52
|
+
- Use the noun of the items it surfaces or concept it centers around.
|
|
53
|
+
- Adjective modifiers are acceptable and encouraged if the noun would be too broad without specificty.
|
|
54
|
+
- If an adjective modifier will result in describing either the passing or failing state, prefer the failing state.
|
|
55
|
+
|
|
56
|
+
**Examples**
|
|
57
|
+
|
|
58
|
+
- ~~no-vulnerable-dependencies~~ vulnerable-dependencies (no `no-`)
|
|
59
|
+
- ~~redirects-http~~ http-redirect (no verbs)
|
|
60
|
+
- ~~uses-long-cache-ttl~~ cache-headers (no verbs)
|
|
61
|
+
- ~~is-crawlable~~ crawlability (no verbs)
|
|
62
|
+
- ~~images~~ oversized-images (too broad)
|
|
63
|
+
- ~~used-css~~ unused-css (prefer failing state adjective)
|
|
64
|
+
|
|
65
|
+
### Audit Title / Failure Title
|
|
66
|
+
|
|
67
|
+
Audit titles vary based on report context and audit type.
|
|
68
|
+
|
|
69
|
+
- Opportunities should have an *imperative* `title` describing the action the developer should take to fix the issue.
|
|
70
|
+
- Standard audits should have both a *descriptive* `title` and a `failureTitle` that describe what the page is currently doing that resulted in a passing/failing state.
|
|
71
|
+
|
|
72
|
+
Opportunity `title`: "Compress large images"
|
|
73
|
+
Standard Audit `title`: "Page works offline"
|
|
74
|
+
Standard Audit `failureTitle`: "Page does not work offline"
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
## Process for creating a new audit
|
|
78
|
+
|
|
79
|
+
1. Scan the criteria we’ve laid out above. If you think the principles match with your proposed new audit, then proceed!
|
|
80
|
+
1. Next step is to create an issue on GitHub with answers to the following questions:
|
|
81
|
+
```
|
|
82
|
+
#### Provide a basic description of the audit
|
|
83
|
+
#### How would the audit appear in the report?
|
|
84
|
+
<!-- How would the test look when passing? Would there be additional details available?
|
|
85
|
+
How would the test look when failing? What additional details are available?
|
|
86
|
+
If the details are tabular, what are the columns?
|
|
87
|
+
If not obvious, how would passing/failing be defined? -->
|
|
88
|
+
#### How is this audit different from existing ones?
|
|
89
|
+
#### What % of developers/pages will this impact?
|
|
90
|
+
<!-- (Estimates OK, data points preferred) -->
|
|
91
|
+
#### How is the new audit making a better web for end users?
|
|
92
|
+
<!-- (Data points preferred) -->
|
|
93
|
+
#### What is the resourcing situation?
|
|
94
|
+
<!-- Who will create the audits, write the documentation, and maintain both? -->
|
|
95
|
+
#### Any other links or documentation that we should check out?
|
|
96
|
+
```
|
|
97
|
+
3. Once the proposal is submitted, then Lighthouse team will take a look and followup. We will discuss possible implementation approaches, and associated runtime overhead.
|
|
98
|
+
With this new information we can better understand the impl cost and effort required and prioritize the audit into our sprint/roadmap.
|
|
99
|
+
1. Depending on the prioritization, we'll then work with you to figure out the necessary engineering/UX/product details.
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# Performance Budgets (budget.json)
|
|
2
|
+
|
|
3
|
+
Use a [performance budget](https://web.dev/performance-budgets-101/) to assert thresholds for performance metrics. `budget.json` supports three types of budgets:
|
|
4
|
+
- Timing budgets: Assert thresholds for time-based performance metrics like First Contentful Paint, Maximum First Input Delay, and Speed Index.
|
|
5
|
+
- Resource counts: Assert thresholds for the quantity of resources on a page. These thresholds can be defined per resource type or for the page overall.
|
|
6
|
+
- Resource sizes: Assert thresholds for the transfer size of resources on a page. These thresholds can be defined per resource type or for the page overall.
|
|
7
|
+
|
|
8
|
+
If performance budgets have been configured, the Lighthouse report will include a "Performance Budgets" section.
|
|
9
|
+
|
|
10
|
+
To make performance budgets a part of your CI process, refer to [Lighthouse CI](https://github.com/GoogleChrome/lighthouse-ci).
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
Performance budgets are supported in the CLI version of lighthouse. To use:
|
|
15
|
+
1. Create a `budget.json` file.
|
|
16
|
+
2. When running Lighthouse from the command line, pass the `--budget-path` flag followed by the path to budget file in order to calculate whenever a category is over budget.
|
|
17
|
+
```
|
|
18
|
+
lighthouse https://youtube.com --budget-path=budget.json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## budget.json
|
|
22
|
+
The `budget.json` file is an array containing one or more `Budget` objects.
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
[
|
|
26
|
+
{
|
|
27
|
+
"path": "/*",
|
|
28
|
+
"options": {
|
|
29
|
+
"firstPartyHostnames": ["*.my-site.com", "my-site.cdn.com"]
|
|
30
|
+
},
|
|
31
|
+
"timings": [
|
|
32
|
+
{
|
|
33
|
+
"metric": "interactive",
|
|
34
|
+
"budget": 5000
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"metric": "first-meaningful-paint",
|
|
38
|
+
"budget": 2000
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
"resourceSizes": [
|
|
42
|
+
{
|
|
43
|
+
"resourceType": "total",
|
|
44
|
+
"budget": 500
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"resourceType": "script",
|
|
48
|
+
"budget": 150
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"resourceCounts": [
|
|
52
|
+
{
|
|
53
|
+
"resourceType": "third-party",
|
|
54
|
+
"budget": 100
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"options": {
|
|
60
|
+
"firstPartyHostnames": ["*.my-site.com", "my-site.cdn.com"]
|
|
61
|
+
},
|
|
62
|
+
"path": "/checkout",
|
|
63
|
+
"resourceSizes": [
|
|
64
|
+
{
|
|
65
|
+
"resourceType": "script",
|
|
66
|
+
"budget": 200
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Further Explanation
|
|
74
|
+
|
|
75
|
+
### Timing Budgets
|
|
76
|
+
|
|
77
|
+
_Lighthouse 6 & up_
|
|
78
|
+
|
|
79
|
+
Use the optional `timings` property to define budgets for time-based performance metrics. In this context, budgets are defined in milliseconds.
|
|
80
|
+
|
|
81
|
+
```json
|
|
82
|
+
"timings": [
|
|
83
|
+
{
|
|
84
|
+
"metric": "interactive",
|
|
85
|
+
"budget": 5000
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Supported timing metrics:
|
|
91
|
+
|
|
92
|
+
- `first-contentful-paint`
|
|
93
|
+
- `interactive`
|
|
94
|
+
- `first-meaningful-paint`
|
|
95
|
+
- `max-potential-fid`
|
|
96
|
+
- `total-blocking-time`
|
|
97
|
+
- `speed-index`
|
|
98
|
+
- `largest-contentful-paint`
|
|
99
|
+
- `cumulative-layout-shift`
|
|
100
|
+
|
|
101
|
+
### Resource Budgets
|
|
102
|
+
|
|
103
|
+
Use the optional `resourceSizes` property to define budgets for the *size* of page resources. In this context, budgets are defined in kibibytes (1 KiB = 1024 bytes).
|
|
104
|
+
|
|
105
|
+
```json
|
|
106
|
+
"resourceSizes": [
|
|
107
|
+
{
|
|
108
|
+
"resourceType": "script",
|
|
109
|
+
"budget": 300
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Use the optional `resourceCounts` property to define budgets for the *quantity* of page resources. In this context, budgets are defined in # of requests.
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
"resourceCounts": [
|
|
118
|
+
{
|
|
119
|
+
"resourceType": "script",
|
|
120
|
+
"budget": 10
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Budgets can be set for the follow resource types.
|
|
126
|
+
|
|
127
|
+
* `document`
|
|
128
|
+
* `font`
|
|
129
|
+
* `image`
|
|
130
|
+
* `media`
|
|
131
|
+
* `other`
|
|
132
|
+
* `script`
|
|
133
|
+
* `stylesheet`
|
|
134
|
+
* `third-party`
|
|
135
|
+
* `total`
|
|
136
|
+
|
|
137
|
+
### Using the `path` property
|
|
138
|
+
|
|
139
|
+
_Lighthouse 5.3 & up_
|
|
140
|
+
|
|
141
|
+
The `path` property indciates the pages that a budget applies to. This string should follow the [robots.txt](https://developers.google.com/search/reference/robots_txt#examples-of-valid-robotstxt-urls) format.
|
|
142
|
+
|
|
143
|
+
If `path` is not supplied, a budget will apply to all pages.
|
|
144
|
+
|
|
145
|
+
If a page's URL path matches the `path` property of more than one budget in `budget.json`, then the last matching budget will be applied. As a result, global budgets (e.g. `"path": "/*"`) should be listed first in `budget.json`, followed by the budgets that override the global budget (e.g. `"path": "/blog"`).
|
|
146
|
+
|
|
147
|
+
Examples:
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
"path": "/"
|
|
151
|
+
```
|
|
152
|
+
Result: Matches all URL paths. This is equivalent to writing `"path": "/*"`
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
"path": "/articles"
|
|
156
|
+
```
|
|
157
|
+
Result: Matches all URL paths starting with `/articles`. For example, `/articles` and `/articles/jun_02_2019.html`
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
"path": "/store/*/details$"
|
|
161
|
+
```
|
|
162
|
+
Result: Matches `/store/clothes/item123/details` but does not match `/store/details`.
|
|
163
|
+
|
|
164
|
+
### Identification of third-party resources
|
|
165
|
+
|
|
166
|
+
_Lighthouse 6 & up_
|
|
167
|
+
|
|
168
|
+
`options.firstPartyHostnames` can be used to indicate which resources should be considered first-party. Wildcards can optionally be used to match a hostname and all of its subdomains.
|
|
169
|
+
|
|
170
|
+
If this property is not set, the root domain and all its subdomains are considered first party.
|
|
171
|
+
|
|
172
|
+
```json
|
|
173
|
+
"options": {
|
|
174
|
+
"firstPartyHostnames": ["*.my-site.com", "my-site.cdn.com"]
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Examples:
|
|
179
|
+
```
|
|
180
|
+
"firstPartyHostnames": ["pets.com"]
|
|
181
|
+
```
|
|
182
|
+
Result: pets.com is considerated first-party, but fishes.pets.com is not.
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
"firstPartyHostnames": ["*.pets.com"]
|
|
186
|
+
```
|
|
187
|
+
Result: Both pets.com and fishes.pets.com are considered first party.
|