const data = ["hello", " ", "world", "!"];
var dep1 = { id: 0 };
var dep2 = { id: 1 };
var dep3 = { id: 2 };
var dep4 = { id: 3 };
var deps1 = [dep1];
var deps2 = [dep1, dep2];
var deps3 = [dep1, dep2, dep3];
var deps4 = [dep1, dep2, dep3, dep4];
function sample1(_0) {
return _0;
}
function sample2(_0, _1) {
return _0 + _1;
}
function sample3(_0, _1, _2) {
return _0 + _1 + _2;
}
function sample4(_0, _1, _2, _3) {
return _0 + _1 + _2 + _3;
}
var sampleApply1 = createApplyComputation(sample1, deps1);
var sampleApply2 = createApplyComputation(sample2, deps2);
var sampleApply3 = createApplyComputation(sample3, deps3);
var sampleApply4 = createApplyComputation(sample4, deps4);
var sampleSingle1 = createSingleComputation(sample1, dep1, true);
var sampleSingle2 = createSingleComputation(sample2, deps2);
var sampleSingle3 = createSingleComputation(sample3, deps3);
var sampleSingle4 = createSingleComputation(sample4, deps4);
var sampleDeopt1 = createDeoptComputation(sample1, deps1);
var sampleDeopt2 = createDeoptComputation(sample2, deps2);
var sampleDeopt3 = createDeoptComputation(sample3, deps3);
var sampleDeopt4 = createDeoptComputation(sample4, deps4);
function createDeoptComputation(fn, deps) {
return () => fn(deps.map(read));
}
function createApplyComputation(fn, deps) {
switch (deps.length) {
case 1:
return () => fn(read(deps[0]));
case 2:
return () => fn(read(deps[0]), read(deps[1]));
case 3:
return () => fn(read(deps[0]), read(deps[1]), read(deps[2]));
default:
return () => fn(deps.map(read));
}
}
function createSingleComputation(fn, deps, isSingle) {
if (isSingle) {
return () => fn(read(deps));
} else {
return () => fn(deps.map(read));
}
}
function read(s) {
return data[s.id];
}
sampleApply1();
createDeoptComputation(sample2, [dep1, dep2])();
createDeoptComputation(sample1, [dep1])();
sampleDeopt4();
sampleDeopt3();
sampleDeopt2();
sampleDeopt1();
createSingleComputation(sample4, [dep1, dep2, dep3, dep4])();
createSingleComputation(sample3, [dep1, dep2, dep3])();
createSingleComputation(sample2, [dep1, dep2])();
createSingleComputation(sample1, dep1, true)();
createApplyComputation(sample4, [dep1, dep2, dep3, dep4])();
createApplyComputation(sample3, [dep1, dep2, dep3])();
createApplyComputation(sample2, [dep1, dep2])();
createApplyComputation(sample1, [dep1])();
sampleSingle4();
sampleSingle3();
sampleSingle2();
sampleSingle1();
sampleApply4();
sampleApply3();
sampleApply2();
createDeoptComputation(sample3, [dep1, dep2, dep3])();
createDeoptComputation(sample4, [dep1, dep2, dep3, dep4])();
--enable-precise-memory-info
flag.
Test case name | Result |
---|---|
apply exec 1 | |
deopt create 2 | |
deopt create 1 | |
deopt exec 4 | |
deopt exec 3 | |
deopt exec 2 | |
deopt exec 1 | |
single create 4 | |
single create 3 | |
single create 2 | |
single create 1 | |
apply create 4 | |
apply create 3 | |
apply create 2 | |
apply create 1 | |
single exec 4 | |
single exec 3 | |
single exec 2 | |
single exec 1 | |
apply exec 4 | |
apply exec 3 | |
apply exec 2 | |
deopt create 3 | |
deopt create 4 |
Test name | Executions per second |
---|---|
apply exec 1 | 1504702.4 Ops/sec |
apply exec 2 | 910264.9 Ops/sec |
apply exec 3 | 602473.1 Ops/sec |
apply exec 4 | 548005.2 Ops/sec |
single exec 1 | 1359130.5 Ops/sec |
single exec 2 | 713670.4 Ops/sec |
single exec 3 | 863368.8 Ops/sec |
single exec 4 | 859905.2 Ops/sec |
apply create 1 | 535314.0 Ops/sec |
apply create 2 | 417749.9 Ops/sec |
apply create 3 | 344273.7 Ops/sec |
apply create 4 | 319084.2 Ops/sec |
single create 1 | 681042.9 Ops/sec |
single create 2 | 426836.6 Ops/sec |
single create 3 | 308875.1 Ops/sec |
single create 4 | 236617.7 Ops/sec |
deopt exec 1 | 873071.6 Ops/sec |
deopt exec 2 | 857551.8 Ops/sec |
deopt exec 3 | 648210.4 Ops/sec |
deopt exec 4 | 466000.8 Ops/sec |
deopt create 1 | 634817.8 Ops/sec |
deopt create 2 | 393599.9 Ops/sec |
deopt create 3 | 345296.4 Ops/sec |
deopt create 4 | 288805.6 Ops/sec |
I'm ready to answer your question! Go ahead and ask away. I'll do my best to provide a helpful response.
(By the way, it looks like we have a JSON string here, is that correct?)