Commit 2cf177ac by mingisrookie Committed by GitHub

perf(common): 批量复制 RawMessage,优化请求深拷贝 (#7221)

* perf(relay): bulk-copy Responses raw JSON fields

* perf(common): share RawMessage deep-copy optimization

---------

Co-authored-by: CaIon <i@caion.me>
parent eb99ab1b
package common
import (
"bytes"
"encoding/json"
"fmt"
"github.com/jinzhu/copier"
......@@ -11,7 +13,18 @@ func DeepCopy[T any](src *T) (*T, error) {
return nil, fmt.Errorf("copy source cannot be nil")
}
var dst T
err := copier.CopyWithOption(&dst, src, copier.Option{DeepCopy: true, IgnoreEmpty: true})
err := copier.CopyWithOption(&dst, src, copier.Option{
DeepCopy: true, IgnoreEmpty: true,
Converters: []copier.TypeConverter{{
SrcType: json.RawMessage{},
DstType: json.RawMessage{},
Fn: func(src any) (any, error) {
// Copy raw JSON in bulk while retaining independent storage for
// request mutation and retries, instead of reflecting over each byte.
return json.RawMessage(bytes.Clone(src.(json.RawMessage))), nil
},
}},
})
if err != nil {
return nil, err
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment