Structured Cloning vs Transferrable Objects (v3)

Revision 3 of this benchmark created on


Preparation HTML

<script>
var createWorker = function (script) {
    var blob = new Blob(
        ["(" + script.toString() + ")();"],
        {type: "application/javascript"}
    );
    return new Worker(window.URL.createObjectURL(blob));
};
var structuredCloningWorker = createWorker(function () {
    self.onmessage = function (event) {
        self.postMessage(event.data);
    };
});
var transferrableObjectsWorker = createWorker(function () {
    self.onmessage = function (event) {
        var data = new DataView(event.data);
        self.postMessage(event.data, [event.data]);
    };
});
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Structured cloning (1 element)
// async test
var data = new Array(1);
structuredCloningWorker.postMessage(data);
structuredCloningWorker.onmessage = function (event) {
    deferred.resolve();
};
ready
Structured cloning (100 elements)
// async test
var data = new Array(100);
structuredCloningWorker.postMessage(data);
structuredCloningWorker.onmessage = function (event) {
    deferred.resolve();
};
ready
Structured cloning (100,000 elements)
// async test
var data = new Array(100000);
structuredCloningWorker.postMessage(data);
structuredCloningWorker.onmessage = function (event) {
    deferred.resolve();
};
ready
Transferrable objects (1 element)
// async test
var data = new Uint8Array(1);
structuredCloningWorker.postMessage(data.buffer, [data.buffer]);
structuredCloningWorker.onmessage = function (event) {
    var result = new DataView(event.data);
    deferred.resolve();
};
ready
Transferrable objects (100 elements)
// async test
var data = new Uint8Array(100);
structuredCloningWorker.postMessage(data.buffer, [data.buffer]);
structuredCloningWorker.onmessage = function (event) {
    var result = new DataView(event.data);
    deferred.resolve();
};
ready
Transferrable objects (100,000 elements)
// async test
var data = new Uint8Array(100000);
structuredCloningWorker.postMessage(data.buffer, [data.buffer]);
structuredCloningWorker.onmessage = function (event) {
    var result = new DataView(event.data);
    deferred.resolve();
};
ready

Revisions

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