define(function (){ var exports = {}, queue = [], now = function () { return performance.now() || Date.now(); }; exports.add_function_delayed = function(delay, callback, data) { queue.push({ func: callback, pushed: now(), delay: delay, data: data }); } exports.get = function () { return queue; } exports.run = function () { var i = 0, current, lrt_inner; while (current = queue[i++]) { if (now() - current.pushed > current.delay) { current.func(); queue.splice(i - 1, 1); } } if (queue.length) { // Waste a ms to prevent callstack overflow lrt_inner = now(); while (now() - lrt_inner < 1) { void 0; }; exports.run(); } } return exports; });