Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(performance): improve countParams #2378

Merged
merged 5 commits into from May 17, 2020
Merged

chore(performance): improve countParams #2378

merged 5 commits into from May 17, 2020

Conversation

@appleboy
Copy link
Member

@appleboy appleboy commented May 17, 2020

package convert

import (
	"bytes"
	"strings"
	"testing"
)

var (
	strColon = []byte(":")
	strStar  = []byte("*")
)

func countParamsOld(path string) uint16 {
	var n uint
	for i := range []byte(path) {
		switch path[i] {
		case ':', '*':
			n++
		}
	}
	return uint16(n)
}

func countParamsNew(path string) uint16 {
	var n uint
	s := strToBytes(path)
	n += uint(bytes.Count(s, strColon))
	n += uint(bytes.Count(s, strStar))
	return uint16(n)
}

var foo = strings.Repeat("/:param", 256)

func BenchmarkCountParamsOld(b *testing.B) {
	for i := 0; i < b.N; i++ {
		countParamsOld(foo)
	}
}

func BenchmarkCountParamsNew(b *testing.B) {
	for i := 0; i < b.N; i++ {
		countParamsNew(foo)
	}
}

Performance result

goos: linux
goarch: amd64
BenchmarkCountParamsOld-48    	 3000000	      1751 ns/op	       0 B/op	       0 allocs/op
BenchmarkCountParamsNew-48    	30000000	       148 ns/op	       0 B/op	       0 allocs/op
appleboy added 5 commits May 16, 2020
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
@appleboy appleboy added this to the 1.7 milestone May 17, 2020
@appleboy appleboy requested a review from thinkerou May 17, 2020
@codecov
Copy link

@codecov codecov bot commented May 17, 2020

Codecov Report

Merging #2378 into master will increase coverage by 0.00%.
The diff coverage is 100.00%.

Impacted file tree graph

@@           Coverage Diff           @@
##           master    #2378   +/-   ##
=======================================
  Coverage   98.63%   98.64%           
=======================================
  Files          41       41           
  Lines        2349     2359   +10     
=======================================
+ Hits         2317     2327   +10     
  Misses         18       18           
  Partials       14       14           
Impacted Files Coverage Δ
tree.go 100.00% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 1d5b9ba...ba1a3d5. Read the comment docs.

Copy link
Member

@thinkerou thinkerou left a comment

lgtm

@thinkerou
Copy link
Member

@thinkerou thinkerou commented May 17, 2020

@appleboy maybe we should also commit the pr to httprouter? thanks!

@thinkerou thinkerou merged commit b4c8bf1 into master May 17, 2020
4 checks passed
@appleboy appleboy deleted the performance branch May 17, 2020
@appleboy
Copy link
Member Author

@appleboy appleboy commented May 17, 2020

@thinkerou Yes, I will create a new PR on https://github.com/julienschmidt/httprouter

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

None yet

2 participants