Uncached vs Cached Excel Cell IDs

Benchmark created by Matt on


Setup

var iterations = 100000;
    
    function uncached(row, column) {
        'use strict';
        var base = '';
    
        row += 1;
    
        do {
            let character = column % 26;
            column -= character;
            column /= 26;
            base = String.fromCharCode(character + 65) + base;
        } while (column);
    
        return base + row;
    }
    
    
    var cache = {};
    function cached(row, column) {
        'use strict';
        if (row in cache && column in cache[row]) return cache[row][column];
        var base = '';
    
        row += 1;
    
        do {
            let character = column % 26;
            column -= character;
            column /= 26;
            base = String.fromCharCode(character + 65) + base;
        } while (column);
    
        var output = base + row;
        if (!(row in cache)) cache[row] = {};
        cache[row][column] = output;
        return output;
    }
    
    
    var flatcache = {};
    function flatcached(row, column) {
        'use strict';
        var id = row.toString() + '_' + column.toString()
        if (id in flatcache) return flatcache[id];
        var base = '';
    
        row += 1;
    
        do {
            let character = column % 26;
            column -= character;
            column /= 26;
            base = String.fromCharCode(character + 65) + base;
        } while (column);
    
        var output = base + row;
        flatcache[id] = output;
        return output;
    }

Test runner

Ready to run.

Testing in
TestOps/sec
Uncached
var ids = [];

for (var i = 0; i < iterations; i++) {
  ids.push(uncached(Math.random() * 250 | 0, Math.random() * 250 | 0));
}
ready
Cached
var ids = [];

for (var i = 0; i < iterations; i++) {
  ids.push(cached(Math.random() * 250 | 0, Math.random() * 250 | 0));
}
ready
Flat Cached
var ids = [];

for (var i = 0; i < iterations; i++) {
  ids.push(flatcached(Math.random() * 250 | 0, Math.random() * 250 | 0));
}
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.