node package manager
Orgs are free. Discover, share, and reuse code in your team. Create a free org »

@sitespeed.io/throttle

Simulate slow network connections on Linux and Mac OS X

Inspired by tylertreat/Comcast, the connectivity setting in the WPTAgent and sltc.

Throttle uses pfctl on Mac and tc on Linux to simulate different network speeds.

You can set the download/upload speed and RTT. Upload/download is in kbit/s and RTT in ms.

This is an early release, so please help us find potential bugs.

Install

npm install @sitespeed.io/throttle -g

Start simulate a slower network connection

Here is an example for running with 3G connectivity. Remember: Throttle will use sudo so your user will need sudo rights.

throttle --up 330 --down 780 --rtt 200

Pre made profiles

To make it easier we have pre made profiles, check them out by throttle --help:

--profile         Premade profiles, set to one of the following
                     3g: up:768 down:1600 rtt:150
                     3gfast: up:768 down:1600 rtt:75
                     3gslow: up:400 down:400 rtt:200
                     2g: up:32 down:35 rtt:650
                     cable: up:1000 down:5000 rtt:14

You can start throttle with one of the premade profiles:

throttle --profile 3gslow

Stop simulate the network

Stopping is as easy as giving the parameter stop to throttle.

throttle --stop

Add delay on your localhost (Linux only at the moment)

This is useful if you run WebPageReplay and want to add som latency to your tests.

throttle --rtt 200 --localhost

Stop adding delay on localhost (Linux only)

throttle --stop --localhost

Use directly in NodeJS

const throttle = require('@sitespeed.io/throttle');
// Returns a promise
throttle.start({up: 360, down: 780, rtt: 200}).then(() => ...

Run in Docker (on Linux)

Make sure to run sudo modprobe ifb numifbs=1 before you start the container.

And then when you actually start your Docker container, give it the right privileges with --cap-add=NET_ADMIN