WarsawJS Presentation Template

We talk about JavaScript. Each month in Warsaw, Poland.

"Concurrent programming in JavaScript"[PL]

Bartłomiej Sobczuk

Is JavaScript single threaded?

Lets find out...

Simple code

                console.log('Hey');
                sweat();
                console.log('There');
            

Now with timeout

                console.log('Hey');
                setTimeout(function (){
                  sweat();
                }, 0);
                console.log('There');
            

So, is setTimeout not in main thread or what?

Lets process the 'click'

2. Web APIs

3 - 4 Event queue and Event loop

5. JavaScript Runtime

Single threaded, Synchronous, Non-blocking

Web Workers does not have acces to:

Communication throught postMessage()

Communication throught postMessage() part 2

Simple Worker doing much operations




Worker Said?

Simple Worker Code

                var workerPar = document.getElementById('#workerPar');
                var worker = new Worker('bigLoop.js');
                worker.addEventListener('message', function (e){   
                  workerPar.innerHTML = e.data;
                });
            

bigLoop.js file

                self.addEventListener('message', function(e) {
                  for (var i = 0; i <= 1000000000; i++){
                      var j = i;
                  }
                  var x = e.data + j;
                  self.postMessage(x);
                });
            

Same worker using blobs

                var blob = new Blob(["String with code from file"]);
                var blobURL = window.URL.createObjectURL(blob);
                var bloWorker = new Worker(blobURL);
                blobWorker.addEventListener('message', function (e){   
                  workerPar.innerHTML = e.data;
                });
            

Error Handling:

                badWorker.addEventListener('error', function (e){   
                  console.log(e.lineno + ' ' + e.filename + ' ' + e.message);
                });
            

Error file code

                self.addEventListener('message', function(e){
                // y = undefined;
                  var x = e.data / y;
                  self.postMessage(x);
                });
            

Error example:

Worker Said?

XHR

                importScripts('xhr.js');
                self.addEventListener('message', function(e){
                    var a = JSON.parse(e.data);
                    var request = makeRequest(a.method, a.url);
                    request.then(function (response){
                        self.postMessage(response);
                    }).;
                });
            

Promised XHR


Worker Get?

Image processing

wave


Libraries

Thanks

Fork me on Github