I am trying to get a better performance on my JavaScript-function. I draw with myPopulation=50.000 dots on a canvas and it takes apros 230ms. As I have this in another loop with a frequence of 100ms, I get a delay due to the below function.
function drawThis(intervals) {
    ctx.clearRect(0, 0, myWidth, myHeight);
    ctx.beginPath();
    for (var i = 0; i < myPopulation; i++) {
        ctx.arc(persons[i].posX, persons[i].posY, 2, 0, 2 * Math.PI);
        if (persons[i].infected) {
            ctx.fillStyle = "#FF0000";
        }
        else {
            ctx.fillStyle = "#000000";
        }
        if (i < myPopulation - 1) {
            ctx.moveTo(persons[i + 1].posX, persons[i + 1].posY);
        }
    }
    ctx.fill();
My idea was to divide myPopulation in equal intervals with a helper function like
var myIntervals = divideRangeInNParts(0, myPopulation, intervals);
and to them parallel. So the pseudo-code would be:
divide myPopulation in equal parts
drawThis(interval[0][0], interval[0][1]);
drawThis(interval[1][0], interval[1][1]);
drawThis(interval[2][0], interval[2][1]);
drawThis(interval[3][0], interval[3][1]);
[...]
wait for all of them to finish
continue
I have read a lot about JavaScript as a single-threaded language, Promises, Web Workders etc., but I could not find any solution which suits my problem.
Any idea or hint? I am new here and if there is any problem with my question, please tell me also. Thanks in advance
