github GoogleChrome/lighthouse v6.0.0

latest releases: v12.2.2, v12.2.1, v12.2.0...
4 years ago

Raw commit changelog

We expect this release to ship in the DevTools of Chrome 84.

Notable changes

So many! See the Lighthouse 6.0: What's New blog post for an in-depth look.

🆕 New audits

⚗️ Experimental audits

These audits are not yet part of the default Lighthouse experience, but they will provide performance advice based on analysis of a page's JavaScript bundles. They can be tested today on the command line with the --preset=experimental flag.

  • legacy-javascript rummages through your bundles looking for polyfills and bundler transforms that aren't necessary or are outdated (#10303, #10568, #10564).
  • duplicated-javascript also takes a dive through a page's JavaScript looking for code that has ended up duplicated within bundles or across multiple bundles (#10314).
  • unused-javascript now runs by default (as mentioned above), but when run under experimental, the audit can use source maps to show what original source code was never run and could be postponed or eliminated (#10090).

New contributors!

Thanks to @TGiles, @roelfjan, @chruxin, @warrengm, @alexgreencode, @mikedijkstra, @egsweeny, @johnsampson, @jazyan, @b3none, @mattjared, @Malvoz, @Beytoven, @Munter, @jayaddison, @msomji, @piotrzarycki, @awdltd, @mathiasbynens, @Carr1005, @staabm, @SphinxKnight, @sk-, @AndreasKubasa, @jantimon, @kmanuel, @Kikobeats, @RolandBurrows, @nxqamar, @catalinred, and @baseeee for their first contributions! So many!

💥 Breaking changes

  • Performance metric scores have been reweighted to better reflect a user's loading experience (#9949).
  • Metric score curves have been updated when running a desktop Lighthouse test to account for the faster connection and CPU (#9911, #10756).
  • frameNavigated events are now used to track redirects, which means JS redirects are now accounted for when determining the run's finalUrl (#10339).
  • The emulated mobile device has moved from the Nexus 5x to the Moto G4 (but the existing DPR has been left unchanged) (#10191, #10749).
  • The mixed-content preset has been removed as it was not widely used and takes too long to be added to the default Lighthouse experience (#10159, #10750).
  • The full preset has been renamed experimental to signify that the code there may not be ready for running by default (#9930, #10311, #10333, #10585).
  • The emulated Chrome UA string has been updated to Chrome 80 (#9967).
  • installable-manifest: icons in the Web app manifest must be fetchable to be considered installable (#10168, #10320)

🤖💥 Breaking changes for programmatic users

These changes are unlikely to affect end users, but may be important if you are writing custom configs, plugins, or processing the Lighthouse JSON output.

  • LH.Audit.Context passed into audits is now treated as immutable. If code previously pushed to context.LighthouseRunWarnings to get a top-level warning, it should now pass that back in runWarnings on the audit's product (#10555).
  • Audit.computeLogNormalScore has been redefined to specify log-normal curves with median and p10 points (dropping the "point of diminishing returns"). Existing audits have been moved to this new definition so that no score changes should occur (#10715).
  • A loadFailureMode setting has been added to Config passes to control behavior in case of page load failure. Previously this was implicitly controlled (e.g. no offline page available did not cause an error) (#9987)
  • time-to-first-byte has been renamed server-response-time to better reflect what is being measured by the audit (#10735).
  • resource-summary: details.items.size has been renamed to transferSize for clarity (#10700, #10743).

🧱 Core

Improvements, bug fixes, clarifications

The following changes are considered to be bug fixes or updates to better match what was intended to be audited, but the changes may cause adjustments in audit scores or behavior.

  • add top-level warning if Lighthouse hit a timeout before load was complete (#10538)
  • add top-level warning if tested URL was redirected (#10157)
  • FCP + 5 seconds is now included as a minimum time that must be reached before the test page is considered loaded (#10505, #10516)
  • load simulation: add edges from initiatorRequest when there are duplicate records (#10097)
  • load simulation: keep first layout/paint/parse events regardless of duration (#9922)
  • load simulation: do not create self-dependencies via timers (#10280)
  • load simulation: remove min task duration on CPU nodes (#9910)
  • load simulation: use fixed times for data URLs since they've already been loaded (#9932)
  • load simulation: link layout nodes to root frame request (#9727)
  • tracehouse: improved attribution for XHRs + paint/layout/HTML (#10001)
  • offscreen-images: look outside three viewports for possible images to defer (#10643)
  • uses-responsive-images: include offscreen images larger than viewport (#10506, #10561)
  • accessibility: include axe-core 'incomplete' results in artifact to include even partial a11y results (#10072, #10270)
  • audio-caption: remove check that has been disabled by axe-core (#10453)
  • link-text: Add more keywords to blocklist (#9986)
  • font-size: don't allow a deleted node to fail gatherer (#9928)
  • installable-manifest: lower required icon size from 192px to 144px (#10175)
  • is-on-https: add filesystem to secure schemes (#10073)
  • offscreen-images: exclude lazy or eager loading images (#10117)
  • resource-summary: don't include favicon.ico in summary (#10190)
  • uses-rel-preconnect: warn if more than three preconnects found (#9903, #10293)
  • third-party-summary: don't include main resource if origin in third-party list (#10006)
  • js-lib-detector: handle new fast lib detection entries, version heterogeneity (#9888, #10295, #10176)
  • is-on-https: update description to reference mixed content (#10712)
  • definition-list: mention <div> is allowed to group content in <dl> (#10479)
  • offline-start-url: improve failure messages (#9982)
  • update and fix links to docs in audit and stack-pack descriptions (#9850, #9863, #10019, #10069, #10246, #10496, #10714)

New things for programmatic users

  • audit results now have a numericUnit property to specify the units for their numericResult (#9979)
  • ImageElements: add usesPixelArtScaling and usesSrcSetDensityDescriptor properties (#10481)
  • MetaElements: include property attribute (#9978)
  • add new base artifact HostFormFactor (#9923)
  • refactor to share unused-javascript-summary as a computed artifact (#10387, #10634)
  • add new source-map computed artifact, js-bundles (#10078)
  • refactor to share unused-css as a computed artifact (#10160)
  • refactor to share metric timing as a computed artifact (#9814)
  • budgets: add support for CLS and LCP budgets (#10579, #10625)
  • budgets: add firstPartyHostnames to the API (#10105, #10324)
  • budgets: remove unused tolerance property from API (#9770)

Internal refactors and improvements

  • ensure axe-core errors are properly serialized (#10646)
  • cleanup of audit-details type names (#10603)
  • include finished state on hidden network-requests audit (#10530)
  • fetch source maps outside of test page so not blocked by CORS (#9459)
  • driver: dead code cleanup (#10491, #10571)
  • add internal-only __internalOptionalArtifacts for experimental artifacts (#10355)
  • font-size: use DOMSnapshot.captureSnapshot for better performance (#10200)
  • use isolated evaluateAsync when fetching content from the test page (#10130)
  • budgets: centralize path-matching logic (#9895)
  • script-elements: fetch script content in parallel (#9713)
  • include GatherRunner.runPass in internal perf timing numbers (#10205)
  • rename GatherRunner.isPerfPass for clarity (#9896)
  • migrate to flattened Chrome DevTools Protocol (#9783)

💻 CLI

  • add support for multiple --chrome-flags (#10607)
  • allow comma-separated values for --output (#10188)
  • add --chrome-ignore-default-flags (#10184)
  • allow --extra-headers as object (#9962)

📔 Report

  • add "Trust and Safety" group in the Best Practices category (#10623)
  • add link to score calculator populated with current metric scores (#10754, #10763, #10773, #10767)
  • improve display of top-level warnings (#10636, #10765)
  • external-anchors-use-rel-noopener: use node audit details type (#10242)
  • is-crawlable: include robots.txt line number that blocks crawling (#10154)
  • temporary test of css grid for metrics (#10695, #10778)
  • define monospace font-size relative to report-font-size (#10761)
  • link to updated scoring documentation (#10725)
  • add non-null jsdoc type annotations for internal linter (#10454)
  • clarify "size" as either transfer or resource size (#10420)
  • update table and inline code formatting (#10437)
  • fix link contrast in dark mode (#10364)
  • add channel to runtime settings (#10099)
  • align audit warnings (#10232)
  • close drop-down menu when focus is lost (#10208)
  • hide drop-down menu when printing (#10216)
  • move Util.UIStrings to Util.i18n (#10153)
  • add initial support for subrows within a table (#10084)
  • adjust score gauge's arc length to account for rounded linecap (#9913)
  • fix header-shifting flicker during scrolling (#9955)
  • add source-location details for linking to source code (#9354)
  • CSV report: add tested URLs to entries (#10656, #10675)
  • viewer: add option for loading JSON from any URL (#10608)
  • viewer: mention other lighthouse channels (#10384)
  • viewer: add page and cursor styling to signal loading (#10305, #10348)
  • viewer: use new logo (#9991, #9999, #10002)

👥 Clients

  • retire extension; replace with PSI launcher (#9193, #9988, #9989)
  • extension: add firefox support (#10332)
  • extension: remove content security policy (#10380)
  • devtools: share desktop throttling settings with lightrider (#10322)
  • devtools: split up runLighthouseInWorker and expose to worker (#10005)
  • devtools: add settings.internalDisableDeviceScreenEmulation (#9377)
  • devtools: include lighthouse-plugin-publisher-ads in bundle (#9924, #10583, #10682)
  • devtools: update roll-to-devtools and track upstream changes (#9942, #10310, #10036, #10758, #10762)

🌍 i18n

  • new strings: audits, stack packs, headings, and corrections (#9940, #10244, #10245, #10645)
  • localize runtime settings and tools in report (#9166)
  • don't give unused arguments for localized protocol errors (#9935)
  • use log.verbose() for outdated-strings warning (#9931)
  • centralize strings for metric names (#9871)

Docs

  • plugins: update recipe and docs to use NODE_PATH (#9997, #10028)
  • plugins: update example list (#9917)
  • scoring: update for v6, defer to web.dev for performance (#10223, #10633, #10676)
  • lantern: add deep-dive video (#10546)
  • new-audits: emphasize what makes a good audit (#10376)
  • hacking-tips: link to gist on using audit results directly (#10480)
  • variability: expand on hardware recommendations (#10483)
  • throttling: add devtools-throttling deprecation notice (#9933)
  • auth: use --disable-storage-reset in recipe (#10189)
  • tweak authenticated-pages and puppeteer docs (#10277)
  • add integration-test recipe for using Lighthouse and Jest (#9722)
  • add performance-budgets doc (#10542)
  • add recipe for using puppeteer in a custom gatherer (#10253, #10447)
  • add readme for build/ directory (#10004)
  • readme: add variability and throttling to FAQ (#10631)
  • readme: add a table of contents (#10283)
  • readme: add note about yarn test-docs (#10263)
  • readme: fix typos (#10179, #10694)
  • readme: add protobuf install directions (#10250)
  • readme: separate free and paid integrations (#10027)
  • readme: add new and updated integrations (#9954, #9984, #10018, #9985, #10156, #9836, #10385, #10466, #10475, #10609, #10745)

Tests

  • remove protobuf roundtrip check (and local protobuf dev requirement) from yarn update:sample-json (#10557, #10661)
  • run CI tests on new github action (#10418, #10551, #10620, #10622, #10627)
  • report to buildtracker on commit via CI github action (#10550, #10718)
  • lantern: update golden trace collection script and recollect them (#9662, #10129, #10209, #10279, #10663)
  • smokehouse: refactor to be able to integration test all lighthouse clients (#9843, #10158)
  • smokehouse: add bundle.js runner for driving bundled lighthouse tests (#9943)
  • bundle smokehouse + bundle.js runner + bundled lighthouse for integration testing in a browser (#9873, #10727)
  • smokehouse: use ranges for some expectations to work in varying environments (#10227, #10473)
  • smokehouse: add static-server hook to modify response body (#9872)
  • smokehouse: adjust expectation handling and logging for compatibility (#10361)
  • smokehouse: commit copy of pwa.rocks for testing (#10648)
  • add type checking to driver-test (#10135, #10123)
  • add type checking to gather-runner-test (#10136, #10215, #10230)
  • fix i18n-test.js bugs in Node 13 (#10595)
  • i18n: add check of locale files for strings that are probably wrong (#9847)
  • use assert in strict assertion mode (#10606, #10733)
  • report-ui-features: add tests and remove interdependencies (#10199, #10201)
  • update coveragePathIgnore jest configuration (#10448)
  • speedline: remove flaky test (#10181)
  • remove global.URL for jsdom tests (#10186)
  • viewer-test: don't override puppeteer's chromium (#9877)
  • fix appveyor cache failures (#10281)
  • use lighthouse tarball for recipe tests (#10254)
  • stage viewer per PR with yarn now-build (#10151)

Misc

Deps

Don't miss a new lighthouse release

NewReleases is sending notifications on new releases.