Skip to content

Instantly share code, notes, and snippets.

@brianmcd
Created August 5, 2011 00:24
Show Gist options
  • Save brianmcd/1126653 to your computer and use it in GitHub Desktop.
Save brianmcd/1126653 to your computer and use it in GitHub Desktop.
Contextify Performance
//Results from running test/jsdom/leak.js on brianmcd's fork of JSDOM which uses Contextify.
node --trace-gc leak.js
Scavenge 2.6 -> 2.3 MB, 1 ms.
Mark-sweep 3.5 -> 2.8 MB, 3 ms.
Scavenge 4.4 -> 3.9 MB, 0 ms.
Scavenge 5.9 -> 5.0 MB, 1 ms.
Mark-sweep 7.0 -> 4.8 MB, 10 ms.
Mark-sweep 8.7 -> 7.2 MB, 10 ms.
Mark-sweep 14.2 -> 9.8 MB, 16 ms.
Mark-sweep 16.8 -> 9.8 MB, 16 ms.
Mark-compact 16.8 -> 9.8 MB, 35 ms.
Mark-sweep 21.4 -> 16.8 MB, 26 ms.
Mark-sweep 27.0 -> 11.2 MB, 21 ms.
Mark-compact 22.9 -> 13.0 MB, 46 ms.
Mark-sweep 25.4 -> 12.4 MB, 22 ms.
Mark-compact 24.0 -> 19.4 MB, 63 ms.
Mark-sweep 32.9 -> 13.5 MB, 25 ms.
Mark-compact 26.1 -> 13.0 MB, 47 ms.
Mark-sweep 25.4 -> 12.4 MB, 21 ms.
Mark-compact 24.0 -> 19.4 MB, 63 ms.
Mark-sweep 32.9 -> 13.5 MB, 25 ms.
Mark-compact 26.1 -> 13.0 MB, 46 ms.
Mark-sweep 25.4 -> 12.4 MB, 22 ms.
Mark-compact 24.0 -> 19.4 MB, 62 ms.
Mark-sweep 32.9 -> 13.5 MB, 26 ms.
Mark-compact 26.1 -> 13.0 MB, 46 ms.
Mark-sweep 25.4 -> 12.4 MB, 22 ms.
Mark-compact 24.0 -> 19.4 MB, 64 ms.
Mark-sweep 32.9 -> 13.5 MB, 26 ms.
Mark-compact 26.1 -> 13.0 MB, 47 ms.
Mark-sweep 25.4 -> 12.4 MB, 22 ms.
Mark-compact 24.0 -> 19.4 MB, 62 ms.
Mark-sweep 33.0 -> 13.5 MB, 25 ms.
Mark-compact 26.1 -> 13.0 MB, 47 ms.
Mark-sweep 25.4 -> 12.4 MB, 22 ms.
Mark-compact 24.1 -> 18.1 MB, 59 ms.
Mark-sweep 31.2 -> 13.0 MB, 24 ms.
Mark-compact 25.4 -> 12.4 MB, 44 ms.
Mark-sweep 24.0 -> 16.8 MB, 26 ms.
Mark-sweep 29.9 -> 13.0 MB, 24 ms.
Mark-compact 25.4 -> 12.4 MB, 44 ms.
Mark-sweep 24.0 -> 19.4 MB, 29 ms.
Mark-sweep 32.5 -> 13.0 MB, 26 ms.
Mark-compact 25.4 -> 12.4 MB, 44 ms.
Mark-sweep 24.0 -> 19.4 MB, 29 ms.
Mark-sweep 32.5 -> 13.0 MB, 25 ms.
Mark-compact 25.4 -> 12.4 MB, 44 ms.
Mark-sweep 24.0 -> 18.1 MB, 28 ms.
Mark-sweep 31.2 -> 13.0 MB, 25 ms.
Mark-compact 25.4 -> 12.4 MB, 44 ms.
Mark-sweep 24.0 -> 19.4 MB, 29 ms.
Mark-sweep 32.5 -> 13.0 MB, 25 ms.
Mark-compact 25.4 -> 12.4 MB, 44 ms.
Mark-sweep 24.1 -> 19.4 MB, 29 ms.
Mark-sweep 32.5 -> 13.0 MB, 25 ms.
Mark-compact 25.4 -> 12.4 MB, 44 ms.
Mark-sweep 24.0 -> 19.4 MB, 29 ms.
Mark-sweep 32.5 -> 13.0 MB, 25 ms.
Mark-compact 25.4 -> 12.4 MB, 44 ms.
Mark-sweep 24.1 -> 19.4 MB, 29 ms.
Mark-sweep 32.5 -> 13.0 MB, 25 ms.
Mark-compact 25.4 -> 12.4 MB, 44 ms.
Mark-sweep 24.1 -> 19.4 MB, 29 ms.
Mark-sweep 32.6 -> 13.1 MB, 25 ms.
Mark-compact 25.4 -> 12.4 MB, 44 ms.
Mark-sweep 24.1 -> 19.4 MB, 32 ms.
Mark-sweep 32.6 -> 13.1 MB, 25 ms.
Mark-compact 25.4 -> 12.4 MB, 44 ms.
Mark-sweep 24.1 -> 19.4 MB, 29 ms.
Mark-sweep 32.6 -> 13.1 MB, 25 ms.
Mark-compact 25.4 -> 12.4 MB, 44 ms.
Mark-sweep 24.1 -> 19.5 MB, 29 ms.
Mark-sweep 32.6 -> 13.1 MB, 25 ms.
Mark-compact 25.4 -> 12.4 MB, 44 ms.
Mark-sweep 24.1 -> 18.2 MB, 28 ms.
Mark-sweep 31.3 -> 13.1 MB, 25 ms.
Mark-compact 25.5 -> 12.4 MB, 44 ms.
Mark-sweep 24.1 -> 19.5 MB, 29 ms.
Mark-sweep 32.4 -> 12.9 MB, 25 ms.
Mark-compact 24.5 -> 12.3 MB, 44 ms.
Mark-sweep 24.9 -> 13.1 MB, 23 ms.
Mark-sweep 25.5 -> 12.4 MB, 22 ms.
Mark-compact 24.1 -> 18.2 MB, 60 ms.
Mark-sweep 31.3 -> 13.1 MB, 25 ms.
Mark-compact 25.4 -> 12.3 MB, 44 ms.
Mark-sweep 24.0 -> 18.1 MB, 28 ms.
Mark-sweep 31.1 -> 13.0 MB, 24 ms.
Mark-compact 25.3 -> 12.3 MB, 44 ms.
Mark-sweep 24.0 -> 18.1 MB, 27 ms.
Mark-sweep 31.1 -> 13.0 MB, 25 ms.
Mark-compact 25.3 -> 12.3 MB, 44 ms.
Mark-sweep 24.0 -> 18.1 MB, 28 ms.
Mark-sweep 31.1 -> 13.0 MB, 25 ms.
Mark-compact 25.3 -> 12.3 MB, 44 ms.
Mark-sweep 24.0 -> 18.1 MB, 28 ms.
Mark-sweep 31.1 -> 13.0 MB, 25 ms.
Mark-compact 25.3 -> 12.3 MB, 44 ms.
Mark-sweep 24.0 -> 19.3 MB, 29 ms.
Mark-sweep 32.4 -> 13.0 MB, 25 ms.
Mark-compact 25.3 -> 12.3 MB, 44 ms.
^C
// This was run on brianmcd's fork of JSDOM which uses Contextify.
var fs = require('fs');
var jsdom = require('./lib/jsdom');
var jQuery = fs.readFileSync('jquery-1.6.2.js');
var html = fs.readFileSync('index.html');
var doc = jsdom.jsdom(html);
var window = doc.defaultView;
var start = Date.now();
window.run(jQuery, 'jquery-1.6.2.js');
for (var i = 0; i < 50000; i++) {
window.run("$('#test').text('HELLO')");
window.run("var x = $('#test').text()");
}
var end = Date.now();
console.log(window.x);
console.log("It took " + ((end - start)/1000) + " seconds.");
HELLO
It took 9.925 seconds.
<!-- The index.html used for testing the in JSDOM performance scripts -->
<html>
<head>
<title>Test page!</title>
</head>
<body>
<div id='test'></div>
</body>
</html>
// This was run on JSDOM @ 30bac996077fb
var fs = require('fs');
var vm = require('vm');
var jsdom = require('./lib/jsdom');
var jQuery = fs.readFileSync('jquery-1.6.2.js');
var html = fs.readFileSync('index.html');
var doc = jsdom.jsdom(html);
var window = doc.defaultView;
var start = Date.now();
vm.createScript(jQuery, "jquery-1.6.2.js").runInContext(window);
for (var i = 0; i < 50000; i++) {
vm.createScript("$('#test').text('HELLO')").runInContext(window);
vm.createScript("var x = $('#test').text()").runInContext(window);
}
var end = Date.now();
console.log(window.x);
console.log("It took " + ((end - start)/1000) + " seconds.");
HELLO
It took 22.072 seconds.
Output from running the benchmarks: in https://github.com/brianmcd/contextify-benchmarks
create_contexts: contextify elapsed time: 7.739 seconds.
Final memory usage:
RSS: 38.7734375
VSize: 634.13671875
HeapTotal: 52.932769775390625
HeapUsed: 2.2049713134765625
create_contexts: vm elapsed time: 8.327 seconds.
Final memory usage:
RSS: 47.296875
VSize: 619.91796875
HeapTotal: 41.213104248046875
HeapUsed: 2.1894760131835938
run_scripts_multiple_contexts: contextify elapsed time: 11.414 seconds.
Final memory usage:
RSS: 31.0546875
VSize: 626.44921875
HeapTotal: 45.70330810546875
HeapUsed: 2.2056732177734375
run_scripts_multiple_contexts: vm elapsed time: 8.261 seconds.
Final memory usage:
RSS: 34.03125
VSize: 632.41796875
HeapTotal: 53.119537353515625
HeapUsed: 2.1917800903320312
run_scripts_single_context: contextify elapsed time: 6.047 seconds.
Final memory usage:
RSS: 25.7421875
VSize: 616.23046875
HeapTotal: 19.55572509765625
HeapUsed: 2.3027801513671875
run_scripts_single_context: vm elapsed time: 7.643 seconds.
Final memory usage:
RSS: 35.37890625
VSize: 621.57421875
HeapTotal: 44.512786865234375
HeapUsed: 2.283447265625
// Results from running test/jsdom/leak.js on JSDOM @ 30bac996077fb
node --trace-gc leak.js
Scavenge 2.6 -> 2.3 MB, 1 ms.
Mark-sweep 3.5 -> 2.8 MB, 5 ms.
Scavenge 4.4 -> 3.9 MB, 0 ms.
Scavenge 5.9 -> 5.0 MB, 1 ms.
Mark-sweep 6.9 -> 4.8 MB, 7 ms.
Scavenge 8.0 -> 7.3 MB, 1 ms.
Mark-sweep 12.2 -> 9.0 MB, 13 ms.
Mark-sweep 16.0 -> 12.8 MB, 18 ms.
Scavenge 19.6 -> 17.7 MB, 2 ms.
Mark-sweep 24.2 -> 19.9 MB, 28 ms.
Scavenge 29.5 -> 26.1 MB, 6 ms.
Mark-sweep 27.5 -> 25.6 MB, 34 ms.
Mark-sweep 47.5 -> 37.6 MB, 53 ms.
Scavenge 56.9 -> 50.3 MB, 13 ms.
Mark-sweep 51.7 -> 48.7 MB, 63 ms.
Scavenge 71.3 -> 63.8 MB, 11 ms.
Mark-sweep 74.0 -> 66.3 MB, 86 ms.
Scavenge 88.4 -> 80.9 MB, 12 ms.
Mark-sweep 99.8 -> 88.7 MB, 116 ms.
Scavenge 112.1 -> 104.4 MB, 13 ms.
Scavenge 123.6 -> 117.1 MB, 13 ms.
Mark-sweep 134.3 -> 121.4 MB, 156 ms.
Scavenge 144.0 -> 136.4 MB, 13 ms.
Scavenge 150.1 -> 145.5 MB, 11 ms.
Mark-sweep 145.5 -> 141.2 MB, 175 ms.
Mark-compact 141.2 -> 141.1 MB, 429 ms.
Scavenge 143.0 -> 142.7 MB, 5 ms.
Scavenge 143.6 -> 143.3 MB, 3 ms.
Scavenge 144.8 -> 144.6 MB, 3 ms.
Scavenge 147.0 -> 146.5 MB, 4 ms.
Scavenge 148.9 -> 148.3 MB, 5 ms.
Scavenge 153.2 -> 151.4 MB, 6 ms.
Scavenge 156.2 -> 154.8 MB, 5 ms.
Scavenge 159.6 -> 158.2 MB, 5 ms.
Scavenge 168.3 -> 164.6 MB, 8 ms.
Scavenge 174.1 -> 171.0 MB, 8 ms.
Scavenge 180.5 -> 177.5 MB, 8 ms.
Mark-sweep 198.6 -> 181.9 MB, 232 ms.
Scavenge 208.0 -> 199.4 MB, 14 ms.
Scavenge 218.6 -> 212.1 MB, 16 ms.
Scavenge 231.3 -> 224.9 MB, 16 ms.
Mark-sweep 244.1 -> 227.6 MB, 286 ms.
Scavenge 253.6 -> 245.0 MB, 18 ms.
Scavenge 260.1 -> 254.8 MB, 13 ms.
Mark-sweep 257.2 -> 251.3 MB, 305 ms.
^C
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment