Предполагая, что вы делаете сложные вычисления, которые не могут быть разбиты на более мелкие куски, веб-работники кажутся мне решением.
Это механизм javascript для запуска кода в отдельном потоке, но вы должны общаться с этим потоком (называемым работником) через обмен сообщениями:
https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers
var myWorker = new Worker('worker.js');
first.onchange = function() {
myWorker.postMessage([first.value,second.value]);
console.log('Message posted to worker');
}
second.onchange = function() {
myWorker.postMessage([first.value,second.value]);
console.log('Message posted to worker');
}
myWorker.onmessage = function(e) {
result.textContent = e.data;
console.log('Message received from worker');
}
В рабочем:
onmessage = function(e) {
console.log('Message received from main script');
var workerResult = 'Result: ' + (e.data[0] * e.data[1]);
console.log('Posting message back to main script');
postMessage(workerResult);
}