User Bower or download a ZIP file:
bower install network-js
How to use
// Create a new Network instance by providing an optional object.var settings =// The settings list is available below.;var net = settings;// Listen for the "end" event which provides the calculated latencies.netlatency;// Once all the configuration is done, start the requests for this module.netlatencystart;// It is possible to chain functions for all the modules, here's an example with the// upload module.netuploadstart;// You can also cancel a request (except for the "latency" module).netupload;netdownloadstart;netdownload;
The available settings with their default values:
latency:// Where is located your `network.php` file.endpoint: './network.php'// How many measures should be returned.measures: 5// How much attempts to get a valid value should be done for each measure.attempts: 3upload:// Where is located your `network.php` file.endpoint: './network.php'// The delay while you want to take measures.delay: 8000data:// The amount of data to initially use.size: 2 * 1024 * 1024 // 2 MB// If the measure period can't reach the delay defined in the settings,// the data amount is multiplied by the following value.multiplier: 2download:// Where is located your `network.php` file.endpoint: './network.php'// The delay while you want to take measures.delay: 8000data:// The amount of data to initially use.size: 10 * 1024 * 1024 // 10 MB// If the measure period can't reach the delay defined in the settings,// the data amount is multiplied by the following value.multiplier: 2
Here is an example usage:
var net =// If you define a value at the top level of the object,// it will be applied to every module.endpoint: './my-new-endpoint/'download:data:multiplier: 25;
You can also redefine settings whenever you want:
// The `settings()` method takes an object in parameter.net;// Without any parameters, it will return the current settings.console; // Prints the current settings in the console.// Each module has a `settings()` method that works the same way.netlatency;console;
Network.js is based on two browser features: Resource Timing and XMLHttpRequest (v2). While the first one can be polyfilled, the second one is a requirement.
Thus, Network.js should be compatible with:
|Browser||Partial support (polyfill)||Native support|
|Android Browser 4.4+||✔|
|iOS Safari 5.1+||✔|
|Android Browser 3+||✔|
Latency measures can be very far from reality if the browser doesn't support Resource Timing and uses the provided polyfill. You can determine if the browser uses the latter:
if NetworksupportsResourceTiming// Resource Timing is available.else// The polyfill will be used, expect some weird latency measures.
- Chrome cannot upload a ~128 MB file, which will mainly affect fiber users.
To compile the project, install the latest version of Node and run these commands inside a terminal:
git clone https://github.com/nesk/network.js.gitcd network.jsnpm installnpm run build
There's also a
watch script which compiles the project whenever a file is changed:
npm run watch
To check if the project passes all the tests, run:
Read the CONTRIBUTING file.
This project is licensed under the MIT license, check TLDRLegal for details.