Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pod4g/hiper
π A statistical analysis tool for performance testing
https://github.com/pod4g/hiper
analysis audits broswer cli frontend headless network pages pagespeed performance statistical testing tool web webpages websites
Last synced: 6 days ago
JSON representation
π A statistical analysis tool for performance testing
- Host: GitHub
- URL: https://github.com/pod4g/hiper
- Owner: pod4g
- License: mit
- Created: 2018-06-02T19:32:04.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2020-07-20T13:57:25.000Z (over 4 years ago)
- Last Synced: 2024-11-28T22:04:24.517Z (13 days ago)
- Topics: analysis, audits, broswer, cli, frontend, headless, network, pages, pagespeed, performance, statistical, testing, tool, web, webpages, websites
- Language: JavaScript
- Homepage:
- Size: 45.9 KB
- Stars: 2,703
- Watchers: 65
- Forks: 168
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-repositories - pod4g/hiper - π A statistical analysis tool for performance testing (JavaScript)
- my-awesome - hiper - :white_check_mark: A statistical analysis tool for performance testing. (Tool)
README
**English** | [δΈζ](./README.zh-CN.md)
π A statistical analysis tool for performance testing
## Hiper
The name is short for **Hi** **per**formance
Or **Hi**gh **per**formance## Important
Hi guys, Please present your issue in English
θ―·δ½Ώη¨θ±θ―ζissue
## Install
``` bash
npm install hiper -g# or use yarn:
# yarn global add hiper
```## The output
Notice: `It takes period (m)s to load ...`. the `period` means **This test takes time**. So -n go up and the period go up. not a bug
![Hiper](http://7xt9n8.com2.z0.glb.clouddn.com/hiper9.png)## PerformanceTiming
![timing](http://7xt9n8.com2.z0.glb.clouddn.com/PerformanceTiming.png)
| Key | Value |
| :----------------------------- | :------------------------------------------- |
| DNS lookup time | domainLookupEnd - domainLookupStart |
| TCP connect time | connectEnd - connectStart |
| TTFB | responseStart - requestStart |
| Download time of the page | responseEnd - responseStart |
| After DOM Ready download time | domComplete - domInteractive |
| White screen time | domInteractive - navigationStart |
| DOM Ready time | domContentLoadedEventEnd - navigationStart |
| Load time | loadEventEnd - navigationStart |https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming
## Usage
```bash
hiper --helpUsage: hiper [options] [url]
π A statistical analysis tool for performance testing
Options:
-v, --version output the version number
-n, --count specified loading times (default: 20)
-c, --config load the configuration file
-u, --useragent to set the useragent
-H, --headless [b] whether to use headless mode (default: true)
-e, --executablePath use the specified chrome browser
--no-cache disable cache (default: false)
--no-javascript disable javascript (default: false)
--no-online disable network (defalut: false)
-h, --help output usage information
```For instance
```bash
# We can omit the protocol header if has omitted, the protocol header will be `https://`# The simplest usage
hiper baidu.com# if the url has any parameter, surround the url with double quotes
hiper "baidu.com?a=1&b=2"# Load the specified page 100 times
hiper -n 100 "baidu.com?a=1&b=2"# Load the specified page 100 times without `cache`
hiper -n 100 "baidu.com?a=1&b=2" --no-cache# Load the specified page 100 times without `javascript`
hiper -n 100 "baidu.com?a=1&b=2" --no-javascript
# Load the specified page 100 times with `headless = false`
hiper -n 100 "baidu.com?a=1&b=2" -H false# Load the specified page 100 times with set `useragent`
hiper -n 100 "baidu.com?a=1&b=2" -u "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"
```## Config
#### Support `.json` and `.js` config
1. **json**
```javascript
{
// options Pointing to a specific chrome executable, this configuration is generally not required unless you want to test a specific version of chrome
"executablePath": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
// required The url you want to test
"url": "https://example.com",
// options Cookies required for this test. It's usually a cookie for login information Array | Object
"cookies": [{
"name": "token",
"value": "9+cL224Xh6VuRT",
"domain": "example.com",
"path": "/",
"size": 294,
"httpOnly": true
}],
// options default: 20 Test times
"count": 100,
// options default: true Whether to use headless mode
"headless": true,
// options default: false Disable cache
"noCache": false,
// options default: false Disable javascript
"noJavascript": false,
// options default: false Disable network
"noOnline": false,
// options Set the useragent information
"useragent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36",
// options Set the viewport information
"viewport": {
// options
"width": 375,
// options
"height": 812,
// options default: 1 devicePixelRatio
"deviceScaleFactor": 3,
// options default: false Whether to simulate mobile
"isMobile": false,
// options default: false Whether touch events are supported
"hasTouch": false,
// options default: false Is it horizontal or not
"isLandscape": false
}
}
```2. **js**
Having a JS file for config allows people to use ENV variables. For example, let's say I want to test the site on an authenticated state. I can pass some cookie that is used to identify me through ENV variables and having a JS based config file makes this simple. For example
```javascript
module.exports = {
....
cookies: [{
name: 'token',
value: process.env.authtoken,
domain: 'example.com',
path: '/',
httpOnly: true
}],
....
}
`````` bash
# Load the above configuration file (Let's say this file is under /home/)
hiper -c /home/config.json# Or you can also use JS files for configuration
hiper -c /home/config.js
```## Pain point
After we have developed a project or optimized the performance of a project,
how do we measure the performance of this project?
A common approach is to look at the data in the `performance` and `network` in the `Dev Tool`, record a few key performance metrics, and refresh them a few times before looking at those performance metrics,
Sometimes we find that due to the small sample size, the current **Network/CPU/Memory** load is heavily impacted, and sometimes the optimized project is slower than before the optimization.
If there is a tool, request web page many times, and then taking out the various performance indicators averaging, we can **very accurately** know the optimization is positive or negative.
In addition, you can also make a comparison and get **accurate data** about **how much you have optimized**. This tool is designed to solve the pain point.
> At the same time, this tool is also a good tool for us to learn about the "browser's process of load and rendering" and "performance optimization", so that we don't get wrong conclusions when there are too few samples
## Roadmap
1. Better documentation
2. i18n
3. Increase the analysis statistics of resource items loaded on the page
4. Statistical reports can be generated
5. Data visualization## Contributing
1. Fork it
2. Create your feature branch (git checkout -b my-new-feature)
3. Commit your changes (git commit -am 'Add some feature')
4. Push to the branch (git push origin my-new-feature)
5. Create new Pull Request## License
[MIT](http://opensource.org/licenses/MIT)
Welcome Star and PR
Copyright (c) 2018 liyanfeng(pod4g)