From 9d05185b6bb9b998fe553795da38e3bac01eda96 Mon Sep 17 00:00:00 2001 From: Kenjiro Nakayama Date: Wed, 9 Aug 2023 15:16:55 +0900 Subject: [PATCH 1/3] Shortcut when two json documents are same Signed-off-by: Kenjiro Nakayama --- v2/jsonpatch.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/v2/jsonpatch.go b/v2/jsonpatch.go index a411d54..2a4f714 100644 --- a/v2/jsonpatch.go +++ b/v2/jsonpatch.go @@ -64,6 +64,9 @@ func NewOperation(op, path string, value interface{}) Operation { // // An error will be returned if any of the two documents are invalid. func CreatePatch(a, b []byte) ([]Operation, error) { + if reflect.DeepEqual(a, b) { + return []Operation{}, nil + } var aI interface{} var bI interface{} err := json.Unmarshal(a, &aI) From 4299cfa206a6c579982a9c09f5980d50a4c99b0e Mon Sep 17 00:00:00 2001 From: Kenjiro Nakayama Date: Wed, 9 Aug 2023 15:18:30 +0900 Subject: [PATCH 2/3] Use different values in bench Signed-off-by: Kenjiro Nakayama --- v2/bench_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/v2/bench_test.go b/v2/bench_test.go index e197c21..c098987 100644 --- a/v2/bench_test.go +++ b/v2/bench_test.go @@ -19,8 +19,8 @@ func BenchmarkCreatePatch(b *testing.B) { }, { "large array", - largeArray(1000), - largeArray(1000), + largeArray(1000, "a"), + largeArray(1000, "b"), }, { "simple", @@ -40,7 +40,7 @@ func BenchmarkCreatePatch(b *testing.B) { } } -func largeArray(size int) string { +func largeArray(size int, val string) string { type nested struct { A, B string } @@ -49,7 +49,7 @@ func largeArray(size int) string { } a := example{} for i := 0; i < size; i++ { - a.Objects = append(a.Objects, nested{A: "a", B: "b"}) + a.Objects = append(a.Objects, nested{A: "a", B: val}) } res, _ := json.Marshal(a) return string(res) From fa431c26804d5bfa3788e8a8b1f749ae80c1cebf Mon Sep 17 00:00:00 2001 From: Kenjiro Nakayama Date: Wed, 9 Aug 2023 16:41:19 +0900 Subject: [PATCH 3/3] Use bytes.Equal Signed-off-by: Kenjiro Nakayama --- v2/jsonpatch.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/v2/jsonpatch.go b/v2/jsonpatch.go index 2a4f714..0d7823b 100644 --- a/v2/jsonpatch.go +++ b/v2/jsonpatch.go @@ -1,6 +1,7 @@ package jsonpatch import ( + "bytes" "encoding/json" "fmt" "reflect" @@ -64,7 +65,7 @@ func NewOperation(op, path string, value interface{}) Operation { // // An error will be returned if any of the two documents are invalid. func CreatePatch(a, b []byte) ([]Operation, error) { - if reflect.DeepEqual(a, b) { + if bytes.Equal(a, b) { return []Operation{}, nil } var aI interface{}