Web Worker JSON vs String (v3)

Revision 3 of this benchmark created by bracket on


Description

Comparing the run times of web workers when passing a JSON object vs passing a string that must be parsed in order to be worked with, and now also compared to using transferable object.

Setup

var parseCode = "self.onmessage = function (e){var s = e.data.string; self.postMessage(s); };";
    
    var passCode = "self.onmessage = function (e) { var parts = e.data.split(','); self.postMessage(parts[0]); }";
    
    var transferCode = "self.onmessage = function (e) { self.postMessage(e.data, [e.data]); }";
    
    var parseBlob = new Blob([parseCode], {
      type: 'text/javascript'
    });
    
    var passBlob = new Blob([passCode], {
      type: 'text/javascript'
    });
    
    var transferBlob = new Blob([transferCode], {
      type: 'text/javascript'
    });
    var aWorker = new Worker(window.URL.createObjectURL(parseBlob));
    var bWorker = new Worker(window.URL.createObjectURL(passBlob));
    var cWorker = new Worker(window.URL.createObjectURL(transferBlob));
    
    // warm up the transfer based worker
    var transferObject = new ArrayBuffer(32);
    
    cWorker.postMessage(transferObject, [transferObject]);

Teardown


    aWorker.terminate();
    bWorker.terminate();
    cWorker.terminate();
  

Test runner

Ready to run.

Testing in
TestOps/sec
Pass JSON
var jsonObject = { string: 'hello' };

aWorker.postMessage(jsonObject);
ready
Pass String
var stringObject = 'hello';

bWorker.postMessage(stringObject);
ready
Transfer Object
var transferObject = new ArrayBuffer(32);

cWorker.postMessage(transferObject, [transferObject]);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.

  • Revision 1: published by lexander on
  • Revision 2: published by lexander on
  • Revision 3: published by bracket on
  • Revision 4: published by fafsdfssad on
  • Revision 5: published on