-
Notifications
You must be signed in to change notification settings - Fork 0
/
ndt7-download.js
39 lines (39 loc) · 1.12 KB
/
ndt7-download.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/* jshint esversion: 6, asi: true, worker: true */
// WebWorker that runs the ndt7 download test
onmessage = function (ev) {
'use strict'
let url = new URL(ev.data.href)
url.protocol = (url.protocol === 'https:') ? 'wss:' : 'ws:'
url.pathname = '/ndt/v7/download'
const sock = new WebSocket(url.toString(), 'net.measurementlab.ndt.v7')
sock.onclose = function () {
postMessage(null)
}
sock.onopen = function () {
const start = new Date().getTime()
let previous = start
let total = 0
sock.onmessage = function (ev) {
total += (ev.data instanceof Blob) ? ev.data.size : ev.data.length
let now = new Date().getTime()
const every = 250 // ms
if (now - previous > every) {
postMessage({
'AppInfo': {
'ElapsedTime': (now - start) * 1000, // us
'NumBytes': total,
},
'Origin': 'client',
'Test': 'download',
})
previous = now
}
if (!(ev.data instanceof Blob)) {
let m = JSON.parse(ev.data)
m.Origin = 'server'
m.Test = 'download'
postMessage(m)
}
}
}
}