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.

add benches

+217
+178
tests/bench_radix3.js
··· 1 + import { Radix3 } from '../examples/server/radix3.js'; 2 + 3 + const router = new Radix3(); 4 + 5 + router.get('/', function () { 6 + return 'home'; 7 + }); 8 + router.get('/api', function () { 9 + return 'api'; 10 + }); 11 + router.get('/api/users', function () { 12 + return 'users'; 13 + }); 14 + router.get('/api/users/list', function () { 15 + return 'users list'; 16 + }); 17 + router.get('/api/posts', function () { 18 + return 'posts'; 19 + }); 20 + router.get('/api/posts/recent', function () { 21 + return 'recent posts'; 22 + }); 23 + router.get('/api/comments', function () { 24 + return 'comments'; 25 + }); 26 + router.get('/health', function () { 27 + return 'health'; 28 + }); 29 + router.get('/status', function () { 30 + return 'status'; 31 + }); 32 + router.get('/about', function () { 33 + return 'about'; 34 + }); 35 + router.get('/contact', function () { 36 + return 'contact'; 37 + }); 38 + router.get('/login', function () { 39 + return 'login'; 40 + }); 41 + router.get('/logout', function () { 42 + return 'logout'; 43 + }); 44 + router.get('/dashboard', function () { 45 + return 'dashboard'; 46 + }); 47 + router.get('/settings', function () { 48 + return 'settings'; 49 + }); 50 + 51 + // Parameterized routes 52 + router.get('/api/users/:id', function () { 53 + return 'user by id'; 54 + }); 55 + router.get('/api/users/:id/posts', function () { 56 + return 'user posts'; 57 + }); 58 + router.get('/api/users/:id/comments', function () { 59 + return 'user comments'; 60 + }); 61 + router.get('/api/posts/:id', function () { 62 + return 'post by id'; 63 + }); 64 + router.get('/api/posts/:id/comments', function () { 65 + return 'post comments'; 66 + }); 67 + router.get('/api/posts/:postId/comments/:commentId', function () { 68 + return 'specific comment'; 69 + }); 70 + router.get('/users/:userId/profile', function () { 71 + return 'user profile'; 72 + }); 73 + router.get('/products/:category/:id', function () { 74 + return 'product'; 75 + }); 76 + 77 + router.get('/static/*path', function () { 78 + return 'static file'; 79 + }); 80 + router.get('/assets/*file', function () { 81 + return 'asset file'; 82 + }); 83 + 84 + router.post('/api/users', function () { 85 + return 'create user'; 86 + }); 87 + router.put('/api/users/:id', function () { 88 + return 'update user'; 89 + }); 90 + router.delete('/api/users/:id', function () { 91 + return 'delete user'; 92 + }); 93 + router.patch('/api/users/:id', function () { 94 + return 'patch user'; 95 + }); 96 + 97 + console.log('Router tree:'); 98 + router.printTree(); 99 + console.log(''); 100 + 101 + const ITERATIONS = 100000; 102 + 103 + function bench(name, fn) { 104 + const start = performance.now(); 105 + for (let i = 0; i < ITERATIONS; i = i + 1) { 106 + fn(); 107 + } 108 + const end = performance.now(); 109 + 110 + const totalMs = end - start; 111 + const opsPerSec = Math.round(ITERATIONS / (totalMs / 1000)); 112 + const nsPerOp = Math.round((totalMs * 1000000) / ITERATIONS); 113 + 114 + console.log(name + ': ' + opsPerSec.toLocaleString() + ' ops/sec (' + nsPerOp + ' ns/op)'); 115 + } 116 + 117 + console.log('--- Static Route Lookup (' + ITERATIONS + ' iterations) ---'); 118 + bench('Lookup "/" (root)', function () { 119 + router.lookup('/'); 120 + }); 121 + bench('Lookup "/api" (short)', function () { 122 + router.lookup('/api'); 123 + }); 124 + bench('Lookup "/api/users" (medium)', function () { 125 + router.lookup('/api/users'); 126 + }); 127 + bench('Lookup "/api/posts/recent" (long)', function () { 128 + router.lookup('/api/posts/recent'); 129 + }); 130 + bench('Lookup "/dashboard" (single segment)', function () { 131 + router.lookup('/dashboard'); 132 + }); 133 + 134 + console.log('\n--- Parameterized Route Lookup (' + ITERATIONS + ' iterations) ---'); 135 + bench('Lookup "/api/users/123"', function () { 136 + router.lookup('/api/users/123'); 137 + }); 138 + bench('Lookup "/api/users/456/posts"', function () { 139 + router.lookup('/api/users/456/posts'); 140 + }); 141 + bench('Lookup "/api/posts/789/comments/42"', function () { 142 + router.lookup('/api/posts/789/comments/42'); 143 + }); 144 + bench('Lookup "/products/electronics/12345"', function () { 145 + router.lookup('/products/electronics/12345'); 146 + }); 147 + 148 + console.log('\n--- Wildcard Route Lookup (' + ITERATIONS + ' iterations) ---'); 149 + bench('Lookup "/static/css/style.css"', function () { 150 + router.lookup('/static/css/style.css'); 151 + }); 152 + bench('Lookup "/assets/images/logo.png"', function () { 153 + router.lookup('/assets/images/logo.png'); 154 + }); 155 + 156 + console.log('\n--- Different HTTP Methods (' + ITERATIONS + ' iterations) ---'); 157 + bench('GET /api/users/:id', function () { 158 + router.lookup('/api/users/123', 'GET'); 159 + }); 160 + bench('POST /api/users', function () { 161 + router.lookup('/api/users', 'POST'); 162 + }); 163 + bench('PUT /api/users/:id', function () { 164 + router.lookup('/api/users/123', 'PUT'); 165 + }); 166 + bench('DELETE /api/users/:id', function () { 167 + router.lookup('/api/users/123', 'DELETE'); 168 + }); 169 + 170 + console.log('\n--- Not Found Routes (' + ITERATIONS + ' iterations) ---'); 171 + bench('Lookup "/notfound"', function () { 172 + router.lookup('/notfound'); 173 + }); 174 + bench('Lookup "/api/unknown/path"', function () { 175 + router.lookup('/api/unknown/path'); 176 + }); 177 + 178 + console.log('\n=== Benchmark Complete ===');
+12
tests/tight_loop_class.js
··· 1 + class Foo { 2 + lookup(key) { 3 + return key; 4 + } 5 + } 6 + const foo = new Foo(); 7 + for (let i = 0; i < 40000; i = i + 1) { 8 + foo.lookup('a'); 9 + foo.lookup('b'); 10 + foo.lookup('c'); 11 + } 12 + console.log('Done!');
+15
tests/tight_loop_func.js
··· 1 + function Foo() { 2 + return { 3 + lookup: function (key) { 4 + return key; 5 + } 6 + }; 7 + } 8 + 9 + const foo = new Foo(); 10 + for (let i = 0; i < 40000; i = i + 1) { 11 + foo.lookup('a'); 12 + foo.lookup('b'); 13 + foo.lookup('c'); 14 + } 15 + console.log('Done!');
+12
tests/tight_loop_proto.js
··· 1 + function Foo() {} 2 + Foo.prototype.lookup = function (key) { 3 + return key; 4 + }; 5 + 6 + const foo = new Foo(); 7 + for (let i = 0; i < 40000; i = i + 1) { 8 + foo.lookup('a'); 9 + foo.lookup('b'); 10 + foo.lookup('c'); 11 + } 12 + console.log('Done!');