N = 100000 ---------- function (){ // 1. put // Simply append a new entry. // There will be no reordering since we simply append to the tail. for (var i=N; --i;) c.put('key'+i, i); } rss: +32,384 kB -- (6,472 kB -> 38,856 kB) vsize: +24,168 kB -- (3,040,680 kB -> 3,064,848 kB) heap total: +38,225 kB -- (3,813 kB -> 42,037 kB) heap used: +26,346 kB -- (1,584 kB -> 27,930 kB) -- 205ms -- ---------- function (){ // 2. get recent -> old // Get entries starting with newest, effectively reversing the list. // // a. For each get, a find is first executed implemented as a native object with // keys mapping to entries, so this should be reasonably fast as most native // objects are implemented as hash maps. // // b. For each get, the aquired item will be moved to tail which includes a // maximum of 7 assignment operations (minimum 3). for (var i=1,L=N+1; i 39,496 kB) vsize: +0 kB -- (3,063,280 kB -> 3,063,280 kB) heap total: +0 kB -- (39,669 kB -> 39,669 kB) heap used: +4,312 kB -- (24,747 kB -> 29,059 kB) -- 60ms -- ---------- function (){ // 3. get old -> recent // Get entries starting with oldest, effectively reversing the list. // // - Same conditions apply as for test 2. for (var i=1,L=N+1; i 43,136 kB) vsize: +2,332 kB -- (3,063,280 kB -> 3,065,612 kB) heap total: +2,190 kB -- (39,669 kB -> 41,860 kB) heap used: -792 kB -- (29,073 kB -> 28,281 kB) -- 88ms -- ---------- function (){ // 4. get missing // Get try to get entries not in the cache. // - Same conditions apply as for test 2, section a. for (var i=1,L=N+1; i 46,496 kB) vsize: +0 kB -- (3,065,612 kB -> 3,065,612 kB) heap total: +16,384 kB -- (41,860 kB -> 58,244 kB) heap used: -2,369 kB -- (28,289 kB -> 25,920 kB) -- 63ms -- ---------- function (){ // 5. put overflow // Overflow the cache with N more items than it can hold. // a. The complexity of put in this case should be: // ( + ) for (var i=N; --i;) c.put('key2_'+i, i); } rss: +6,224 kB -- (46,496 kB -> 52,720 kB) vsize: +0 kB -- (3,065,612 kB -> 3,065,612 kB) heap total: +0 kB -- (58,244 kB -> 58,244 kB) heap used: +12,893 kB -- (25,927 kB -> 38,820 kB) -- 146ms -- ---------- function (){ // 6. shift head -> tail // Remove all entries going from head to tail for (var i=1,L=N+1; i 52,724 kB) vsize: +0 kB -- (3,065,612 kB -> 3,065,612 kB) heap total: +0 kB -- (58,244 kB -> 58,244 kB) heap used: +0 kB -- (38,826 kB -> 38,827 kB) -- 36ms -- ---------- function (){ // 7. put // Simply put N new items into an empty cache with exactly N space. for (var i=N; --i;) c.put('key'+i, i); } rss: +6,280 kB -- (52,728 kB -> 59,008 kB) vsize: +0 kB -- (3,065,612 kB -> 3,065,612 kB) heap total: +0 kB -- (58,244 kB -> 58,244 kB) heap used: -1,906 kB -- (38,832 kB -> 36,926 kB) -- 104ms -- ---------- function (){ // 8. remove random // a. Most operations (which are not entries at head or tail) will cause closes // siblings to be relinked. for (var i=shuffledKeys.length, key; key = shuffledKeys[--i]; ) { c.remove('key'+i, i); } } rss: +4 kB -- (70,056 kB -> 70,060 kB) vsize: +0 kB -- (3,072,812 kB -> 3,072,812 kB) heap total: +0 kB -- (65,050 kB -> 65,050 kB) heap used: -11,301 kB -- (40,337 kB -> 29,036 kB) -- 93ms --