MIRROR: javascript for 馃悳's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 95 lines 2.8 kB view raw
1const now = () => typeof performance !== 'undefined' && performance.now ? performance.now() : Date.now(); 2 3function bench(name, fn, iters = 1) { 4 fn(); 5 const t0 = now(); 6 for (let i = 0; i < iters; i++) fn(); 7 const dt = now() - t0; 8 const per = (dt / iters).toFixed(3); 9 console.log(`${name}: ${dt.toFixed(2)} ms total, ${per} ms/iter (${iters} iters)`); 10} 11 12// simple escape sequences 13bench('simple escapes (\\n\\t\\r)', () => { 14 let s = ''; 15 for (let i = 0; i < 5000; i++) s = "hello\tworld\nfoo\rbar"; 16}, 50); 17 18bench('backslash + quote escapes', () => { 19 let s = ''; 20 for (let i = 0; i < 5000; i++) s = "it\'s a \"test\" with \\backslash"; 21}, 50); 22 23// hex escapes \xNN 24bench('hex escapes (\\xNN)', () => { 25 let s = ''; 26 for (let i = 0; i < 5000; i++) s = "\x41\x42\x43\x61\x62\x63\x00\xff"; 27}, 50); 28 29// unicode escapes \uNNNN 30bench('unicode 4-digit (\\uNNNN)', () => { 31 let s = ''; 32 for (let i = 0; i < 5000; i++) s = "\u0041\u00e9\u4e16\u754c\u0048\u0065"; 33}, 50); 34 35// unicode braced escapes \u{NNNNN} 36bench('unicode braced (\\u{N+})', () => { 37 let s = ''; 38 for (let i = 0; i < 5000; i++) s = "\u{41}\u{e9}\u{4e16}\u{1f600}\u{10ffff}"; 39}, 50); 40 41// null escape 42bench('null escape (\\0)', () => { 43 let s = ''; 44 for (let i = 0; i < 5000; i++) s = "abc\0def\0ghi"; 45}, 50); 46 47// mixed escapes in one string 48bench('mixed escapes', () => { 49 let s = ''; 50 for (let i = 0; i < 5000; i++) s = "tab\there\nnewline\r\x41\u0042\u{43}end\\done"; 51}, 50); 52 53// template literals with escapes 54bench('template literal escapes', () => { 55 let s = ''; 56 const x = 42; 57 for (let i = 0; i < 5000; i++) s = `\t\n\x41\u0042\u{43} val=${x}`; 58}, 50); 59 60// template literal with many interpolations 61bench('template interpolation heavy', () => { 62 let s = ''; 63 const a = 1, b = 2, c = 3, d = 4, e = 5; 64 for (let i = 0; i < 5000; i++) s = `${a}-${b}-${c}-${d}-${e}`; 65}, 50); 66 67// long string with scattered escapes 68bench('long string scattered escapes', () => { 69 let s = ''; 70 for (let i = 0; i < 2000; i++) s = "aaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbb\tcccccccccccccccc\rdddddddddddddddd\x41eeeeeeeeeeeeeeee\u0042ffffffffffffffff"; 71}, 50); 72 73// string concatenation with escapes 74bench('concat with escapes', () => { 75 let s = ''; 76 for (let i = 0; i < 2000; i++) s += "\n\t\x41\u0042"; 77}, 20); 78 79// octal escapes (legacy) 80bench('octal escapes', () => { 81 let s = ''; 82 for (let i = 0; i < 5000; i++) s = "\101\102\103\141\142\143"; 83}, 50); 84 85// form feed, vertical tab, backspace 86bench('rare escapes (\\v\\f\\b)', () => { 87 let s = ''; 88 for (let i = 0; i < 5000; i++) s = "a\vb\fc\bd"; 89}, 50); 90 91// no escapes baseline 92bench('no escapes (baseline)', () => { 93 let s = ''; 94 for (let i = 0; i < 5000; i++) s = "hello world this is a plain string with no escapes at all"; 95}, 50);