Skip to content

Performance Degradation Starting In v5.2.0 #159

@SyntaxNode

Description

@SyntaxNode

Greetings From https://github.com/prebid/prebid-server

We use json-patch in our project and observed a performance difference when we upgraded to v5 from an older version. This is a high scale application which is particularly sensitive to memory allocations. I turned the MergePatch example in the readme to a benchmark test and found the following results on the 5.2.0 and 5.1.0 version branches with Go 1.16:

func BenchmarkMergePatch(b *testing.B) {	original := []byte(`{"name": "John", "age": 24, "height": 3.21}`)	target := []byte(`{"name": "Jane", "age": 24}`)	alternative := []byte(`{"name": "Tina", "age": 28, "height": 3.75}`)	patch, err := CreateMergePatch(original, target)	if err != nil {	panic(err)	}	for n := 0; n < b.N; n++ {	MergePatch(alternative, patch)	} } 
v5.2.0 BenchmarkMergePatch-12 85310 14823 ns/op 6454 B/op 154 allocs/op v5.1.0 BenchmarkMergePatch-12 216194 6405 ns/op 2634 B/op 56 allocs/op 

v5.2.0+ is using significantly more memory in terms of bytes and allocations. I am curious if this is a known change or perhaps we need to modify our calls to optimize for lower memory usage?

Thank you.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions