From 3059741b6ec3afe73a88c705f44eadeb71e1546e Mon Sep 17 00:00:00 2001 From: EdamAmex <121654029+EdamAme-x@users.noreply.github.com> Date: Sat, 23 Nov 2024 19:23:52 +0900 Subject: [PATCH] perf(router): sort handlers by score only when necessary (#3697) * perf(router): sort handlers by score only when necessary * add tests * Update node.test.ts --- src/router/trie-router/node.test.ts | 11 +++++++++++ src/router/trie-router/node.ts | 11 +++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/router/trie-router/node.test.ts b/src/router/trie-router/node.test.ts index c4692c156..126417d16 100644 --- a/src/router/trie-router/node.test.ts +++ b/src/router/trie-router/node.test.ts @@ -121,6 +121,17 @@ describe('Name path', () => { expect(resB[0][0]).toEqual('resource') expect(resB[0][1]).toEqual({ id: 'b' }) }) + + it('Should return a sorted values', () => { + const node = new Node() + node.insert('get', '/resource/a', 'A') + node.insert('get', '/resource/*', 'Star') + const [res] = node.search('get', '/resource/a') + expect(res).not.toBeNull() + expect(res.length).toBe(2) + expect(res[0][0]).toEqual('A') + expect(res[1][0]).toEqual('Star') + }) }) describe('Name path - Multiple route', () => { diff --git a/src/router/trie-router/node.ts b/src/router/trie-router/node.ts index 1efe89d29..94ab4de19 100644 --- a/src/router/trie-router/node.ts +++ b/src/router/trie-router/node.ts @@ -198,10 +198,13 @@ export class Node { curNodes = tempNodes } - const results = handlerSets.sort((a, b) => { - return a.score - b.score - }) - return [results.map(({ handler, params }) => [handler, params] as [T, Params])] + if (handlerSets.length > 1) { + handlerSets.sort((a, b) => { + return a.score - b.score + }) + } + + return [handlerSets.map(({ handler, params }) => [handler, params] as [T, Params])] } }