Check RegExp caching

Benchmark created on


Setup

const randomInt = (s, e) => s + (Math.random() * (e - s) | 0);
const randomLetter = () => String.fromCharCode(randomInt(65, 65 + 26));
const makeArray = (n, f) => [...new Array(n)].map((_, i) => f(i));
const randValues = makeArray(1000, () => makeArray(10, randomLetter).join(''));
const randPatterns = randValues.map((v) => [...v].map(x => `${x}{1,${randomInt(2,9)}}`).join(''));
const samePattern = makeArray(100, () => randPatterns[0] + '')
const differentPatterns = randPatterns.slice(1, 1 + 100)
const differentPatternsPrecompiled = randPatterns.slice(101, 101 + 100).map(s => new RegExp(s))
const valuesToTest = randValues.slice(201, 201 + 100)
const samePattern2 = makeArray(100, () => randPatterns[202])

Test runner

Ready to run.

Testing in
TestOps/sec
Different patterns (baseline)
valuesToTest.map((value, i) => (new RegExp(differentPatterns[i])).test(value))
ready
Same pattern (should have advantage if RegExp was implemented with pattern caching)
valuesToTest.map((value, i) => (new RegExp(samePattern[i])).test(value))
ready
Explicit caching
valuesToTest.map((value, i) => differentPatternsPrecompiled[i].test(value))
ready
Same pattern without string modification (just for kicks)
valuesToTest.map((value, i) => (new RegExp(samePattern2[i])).test(value))
ready

Revisions

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