hckhanh
fast-url
BlogDocsChangelog

GitHub Actions run

3 hours ago 4a8a541 copilot/optimize-library-performance pull_request

Compare

Base
Search a run

Head
Optimize core URL building functions (20-40% performance improvement)
#81
copilot/optimize-library-performance
3 hours ago
CPU Simulation

Compare
Suggested base runs:

Skipped (22)

Benchmarks

Ten parameters
benchmark/subst.bench.ts::subst benchmarks::Parameter count scaling
96.9 µs
Both parts have separator at boundary
benchmark/join.bench.ts::join benchmarks::Basic joins
17.3 µs
Simple join without separators at boundaries
benchmark/join.bench.ts::join benchmarks::Basic joins
25.1 µs
Join with separator at start of second part
benchmark/join.bench.ts::join benchmarks::Basic joins
15.7 µs
Medium array (10 items)
benchmark/querystring.bench.ts::stringify benchmarks::Array values
79.5 µs
Ampersand separator
benchmark/join.bench.ts::join benchmarks::Different separators
13.8 µs
Join with separator at end of first part
benchmark/join.bench.ts::join benchmarks::Basic joins
15.7 µs
Pipe separator
benchmark/join.bench.ts::join benchmarks::Different separators
13.8 µs
Comma separator
benchmark/join.bench.ts::join benchmarks::Different separators
13.8 µs
Three parameters (original)
benchmark/subst.bench.ts::subst benchmarks::Parameter count scaling
69.7 µs
Two parameters
benchmark/subst.bench.ts::subst benchmarks::Parameter count scaling
68.3 µs
Question mark separator
benchmark/join.bench.ts::join benchmarks::Different separators
13.8 µs
Small array (3 items)
benchmark/querystring.bench.ts::stringify benchmarks::Array values
46.7 µs
Single parameter
benchmark/subst.bench.ts::subst benchmarks::Parameter count scaling
68.3 µs
Deep nesting with IDs
benchmark/subst.bench.ts::subst benchmarks::Real-world patterns
66.2 µs
Slash separator
benchmark/join.bench.ts::join benchmarks::Different separators
13.9 µs
Both parts empty
benchmark/join.bench.ts::join benchmarks::Edge cases
12.1 µs
Date-based path
benchmark/subst.bench.ts::subst benchmarks::Real-world patterns
74.7 µs
Unicode in values
benchmark/subst.bench.ts::subst benchmarks::Special characters
60.6 µs
Versioned API endpoint
benchmark/subst.bench.ts::subst benchmarks::Real-world patterns
66.9 µs
Multiple separators in content
benchmark/join.bench.ts::join benchmarks::Edge cases
13.9 µs
Long parameter names
benchmark/subst.bench.ts::subst benchmarks::Parameter name patterns
66.6 µs
First part empty
benchmark/join.bench.ts::join benchmarks::Edge cases
13.3 µs
Short parameter names
benchmark/subst.bench.ts::subst benchmarks::Parameter name patterns
64.1 µs
Multiple arrays
benchmark/querystring.bench.ts::stringify benchmarks::Array values
54.6 µs
Empty arrays
benchmark/querystring.bench.ts::stringify benchmarks::Edge cases
46.4 µs
Values with spaces
benchmark/subst.bench.ts::subst benchmarks::Special characters
60.9 µs
Medium object (10 params)
benchmark/querystring.bench.ts::stringify benchmarks::Comparison scenarios
30.7 µs
REST API resource path
benchmark/subst.bench.ts::subst benchmarks::Real-world patterns
60.6 µs
Long parameter values
benchmark/subst.bench.ts::subst benchmarks::Special characters
61.7 µs
Values with special chars
benchmark/subst.bench.ts::subst benchmarks::Special characters
64.9 µs
Large object (16 params with arrays)
benchmark/querystring.bench.ts::stringify benchmarks::Comparison scenarios
42.1 µs
CamelCase parameter names
benchmark/subst.bench.ts::subst benchmarks::Parameter name patterns
67.4 µs
Join URL path with query string
benchmark/join.bench.ts::join benchmarks::Query string separators
13.6 µs
Complex multi-level template
benchmark/subst.bench.ts::subst benchmarks::Template complexity
73 µs
Empty string values
benchmark/querystring.bench.ts::stringify benchmarks::Edge cases
52.3 µs
Second part empty
benchmark/join.bench.ts::join benchmarks::Edge cases
13.5 µs
Long strings with separator
benchmark/join.bench.ts::join benchmarks::Edge cases
14.9 µs
Underscore parameter names
benchmark/subst.bench.ts::subst benchmarks::Parameter name patterns
63.7 µs
Parameter at beginning
benchmark/subst.bench.ts::subst benchmarks::Template patterns
61.1 µs
Join empty first part with query
benchmark/join.bench.ts::join benchmarks::Query string separators
13.4 µs
Null and undefined values
benchmark/querystring.bench.ts::stringify benchmarks::Edge cases
59.5 µs
Small object (2 params)
benchmark/querystring.bench.ts::stringify benchmarks::Comparison scenarios
23.9 µs
Special numeric values
benchmark/querystring.bench.ts::stringify benchmarks::Edge cases
94.8 µs
Very deep template (8 levels)
benchmark/subst.bench.ts::subst benchmarks::Template complexity
83.3 µs
Medium complexity template
benchmark/subst.bench.ts::subst benchmarks::Template complexity
64.4 µs
Nested resource path
benchmark/subst.bench.ts::subst benchmarks::Real-world patterns
64.6 µs
Join with leading ampersand
benchmark/join.bench.ts::join benchmarks::Query string separators
20.2 µs
Consecutive parameters
benchmark/subst.bench.ts::subst benchmarks::Template patterns
66.3 µs
Join URL with trailing slash
benchmark/join.bench.ts::join benchmarks::URL path separators
15 µs
Parameter at end
benchmark/subst.bench.ts::subst benchmarks::Template patterns
62.3 µs
Deep path with 5 parameters
benchmark/urlcat.bench.ts::createUrl benchmarks::Complex cases
107.6 µs
Join URL parts both with slash
benchmark/join.bench.ts::join benchmarks::URL path separators
16.5 µs
Join URL parts with slash
benchmark/join.bench.ts::join benchmarks::URL path separators
15 µs
Empty object
benchmark/querystring.bench.ts::stringify benchmarks::Parameter count scaling
16.8 µs
Single parameter
benchmark/querystring.bench.ts::stringify benchmarks::Parameter count scaling
55.5 µs
Simple single-segment template
benchmark/subst.bench.ts::subst benchmarks::Template complexity
59.1 µs
Array values
benchmark/query.bench.ts::query benchmarks::Different value types
66.6 µs
Five parameters
benchmark/querystring.bench.ts::stringify benchmarks::Parameter count scaling
55.4 µs
Base template only (no path)
benchmark/urlcat.bench.ts::createUrl benchmarks::Edge cases
86.2 µs
Long template with many segments
benchmark/subst.bench.ts::subst benchmarks::Template patterns
73.2 µs
Large query string (15 params)
benchmark/urlcat.bench.ts::createUrl benchmarks::Complex cases
142.7 µs
Two parameters
benchmark/querystring.bench.ts::stringify benchmarks::Parameter count scaling
51.1 µs
Empty params object
benchmark/urlcat.bench.ts::createUrl benchmarks::Edge cases
24.6 µs
Complex URL with many params (original test)
benchmark/urlcat.bench.ts::createUrl benchmarks::Complex cases
169.4 µs
Twenty parameters
benchmark/querystring.bench.ts::stringify benchmarks::Parameter count scaling
100.1 µs
Ten parameters
benchmark/querystring.bench.ts::stringify benchmarks::Parameter count scaling
70.6 µs
Array in query params
benchmark/urlcat.bench.ts::createUrl benchmarks::Edge cases
78.3 µs
Parameters with static segments
benchmark/subst.bench.ts::subst benchmarks::Template patterns
64.9 µs
Boolean and number params
benchmark/urlcat.bench.ts::createUrl benchmarks::Edge cases
100.3 µs
Resource with ID and nested resource
benchmark/urlcat.bench.ts::createUrl benchmarks::Real-world patterns
90.2 µs
Fifty parameters
benchmark/querystring.bench.ts::stringify benchmarks::Parameter count scaling
195.2 µs
BigInt values
benchmark/query.bench.ts::query benchmarks::Different value types
68.8 µs
Multiple query params (5 params)
benchmark/urlcat.bench.ts::createUrl benchmarks::Medium complexity
102.7 µs
Join query parts with ampersand
benchmark/join.bench.ts::join benchmarks::Query string separators
15 µs
Path params with special characters
benchmark/urlcat.bench.ts::createUrl benchmarks::Medium complexity
95.6 µs
Boolean values only
benchmark/query.bench.ts::query benchmarks::Different value types
61.2 µs
Join deep URL paths
benchmark/join.bench.ts::join benchmarks::URL path separators
16.2 µs
Mixed types
benchmark/query.bench.ts::query benchmarks::Different value types
71.7 µs
Base URL with trailing slash + path
benchmark/urlcat.bench.ts::createUrl benchmarks::Simple cases
70.9 µs
Analytics tracking params
benchmark/querystring.bench.ts::stringify benchmarks::Real-world use cases
78.9 µs
Two path params + two query params
benchmark/urlcat.bench.ts::createUrl benchmarks::Medium complexity
102.5 µs
REST API endpoint with pagination
benchmark/urlcat.bench.ts::createUrl benchmarks::Real-world patterns
78.3 µs
Form submission data
benchmark/querystring.bench.ts::stringify benchmarks::Real-world use cases
68.7 µs
Single parameter
benchmark/query.bench.ts::query benchmarks::Parameter count scaling
58.6 µs
Number values only
benchmark/query.bench.ts::query benchmarks::Different value types
57.4 µs
Twenty parameters
benchmark/query.bench.ts::query benchmarks::Parameter count scaling
98.8 µs
API query with includes
benchmark/query.bench.ts::query benchmarks::Real-world patterns
63.1 µs
URL with port number
benchmark/urlcat.bench.ts::createUrl benchmarks::Real-world patterns
86.7 µs
Original complex test
benchmark/query.bench.ts::query benchmarks::Real-world patterns
85.7 µs
Single query parameter
benchmark/urlcat.bench.ts::createUrl benchmarks::Simple cases
88.4 µs
Search with filters
benchmark/query.bench.ts::query benchmarks::Real-world patterns
69.3 µs
Unicode characters
benchmark/query.bench.ts::query benchmarks::Special characters
62.9 µs
All spaces (maximum encoding)
benchmark/querystring.bench.ts::encodeString benchmarks::Character type variations
13.9 µs
Five parameters
benchmark/query.bench.ts::query benchmarks::Parameter count scaling
68.1 µs
Values with special characters
benchmark/query.bench.ts::query benchmarks::Special characters
52.9 µs
E-commerce cart params
benchmark/querystring.bench.ts::stringify benchmarks::Real-world use cases
62.7 µs
File path with spaces
benchmark/querystring.bench.ts::encodeString benchmarks::Real-world patterns
15.2 µs
Long values (50 chars)
benchmark/query.bench.ts::query benchmarks::Value length scaling
58.3 µs
Values with spaces
benchmark/query.bench.ts::query benchmarks::Special characters
53 µs
Medium values (20 chars)
benchmark/query.bench.ts::query benchmarks::Value length scaling
53.1 µs
Heavy special characters (75% encoding)
benchmark/querystring.bench.ts::encodeString benchmarks::Character type variations
33.6 µs
JSON-like string
benchmark/querystring.bench.ts::encodeString benchmarks::Real-world patterns
24.1 µs
Short values (5 chars)
benchmark/query.bench.ts::query benchmarks::Value length scaling
49.9 µs
SQL-like query
benchmark/querystring.bench.ts::encodeString benchmarks::Real-world patterns
15.9 µs
Mixed safe and unsafe (50% encoding)
benchmark/querystring.bench.ts::encodeString benchmarks::Character type variations
15.8 µs
Empty string
benchmark/querystring.bench.ts::encodeString benchmarks::String length scaling
22.7 µs
Long ASCII string (200 chars)
benchmark/querystring.bench.ts::encodeString benchmarks::String length scaling
22.5 µs
Short ASCII string (10 chars)
benchmark/querystring.bench.ts::encodeString benchmarks::String length scaling
18.1 µs
Search endpoint with filters
benchmark/urlcat.bench.ts::createUrl benchmarks::Real-world patterns
89.7 µs
Ten parameters
benchmark/query.bench.ts::query benchmarks::Parameter count scaling
70.7 µs
Single path parameter
benchmark/urlcat.bench.ts::createUrl benchmarks::Simple cases
76.8 µs
Pagination params
benchmark/query.bench.ts::query benchmarks::Real-world patterns
55.6 µs
String values only
benchmark/query.bench.ts::query benchmarks::Different value types
60.6 µs
Pure alphanumeric (no encoding needed)
benchmark/querystring.bench.ts::encodeString benchmarks::Character type variations
14 µs
Medium ASCII string (50 chars)
benchmark/querystring.bench.ts::encodeString benchmarks::String length scaling
44.2 µs
Email address
benchmark/querystring.bench.ts::encodeString benchmarks::Real-world patterns
19.9 µs
2-byte UTF-8 characters
benchmark/querystring.bench.ts::encodeString benchmarks::Unicode and multi-byte characters
77.3 µs
API query with includes
benchmark/querystring.bench.ts::stringify benchmarks::Real-world use cases
56.8 µs
Empty object
benchmark/query.bench.ts::query benchmarks::Parameter count scaling
22.6 µs
Keys with special characters
benchmark/query.bench.ts::query benchmarks::Special characters
51.8 µs
Mixed ASCII and Unicode
benchmark/querystring.bench.ts::encodeString benchmarks::Unicode and multi-byte characters
25.8 µs
Two parameters
benchmark/query.bench.ts::query benchmarks::Parameter count scaling
55.8 µs
Very long ASCII string (1000 chars)
benchmark/querystring.bench.ts::encodeString benchmarks::String length scaling
49.6 µs
3-byte UTF-8 characters (CJK)
benchmark/querystring.bench.ts::encodeString benchmarks::Unicode and multi-byte characters
23.7 µs
Search query with special chars
benchmark/querystring.bench.ts::encodeString benchmarks::Real-world patterns
14.9 µs
Large array (50 items)
benchmark/querystring.bench.ts::stringify benchmarks::Array values
1.9 ms
4-byte UTF-8 characters (emojis)
benchmark/querystring.bench.ts::encodeString benchmarks::Unicode and multi-byte characters
22.2 µs
URL path
benchmark/querystring.bench.ts::encodeString benchmarks::Real-world patterns
24.9 µs
Various language scripts
benchmark/querystring.bench.ts::encodeString benchmarks::Unicode and multi-byte characters
36.2 µs
Heavy encoding (many special chars)
benchmark/querystring.bench.ts::stringify benchmarks::Special characters and encoding
56.5 µs
Concatenate base URL and path only
benchmark/urlcat.bench.ts::createUrl benchmarks::Simple cases
67.5 µs
Safe special characters (no encoding needed)
benchmark/querystring.bench.ts::encodeString benchmarks::Character type variations
13.6 µs
Light encoding (spaces only)
benchmark/querystring.bench.ts::stringify benchmarks::Special characters and encoding
50.9 µs
Long values (50 chars each)
benchmark/querystring.bench.ts::stringify benchmarks::Value length scaling
56.5 µs
Very long values (200 chars each)
benchmark/querystring.bench.ts::stringify benchmarks::Value length scaling
80.6 µs
Array of mixed types
benchmark/querystring.bench.ts::stringify benchmarks::Array values
50.7 µs
Pagination params
benchmark/querystring.bench.ts::stringify benchmarks::Real-world use cases
54.5 µs
No encoding needed (pure alphanumeric)
benchmark/querystring.bench.ts::stringify benchmarks::Special characters and encoding
48.3 µs
Boolean values
benchmark/subst.bench.ts::subst benchmarks::Different value types
60.6 µs
Mixed encoding complexity
benchmark/querystring.bench.ts::stringify benchmarks::Special characters and encoding
56.2 µs
Search with filters
benchmark/querystring.bench.ts::stringify benchmarks::Real-world use cases
63.1 µs
BigInt values only
benchmark/querystring.bench.ts::stringify benchmarks::Value types
71.7 µs
Medium values (20 chars each)
benchmark/querystring.bench.ts::stringify benchmarks::Value length scaling
59.2 µs
Unicode characters
benchmark/querystring.bench.ts::stringify benchmarks::Special characters and encoding
53.7 µs
Medium encoding (common special chars)
benchmark/querystring.bench.ts::stringify benchmarks::Special characters and encoding
52.4 µs
Number values only
benchmark/querystring.bench.ts::stringify benchmarks::Value types
58 µs
Multi-select filter params
benchmark/querystring.bench.ts::stringify benchmarks::Real-world use cases
59.1 µs
Boolean values only
benchmark/querystring.bench.ts::stringify benchmarks::Value types
52.2 µs
Mixed primitive types
benchmark/querystring.bench.ts::stringify benchmarks::Value types
77.3 µs
Five parameters
benchmark/subst.bench.ts::subst benchmarks::Parameter count scaling
76 µs
Mixed value types
benchmark/subst.bench.ts::subst benchmarks::Different value types
72.7 µs
String values only
benchmark/querystring.bench.ts::stringify benchmarks::Value types
52.4 µs
Empty template
benchmark/subst.bench.ts::subst benchmarks::Parameter count scaling
59.2 µs
Number values
benchmark/subst.bench.ts::subst benchmarks::Different value types
67.7 µs
Short values (5 chars each)
benchmark/querystring.bench.ts::stringify benchmarks::Value length scaling
52 µs
String values
benchmark/subst.bench.ts::subst benchmarks::Different value types
66.3 µs
© 2025 CodSpeed Technology
Home Terms Privacy Docs