Skip to content

perf: use insertion sort algorithm#2706

Merged
mcollina merged 2 commits intonodejs:mainfrom
tsctx:perf/use-insertion-sort-algorithm
Feb 6, 2024
Merged

perf: use insertion sort algorithm#2706
mcollina merged 2 commits intonodejs:mainfrom
tsctx:perf/use-insertion-sort-algorithm

Conversation

@tsctx
Copy link
Copy Markdown
Member

@tsctx tsctx commented Feb 6, 2024

Benchmark Script
import { bench, run } from 'mitata'
import { Headers } from '../lib/fetch/headers.js'
import symbols from '../lib/core/symbols.js'

const headers = new Headers(
  [
    'Sec-CH-Prefers-Color-Scheme',
    'Keep-Alive',
    'TE',
    'Sec-CH-UA-Arch',
    'Max-Forwards',
    'DPR',
    'Expect',
    'Tk',
    'DNT',
    'Link',
    'Timing-Allow-Origin',
    'Device-Memory',
    'Alt-Svc',
    'Authorization'
  ].map((v) => [v, ''])
)

const headersList = headers[symbols.kHeadersList]

const kHeadersSortedMap = Reflect.ownKeys(headersList).find(
  (c) => String(c) === 'Symbol(headers map sorted)'
)

bench('Headers@@iterator', () => {
  headersList[kHeadersSortedMap] = null
  return [...headers]
})

await run()
  • main
benchmark              time (avg)             (min … max)       p75       p99      p999       
--------------------------------------------------------- -----------------------------       
Headers@@iterator   8,767 ns/iter   (5,300 ns … 3,360 µs)  6,600 ns   23.5 µs  234.8 µs
  • this patch
benchmark              time (avg)             (min … max)       p75       p99      p999       
--------------------------------------------------------- -----------------------------       
Headers@@iterator   7,671 ns/iter   (4,800 ns … 2,735 µs)  5,900 ns   21.1 µs   95.2 µs

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants