lighthouse/docs/hacking-tips.md

3.7 KiB

A few assorted scripts and tips to make hacking on Lighthouse a bit easier

Evaluate Lighthouse's runtime performance

Lighthouse has instrumentation to collect timing data for its operations. The data is exposed at LHR.timing.entries. You can generate a trace from this data for closer analysis.

image View example trace

To generate, run yarn timing-trace with the LHR json:

lighthouse http://example.com --output=json --output-path=lhr.json
yarn timing-trace lhr.json

That will generate lhr.json.timing.trace.json. Then, drag 'n drop that file into chrome://tracing.

Unhandled promise rejections

Getting errors like these?

(node:12732) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1) (node:12732) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Use --trace-warnings to get actual stack traces.

node --trace-warnings lighthouse-cli http://example.com

Updating fixture dumps

lighthouse-core/test/results/samples_v2.json is generated from running LH against dbw_tester.html. To update this file, start a local server on port 8080 and serve the directory lighthouse-cli/test/fixtures. Then run:

npm run start -- --output=json --output-path=lighthouse-core/test/results/sample_v2.json http://localhost:8080/dobetterweb/dbw_tester.html

After updating, consider deleting any irrelevant changes from the diff (exact timings, timestamps, etc). Be sure to run the tests.

Iterating on the report

This will generate new reports from the same results json.

# capture some results first:
lighthouse --output=json http://example.com > temp.report.json

# quickly generate reports:
node generate_report.js > temp.report.html; open temp.report.html
// generate_report.js
'use strict';

const ReportGenerator = require('./lighthouse-core/report/report-generator');
const results = require('./temp.report.json');
const html = ReportGenerator.generateReportHtml(results);

console.log(html);

Debugging Travis via docker image

You can do a local docker image install of Travis to better inspect a travis build:

docker run --name travis-debug -dit travisci/ci-garnet:packer-1512502276-986baf0 /sbin/init
docker exec -it travis-debug bash -l

# once inside, change to travis user, rather than root
su - travis

# once on the travis user, make a clone of lighthouse and play around
# you may also want to mount a local folder into your docker instance.
# This will mount your local machines's ~/temp/trav folder into the container's /home/travis/mountpoint folder
docker run -v $HOME/temp/trav:/home/travis/mountpoint --name travis-debug -dit travisci/ci-garnet:packer-1496954857 /sbin/init

You can then run the travis commands (e.g. travis compile) to install an environment and run the build script:

travis-ci/travis-build: .travis.yml => build.sh converter

Using Audit Classes Directly, Providing Your Own Artifacts

See gist.