HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
icodeforlove
task.js
JavaScript2016–2019
icodeforlove / task.js

task.js

:zap: Simplified interface for getting CPU intensive code to run on all cores (node.js, and web)

4Distinct people
9Mentions
0Explicit recommenders
414GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

:zap: Simplified interface for getting CPU intensive code to run on all cores (node.js, and web)

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:03:16 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year9 dated mentions

Observed mentions: 2016-07-24 01:34:05 UTC to 2019-09-01 09:25:02 UTC.

02462016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 6 mentions; 3 submissions, 3 comments20162017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments20172018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2019

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC633
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC202
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC000
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC101

What Hacker News says

9 sources
This is how Task.js functions https://github.com/icodeforlove/task.js Which works on Node.js, and the browser. (Supports fork, worker_threads, and WebWorkers) The advantage of this is that the workers become generic enough to run anything. Instead of having to have many "specialized" workers. Performance-wise eval is not slow, and it is encapsulated inside of the actual worker. Obviously you don't want a user to be able to control any input. But for most cases we are talking about code related to processing, which involves hard coded functions, and the "external-data" being ArrayBuffers.
In Making Web-Workers Async Iterables
Well for one workers do not share scope, and at the moment sharing memory between the two is quite difficult. Second is race conditions like @btilly explained. Right now workers are mainly used for extreme situations and eventually make it into libraries that others use. I have created a library called Task.js that surfaces this idea into a promise compatible interface where you can just convert a pure function into a worker function. The end result is a promise supported function thats sends the function to a worker with your provided args and resolves when its done (also supports multiple workers and automatic queuing). https://github.com/icodeforlove/task.js
In JavaScript in Parallel: Web Workers and SharedArrayBuffer
For anyone that is interested in easily using WebWorkers for this sort of work please check out task.js (https://github.com/icodeforlove/task.js). It allows you to send a pure function with provided arguments to a autoscaling WebWorker pool. Heres a similar demo (http://s.codepen.io/icodeforlove/debug/ZOjBBB , you can bring all cores to 100% usage) But for this specific scenario it could have been coded like this using task.js (vs http://afshinm.github.io/50k/worker.js which is not reusable) // mentioned sort function (close to exact code from site) function bubbleSort(a) { var swapped; do { swapped = false; for (var i=0; i < a.length-1; i++) { if (a[i] > a[i+1]) { var temp = a[i]; a[i] = a[i+1]; a[i+1] = te
Read the rest
mp; swapped = true; } } } while (swapped); return a; } // turn the function into a worker task const bubbleSortAsync = task.wrap(bubbleSort); // this now runs in a autoscaling worker pool (first run includes worker initialization time) console.time('BubbleSort Worker'); bubbleSortAsync([9,1,2,3]).then(sortedArray => { console.timeEnd('BubbleSort Worker'); }, error => { /* this is extra credit, yes we can handle worker errors */ }); Also when dealing with large messages you can use transferables (https://developer.mozilla.org/en-US/docs/Web/API/Transferabl...). The web has really came a long way, this kind of stuff is extremely useful, for instance you could use it when processing pixel data for a 10MP image with a RGBA array of 40M. In that scenario the work can be spread across all cores, and blows away the alternate approach of just locking the UI. In that case if you were using task.js you would just chunk the work, and use a async control flow library like bluebird. // in this situation all cores would be at 100% without locking the UI let processedPixels = await Promise.map(chunks, processPixelChunkAsync);
In Show HN: Sorting 50K Array, HTML5 Web Worker Demo

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.