Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/addyosmani/psi
PageSpeed Insights Reporting for Node
https://github.com/addyosmani/psi
Last synced: 3 months ago
JSON representation
PageSpeed Insights Reporting for Node
- Host: GitHub
- URL: https://github.com/addyosmani/psi
- Owner: GoogleChromeLabs
- License: apache-2.0
- Created: 2014-05-26T22:05:17.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2021-04-10T00:13:45.000Z (over 3 years ago)
- Last Synced: 2024-08-01T18:29:55.620Z (3 months ago)
- Language: JavaScript
- Homepage:
- Size: 496 KB
- Stars: 3,098
- Watchers: 53
- Forks: 126
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# psi [![Build Status](https://travis-ci.org/GoogleChromeLabs/psi.svg?branch=master)](https://travis-ci.org/GoogleChromeLabs/psi) [![NPM psi package](https://img.shields.io/npm/v/psi.svg)](https://npmjs.org/package/psi)
> PageSpeed Insights with reporting
![](screenshot.png)
Run mobile and desktop performance tests for your deployed site using [Google PageSpeed Insights v5](https://developers.google.com/speed/docs/insights/v5/about) with tidy reporting for your build process.
## Install
```
$ npm install psi
```## Usage
```js
const psi = require('psi');(async () => {
// Get the PageSpeed Insights report
const { data } = await psi('https://theverge.com');
console.log('Speed score:', data.lighthouseResult.categories.performance.score);// Output a formatted report to the terminal
await psi.output('https://theverge.com');
console.log('Done');// Supply options to PSI and get back speed
const data2 = await psi('https://theverge.com', {
nokey: 'true',
strategy: 'desktop'
});
console.log('Speed score:', data2.data.lighthouseResult.categories.performance.score);
})();
```As of PSI 2.x, we expose both the PageSpeed Insights speed and usability scores. The latter is based on [usability rules](https://developers.google.com/speed/docs/insights/rules) that score a page based on factors like the presence of a sensible mobile [viewport](https://developers.google.com/speed/docs/insights/ConfigureViewport).
## API
### psi(url, [options])
Returns a promise for the response data from Google PageSpeed Insights.
#### url
Type: `string`
URL of the page for which the PageSpeed Insights API should generate results.
#### options
Type: `Object`
##### key
Type: `string`
Default: Free tierWhen using this module for a production-level build process, registering for an API key from the [Google Developer Console](https://developers.google.com/speed/docs/insights/v1/getting_started#auth) is recommended.
##### strategy
Type: `string`
Default: `mobile`
Values: `mobile` `desktop`Strategy to use when analyzing the page.
##### locale
Type: `string`
Default: `en_US`Locale results should be generated in.
##### threshold
Type: `number`
Default: `70`Threshold score to pass the PageSpeed test. Useful for setting a performance budget.
##### links
Type: `boolean`
Default: `false`If passed adds links with more info about opportunities. Useful for checking documentation about opportunities.
### psi.output(url, [options])
Output the formatted report to the terminal.
Returns a promise for the response data from Google PageSpeed Insights.
`url` and `options` are the same as `psi()`.
## CLI
```
$ npm install --global psi
``````
$ psi --helpUsage
$ psiOptions
--key Google API Key. By default the free tier is used
--strategy Strategy to use when analyzing the page: mobile|desktop
--format Output format: cli|json|tap
--locale Locale results should be generated in
--threshold Threshold score to pass the PageSpeed testExample
$ psi https://addyosmani.com --strategy=mobile
```## Common Use cases
Getting PSI into your build process.
A sample [Gulp](https://github.com/addyosmani/psi-gulp-sample) project using PSI is available.
If you use Grunt, [`grunt-pagespeed`](https://github.com/jrcryer/grunt-pagespeed) is a task by James Cryer that uses PSI under the hood.
For testing local projects, we recommend using [`psi-ngrok`](https://github.com/denar90/psi-ngrok) or [`ngrok`](http://www.jamescryer.com/2014/06/12/grunt-pagespeed-and-ngrok-locally-testing/).
Getting filmstrips
**Filmstrips** are returned by the v5 API as data uri's but the psi tool does not expose them on the cli. If you want to get **filmstrips** (or any audit details) you can require `psi` and get them from the `audits` object:
```javascript
const psi = require('psi');(async () => {
// Get the PageSpeed Insights report
const {data} = await psi('https://theverge.com');
console.log(data.lighthouseResult.audits['screenshot-thumbnails'].details.items);
})();
```## License
Apache-2.0 - Copyright 2015 Google Inc