Added configuration for custom compensation factor; Fixed a problem where xhr_ignoreErrors could not be changed

This commit is contained in:
dosse91 2017-06-15 07:02:35 +02:00
parent 23b188b3ce
commit 62a06fa7d3
3 changed files with 13 additions and 6 deletions

6
doc.md
View file

@ -1,7 +1,7 @@
# HTML5 Speedtest # HTML5 Speedtest
> by Federico Dossena > by Federico Dossena
> Version 4.2.3, June 14 2017 > Version 4.2.4, June 15 2017
> [https://github.com/adolfintel/speedtest/](https://github.com/adolfintel/speedtest/) > [https://github.com/adolfintel/speedtest/](https://github.com/adolfintel/speedtest/)
@ -178,6 +178,10 @@ Fetch API are used if the following conditions are met:
* allow_fetchAPI is true * allow_fetchAPI is true
* Chromium-based browser with support for Fetch API and enable_quirks is true * Chromium-based browser with support for Fetch API and enable_quirks is true
OR force_fetchAPI is true and the browser supports Fetch API OR force_fetchAPI is true and the browser supports Fetch API
* __overheadCompensationFactor__: compensation for HTTP and network overhead. Default value assumes typical MTUs used over the Internet. You might want to change this if you're using this in your internal network with different MTUs, or if you're using IPv6 instead of IPv4.
* Default: `1.13359567567567567568` (1048576/925000) assumes HTTP+TCP+IPv4+ETH with typical MTUs used over the Internet
* `1460 / 1514`: TCP+IPv4+ETH, ignoring HTTP overhead (this measures the speed at which you actually download/upload files instead of estimating the speed of the connection)
* `1440 / 1514`: TCP+IPv6+ETH, ignoring HTTP overhead (this measures the speed at which you actually download/upload files instead of estimating the speed of the connection)
### Aborting the test prematurely ### Aborting the test prematurely
The test can be aborted at any time by sending an abort command to the worker: The test can be aborted at any time by sending an abort command to the worker:

View file

@ -1,5 +1,5 @@
/* /*
HTML5 Speedtest v4.2.3 HTML5 Speedtest v4.2.4
by Federico Dossena by Federico Dossena
https://github.com/adolfintel/speedtest/ https://github.com/adolfintel/speedtest/
GNU LGPLv3 License GNU LGPLv3 License
@ -29,7 +29,8 @@ var settings = {
garbagePhp_chunkSize: 20, // size of chunks sent by garbage.php (can be different if enable_quirks is active) garbagePhp_chunkSize: 20, // size of chunks sent by garbage.php (can be different if enable_quirks is active)
enable_quirks: true, // enable quirks for specific browsers. currently it overrides settings to optimize for specific browsers, unless they are already being overridden with the start command enable_quirks: true, // enable quirks for specific browsers. currently it overrides settings to optimize for specific browsers, unless they are already being overridden with the start command
allow_fetchAPI: false, // enables Fetch API. currently disabled because it leaks memory like no tomorrow allow_fetchAPI: false, // enables Fetch API. currently disabled because it leaks memory like no tomorrow
force_fetchAPI: false // when Fetch API is enabled, it will force usage on every browser that supports it force_fetchAPI: false, // when Fetch API is enabled, it will force usage on every browser that supports it
overheadCompensationFactor: 1048576/925000 //compensation for HTTP+TCP+IP+ETH overhead. 925000 is how much data is actually carried over 1048576 (1mb) bytes downloaded/uploaded. This default value assumes HTTP+TCP+IPv4+ETH with typical MTUs over the Internet. You may want to change this if you're going through your local network with a different MTU or if you're going over IPv6 (see doc.md for some other values)
} }
var xhr = null // array of currently active xhr requests var xhr = null // array of currently active xhr requests
@ -95,9 +96,11 @@ this.addEventListener('message', function (e) {
if (typeof s.count_ping !== 'undefined') settings.count_ping = s.count_ping // number of pings for ping test if (typeof s.count_ping !== 'undefined') settings.count_ping = s.count_ping // number of pings for ping test
if (typeof s.xhr_dlMultistream !== 'undefined') settings.xhr_dlMultistream = s.xhr_dlMultistream // number of download streams if (typeof s.xhr_dlMultistream !== 'undefined') settings.xhr_dlMultistream = s.xhr_dlMultistream // number of download streams
if (typeof s.xhr_ulMultistream !== 'undefined') settings.xhr_ulMultistream = s.xhr_ulMultistream // number of upload streams if (typeof s.xhr_ulMultistream !== 'undefined') settings.xhr_ulMultistream = s.xhr_ulMultistream // number of upload streams
if (typeof s.xhr_ignoreErrors !== 'undefined') settings.xhr_ignoreErrors = s.xhr_ignoreErrors // what to do in case of errors during the test
if (typeof s.xhr_dlUseBlob !== 'undefined') settings.xhr_dlUseBlob = s.xhr_dlUseBlob // use blob for download test if (typeof s.xhr_dlUseBlob !== 'undefined') settings.xhr_dlUseBlob = s.xhr_dlUseBlob // use blob for download test
if (typeof s.garbagePhp_chunkSize !== 'undefined') settings.garbagePhp_chunkSize = s.garbagePhp_chunkSize // size of garbage.php chunks if (typeof s.garbagePhp_chunkSize !== 'undefined') settings.garbagePhp_chunkSize = s.garbagePhp_chunkSize // size of garbage.php chunks
if (typeof s.force_fetchAPI !== 'undefined') settings.force_fetchAPI = s.force_fetchAPI // use fetch api on all browsers that support it if enabled if (typeof s.force_fetchAPI !== 'undefined') settings.force_fetchAPI = s.force_fetchAPI // use fetch api on all browsers that support it if enabled
if (typeof s.overheadCompensationFactor !== 'undefined') settings.overheadCompensationFactor = s.overheadCompensationFactor //custom overhead compensation factor (default assumes HTTP+TCP+IP+ETH with typical MTUs)
if (settings.allow_fetchAPI && settings.force_fetchAPI && (!!self.fetch)) useFetchAPI = true if (settings.allow_fetchAPI && settings.force_fetchAPI && (!!self.fetch)) useFetchAPI = true
} catch (e) { } } catch (e) { }
// run the tests // run the tests
@ -203,7 +206,7 @@ function dlTest (done) {
var t = new Date().getTime() - startT var t = new Date().getTime() - startT
if (t < 200) return if (t < 200) return
var speed = totLoaded / (t / 1000.0) var speed = totLoaded / (t / 1000.0)
dlStatus = ((speed * 8) / 925000.0).toFixed(2) // 925000 instead of 1048576 to account for overhead dlStatus = ((speed * 8 * settings.overheadCompensationFactor)/1048576).toFixed(2) // speed is multiplied by 8 to go from bytes to bits, overhead compensation is applied, then everything is divided by 1048576 to go to megabits/s
if ((t / 1000.0) > settings.time_dl || failed) { // test is over, stop streams and timer if ((t / 1000.0) > settings.time_dl || failed) { // test is over, stop streams and timer
if (failed || isNaN(dlStatus)) dlStatus = 'Fail' if (failed || isNaN(dlStatus)) dlStatus = 'Fail'
clearRequests() clearRequests()
@ -297,7 +300,7 @@ function ulTest (done) {
var t = new Date().getTime() - startT var t = new Date().getTime() - startT
if (t < 200) return if (t < 200) return
var speed = totLoaded / (t / 1000.0) var speed = totLoaded / (t / 1000.0)
ulStatus = ((speed * 8) / 925000.0).toFixed(2) // 925000 instead of 1048576 to account for overhead ulStatus = ((speed * 8 * settings.overheadCompensationFactor)/1048576).toFixed(2) // speed is multiplied by 8 to go from bytes to bits, overhead compensation is applied, then everything is divided by 1048576 to go to megabits/s
if ((t / 1000.0) > settings.time_ul || failed) { // test is over, stop streams and timer if ((t / 1000.0) > settings.time_ul || failed) { // test is over, stop streams and timer
if (failed || isNaN(ulStatus)) ulStatus = 'Fail' if (failed || isNaN(ulStatus)) ulStatus = 'Fail'
clearRequests() clearRequests()

File diff suppressed because one or more lines are too long