Skip to content

Instantly share code, notes, and snippets.

@joliss
Created March 3, 2014 21:27
Show Gist options
  • Save joliss/9334981 to your computer and use it in GitHub Desktop.
Save joliss/9334981 to your computer and use it in GitHub Desktop.
var outerVars = 10000
var iterations = 100000
src = ''
src += '(function() {'
for (var i = 0; i < outerVars / 3; i++) {
src += ' var num' + i + ' = 1\n'
src += ' var read' + i + ' = function() {\n'
// Prevent inlining by feigning recursion
src += ' if (!num' + i + ') read' + i + '()\n'
src += ' return num' + i + '\n'
src += ' }\n'
src += ' var write' + i + ' = function() {\n'
// Prevent inlining by feigning recursion
src += ' if (!num' + i + ') write' + i + '()\n'
src += ' num' + i + ' = num' + i + '\n'
src += ' }\n'
}
src += ' console.time("test")\n'
// On Node but not Chrome stable, performance is O(outerVars**2). It is not
// related to the number of iterations in this loop, as long as iterations >=
// 23557 (on my system). Below that magic number, execution time drops to O(1)
// <1ms.
src += ' for (var i = 0; i < ' + iterations + '; i++) {\n'
src += ' write0()\n'
src += ' read0()\n'
src += ' }\n'
src += ' console.timeEnd("test")\n'
src += '})()\n'
eval(src)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment