O JavaScript padrão é uni-threaded: ele pode executar apenas um programa em uma CPU (core).
Para o que você está descrevendo, você provavelmente teria que particionar seu conjunto de dados em partes e criar um JavaScript Web Worker > em separado, executando seu algoritmo para processar cada fragmento. Isso pressupõe que você tenha um conjunto de dados estruturalmente uniforme. (Cuidado com as condições de contorno).
O uso de Web Workers requer efetivamente a compreensão de como reescrever algoritmos seriais como paralelos e outros aspectos da programação multi-thread - todos os quais exigem habilidades avançadas de programação.
Os Web Workers JavaScript são unidades de execução independentes autônomas (threads), separadas e isoladas do programa principal e de uma outra. A comunicação entre o programa principal e os Trabalhadores Web, e entre os próprios Trabalhadores da Web, é através de mensagens de dados baseadas em eventos.
O sistema operacional do host pode executar threads individuais do Web Worker em núcleos separados, permitindo até 100% de utilização da capacidade da CPU.
Os Web Workers são projetados para serem apenas unidades de computação. Eles não têm acesso ao DOM ou a qualquer componente do navegador relacionado ao DOM, como janela . (Isso evita todos os tipos de possíveis problemas com a serialização do acesso a eles.) Assim, qualquer saída a ser exibida deve ser passada de volta de um Worker para o thread principal.
Todos os navegadores recentes oferecem algum grau de suporte para os Web Workers. A tabela na parte inferior da página da API da Web Worker da Mozilla, link , mostra o navegador individual e suporte de versão para os vários recursos do Web Worker.
Uma boa cartilha sobre o uso de Web Workers: