Skip to content

Commit a61ea1a

Browse files
load lazily js workers
1 parent 212e7af commit a61ea1a

2 files changed

Lines changed: 33 additions & 20 deletions

File tree

src/main/resources/web/js/page.js

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,6 @@ let listenVisible = false;
1010
let deltaTime = 0;
1111
let challenge = "";
1212
let workers = [];
13-
$(() => {
14-
workers = new Array(navigator.hardwareConcurrency)
15-
.fill(null)
16-
.map(() => new Worker("js/worker.js"));
17-
workers.forEach(it => it.onmessage = onWorkerMsg);
18-
});
1913
$(() => {
2014
if (navigator.serviceWorker) {
2115
navigator.serviceWorker.register("sw.js").catch(e => {
@@ -62,10 +56,22 @@ $(() => {
6256
function setWsStatus(txt) {
6357
connectionStatus.innerText = txt;
6458
}
59+
function getWorkers() {
60+
if (workers.length != 0)
61+
return workers;
62+
workers = new Array(navigator.hardwareConcurrency);
63+
for (let i = 0; i < workers.length; i++) {
64+
let w = new Worker("js/worker.js");
65+
workers[i] = w;
66+
w.addEventListener("message", onWorkerMsg);
67+
}
68+
return workers;
69+
}
6570
function refreshCorsStatus() {
6671
corsStatus.innerText = "...";
67-
getIpAddress(true).then(ip => {
68-
return getIpAddress(false).then(ip2 => corsStatus.innerText = "OK " + ip + (ip !== ip2 ? " (different IP)" : ""));
72+
getIpAddress(true).then(async (ip) => {
73+
const ip2 = await getIpAddress(false);
74+
return corsStatus.innerText = "OK " + ip + (ip !== ip2 ? " (different IP)" : "");
6975
}).catch(e => corsStatus.innerText = "error: " + e);
7076
}
7177
function addMcAccountToList(account) {
@@ -145,7 +151,7 @@ function submittedListen() {
145151
}
146152
else {
147153
let taskId = Math.random();
148-
workers.forEach(it => it.postMessage({
154+
getWorkers().forEach(it => it.postMessage({
149155
action: "listen_pow",
150156
user: user,
151157
id: taskId,
@@ -195,7 +201,7 @@ function onWorkerMsg(e) {
195201
}
196202
function onCompletedPoW(e) {
197203
addToast("Offline username", "Completed proof of work");
198-
workers.forEach(it => it.postMessage({ action: "cancel", id: e.data.id }));
204+
getWorkers().forEach(it => it.postMessage({ action: "cancel", id: e.data.id }));
199205
sendSocket(e.data.msg);
200206
}
201207
function addListeningList(userId, username, token) {

src/main/typescript/web/js/page.ts

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,7 @@ let listenVisible = false;
1414
let deltaTime = 0;
1515
let challenge = "";
1616
let workers: Array<Worker> = [];
17-
$(() => {
18-
workers = new Array(navigator.hardwareConcurrency)
19-
.fill(null)
20-
.map(() => new Worker("js/worker.js"))
21-
workers.forEach(it => it.onmessage = onWorkerMsg);
22-
});
17+
2318
$(() => {
2419
if (navigator.serviceWorker) {
2520
navigator.serviceWorker.register("sw.js").catch(e => {
@@ -74,10 +69,22 @@ function setWsStatus(txt: string) {
7469
connectionStatus.innerText = txt;
7570
}
7671

72+
function getWorkers(): Array<Worker> {
73+
if (workers.length != 0) return workers
74+
workers = new Array(navigator.hardwareConcurrency)
75+
for (let i = 0; i < workers.length; i++) {
76+
let w = new Worker("js/worker.js")
77+
workers[i] = w
78+
w.addEventListener("message", onWorkerMsg)
79+
}
80+
return workers
81+
}
82+
7783
function refreshCorsStatus() {
7884
corsStatus.innerText = "...";
79-
getIpAddress(true).then(ip => {
80-
return getIpAddress(false).then(ip2 => corsStatus.innerText = "OK " + ip + (ip !== ip2 ? " (different IP)" : ""));
85+
getIpAddress(true).then(async ip => {
86+
const ip2 = await getIpAddress(false);
87+
return corsStatus.innerText = "OK " + ip + (ip !== ip2 ? " (different IP)" : "");
8188
}).catch(e => corsStatus.innerText = "error: " + e);
8289
}
8390

@@ -157,7 +164,7 @@ function submittedListen() {
157164
// todo
158165
} else {
159166
let taskId = Math.random();
160-
workers.forEach(it => it.postMessage({
167+
getWorkers().forEach(it => it.postMessage({
161168
action: "listen_pow",
162169
user: user,
163170
id: taskId,
@@ -210,7 +217,7 @@ function onWorkerMsg(e: MessageEvent) {
210217

211218
function onCompletedPoW(e: MessageEvent) {
212219
addToast("Offline username", "Completed proof of work");
213-
workers.forEach(it => it.postMessage({action: "cancel", id: e.data.id}));
220+
getWorkers().forEach(it => it.postMessage({action: "cancel", id: e.data.id}));
214221
sendSocket(e.data.msg);
215222
}
216223

0 commit comments

Comments
 (0)