Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/micmro/PerfCascade
Responsive, SVG based HAR waterfall viewer
https://github.com/micmro/PerfCascade
client-side diagram har performance performance-metrics svg waterfall webperf
Last synced: about 1 month ago
JSON representation
Responsive, SVG based HAR waterfall viewer
- Host: GitHub
- URL: https://github.com/micmro/PerfCascade
- Owner: micmro
- License: mit
- Created: 2015-12-19T14:14:51.000Z (almost 9 years ago)
- Default Branch: main
- Last Pushed: 2023-03-03T11:27:56.000Z (almost 2 years ago)
- Last Synced: 2024-10-31T08:05:07.195Z (about 1 month ago)
- Topics: client-side, diagram, har, performance, performance-metrics, svg, waterfall, webperf
- Language: TypeScript
- Homepage: https://micmro.github.io/PerfCascade
- Size: 5.88 MB
- Stars: 274
- Watchers: 12
- Forks: 51
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-starred - micmro/PerfCascade - Responsive, SVG based HAR waterfall viewer (others)
- jimsghstars - micmro/PerfCascade - Responsive, SVG based HAR waterfall viewer (TypeScript)
README
# PerfCascade
Responsive, SVG based [HAR](http://www.softwareishard.com/blog/har-12-spec/) waterfall viewer .[![npm version](https://img.shields.io/npm/v/perf-cascade.svg?style=flat-square)](https://www.npmjs.com/package/perf-cascade)
[![npm downloads](https://img.shields.io/npm/dt/perf-cascade.svg?style=flat-square)](https://www.npmjs.com/package/perf-cascade)
[![Build status][travis-image]][travis-url]Install via `npm install perf-cascade`
Live example: https://micmro.github.io/PerfCascade/## Contents
- [How to use PerfCascade](#how-to-use-perfcascade)
* [With ES6 Compatible Module Loader (Webpack, Babel, Typescript...)](#with-es6-compatible-module-loader--webpack--babel--typescript-)
* [As Global Object](#as-global-object)
* [Use via npm](#use-via-npm)
- [Options](#options)
- [`*.zhar` - zipped HAR files](#--zhar----zipped-har-files)
- [Rendering other formats (than HAR)](#rendering-other-formats--than-har-)
- [Dev](#dev)
- [Specs and resources](#specs-and-resources)## How to use PerfCascade
PerfCascade is exported with [UMD](https://github.com/umdjs/umd), so you can use it as global object, via AMD (e.g. requireJS) or commonJS (internally it uses ES6 modules).### With ES6 Compatible Module Loader (Webpack, Babel, Typescript...)
Install the package
```
npm install perf-cascade --save
```````javascript
import {fromHar} from 'perf-cascade'// `myHarDoc` represents your HAR doc
const perfCascadeSvg = fromHar(myHarDoc)
document.appendChild(perfCascadeSvg)
```_With TypeScript you can additionally import TypeDefinitions for `ChartOptions` (PerfCascade Options) and `harFormat` (namespace for HAR Typings)_
### As Global Object
When using PerfCascade without any module system it just exports as a global object `perfCascade`, you can use as following:
```javascript
/** pass HAR `perfCascade.fromHar` to generate the SVG element*/
var perfCascadeSvg = perfCascade.fromHar(harData)
document.appendChild(perfCascadeSvg)
```Or with options:
```javascript
/** override selected options for PerfCascade (all have defaults) */
var options = {
showIndicatorIcons: false, //default: true
leftColumnWidth: 30 //default: 25
}var perfCascadeSvg = perfCascade.fromHar(harData, options)
document.appendChild(perfCascadeSvg)
```You can find the compiled (and minified) JS in the [releases tab](https://github.com/micmro/PerfCascade/releases). For the basic version without zHAR support you need [`perf-cascade.min.js`](https://github.com/micmro/PerfCascade/blob/release/perf-cascade.min.js) and some basic CSS styles [`perf-cascade.css`](https://github.com/micmro/PerfCascade/blob/release/perf-cascade.css).
### Use via npm
You can install PerfCascade via NPM as well:
```
npm install perf-cascade
```Directories:
- `node_modules/perf-cascade/dist/`: bundled UMD modules and the css file in the directory.
- `node_modules/perf-cascade/lib`: contains the full project exported as separate ES6 modules
- `node_modules/perf-cascade/types`: Typescript typings## Options
see [options.d.ts](https://github.com/micmro/PerfCascade/blob/main/src/ts/typing/options.ts) for source| Option | Type | Default Value | Description |
| ----------- | ---- | ------- | ----------- |
| `rowHeight` | `number` | `23` | Height of every request bar block plus spacer pixel (in px) default: 23 |
| `showAlignmentHelpers` | `boolean` | `true` | Show vertical lines to easier spot potential dependencies/blocking between requests |
| `showMimeTypeIcon` | `boolean` | `true` | Show mime type icon on the left |
| `showIndicatorIcons` | `boolean` | `true` | Show warning icons for potential issues on the left |
| `leftColumnWidth` | `number` | `25` | Relative width of the info column on the left (in percent) |
| `pageSelector` | `HTMLSelectElement` | `undefined` | DOM `` element to use to select a run if the HAR contains multiple runs. |
| `selectedPage` | `number` | `0` | Zero-based index of the page to initially render.
If `selectedPage` is larger than the number of pages the last page will be selected. |
| `legendHolder` | `HTMLElement`
(DOM element) | `undefined`
(not shown) | If set a legend explaining the waterfall colours is rendered in the `legendHolder` DOM element. |
| `showUserTiming` | `boolean` | `false` | If enabled the [UserTiming](https://developer.mozilla.org/en-US/docs/Web/API/User_Timing_API) data in WebPageTest's format `_userTime.*` get parsed and rendered as well.
Matching `_userTime.startTimer-*` and `_userTime.endTimer-*` entries get combined into one block. |
| `showUserTimingEndMarker` | `boolean` | `false` (requires `showUserTiming` to be `true`) | If `showUserTiming` is enabled all `_userTime.endTimer-*` marker are hidden by default, only the UserTiming's start and duration is shown. This option also adds an `_userTime.endTimer-*` marker.## `*.zhar` - zipped HAR files
By loading `/perf-cascade-file-reader.min.js` as in [this example](https://github.com/micmro/PerfCascade/blob/main/src/index.html#L78-L86) you can use `perfCascadeFileReader.readFile` to read a zip file and convert it to a JSON HAR object.```javascript
perfCascadeFileReader.readFile(fileFromTheFileInput, fileName, function(error, data){
if(error){
// handle error
console.error(error)
}else{
// handle success
renderPerfCascadeChart(data)
}
})
```Optionally `perfCascadeFileReader.readFile` also takes a callback (`(progress:number) => void`) as a forth argument
that gets called whenever a new unzip progress status is available.## Rendering other formats (than HAR)
PerfCascade is composed of a parser [`src/ts/transformers/har.ts`](https://github.com/micmro/PerfCascade/blob/main/src/ts/transformers/har.ts) that parsed HAR into PerfCascade's agnostic [`WaterfallDocs`](https://github.com/micmro/PerfCascade/blob/main/src/ts/typing/waterfall.ts) format and the renderer (see `PerfCascade()` in [`src/ts/main.ts`](https://github.com/micmro/PerfCascade/blob/main/src/ts/main.ts) that creates the chart SVG.If you want to render another format, you could fork the repo and create a new parser in [`src/ts/transformers/`](https://github.com/micmro/PerfCascade/blob/main/src/ts/transformers/) and implement a new `fromMyNewFormat` function similar to `fromHar()`in [`src/ts/main.ts`](https://github.com/micmro/PerfCascade/blob/main/src/ts/main.ts) that takes your format, calls its parser and then calls the main `PerfCascade()` function with it and returns it.
It would also be possible to separate the renderer into a separate package, if there is enough interest to justify the effort (create an issue and we can discuss it).
## Dev
- Start live-reload server and Typescript compiler with watch: `npm run watch`
- Create uglified version: `npm run build`_See `package.json` for other useful tasks like linting, release etc._
## Specs and resources
- [W3C HAR Spec](https://w3c.github.io/web-performance/specs/HAR/Overview.html)
- [HAR 1.2 Spec](http://www.softwareishard.com/blog/har-12-spec)
- [HAR Resources](https://github.com/ahmadnassri/har-resources)[travis-image]: https://img.shields.io/travis/micmro/PerfCascade.svg?style=flat-square
[travis-url]: https://travis-ci.org/micmro/PerfCascade