Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
Description
There is a duplicate elements check for set in `writeFields*` function, and it compares elements using `reflect.DeepEqual` which is expensive.
It's much faster that generates a "DeepEqual" function for set elements and apply it in duplicate elements check, especially for nested struct element.
For example, a thrift file like this:
namespace go bytedance.thrift.example
struct Simple {
1: set<double> DoubleSet
}
struct Base {
1: set<i64> I64Set
}
struct WrappedBase {
1: set<Base> BaseSet
}
struct Nested {
1: set<WrappedBase> WrappedBaseSet
}
Go generator would generate `Equals` method for structs defined in thrift file.
generated file diff: https://gist.github.com/BytedanceRPC/1aa34b65cf4c9efabed0d0a115262d85
Benchmark writeField1 for Simple and Nested:
name old time/op new time/op delta SimpleWriteField1-8 576ns ± 3% 435ns ± 3% -24.56% (p=0.000 n=10+10) NestedWriteField1-8 257µs ± 3% 3µs ± 5% -98.71% (p=0.000 n=10+10)name old alloc/op new alloc/op delta SimpleWriteField1-8 160B ± 0% 153B ± 0% -4.58% (p=0.000 n=8+9) NestedWriteField1-8 45.5kB ± 0% 0.4kB ± 1% -99.23% (p=0.000 n=9+10)name old allocs/op new allocs/op delta SimpleWriteField1-8 6.00 ± 0% 4.00 ± 0% -33.33% (p=0.000 n=10+10) NestedWriteField1-8 2.22k ± 0% 0.01k ± 0% -99.68% (p=0.000 n=10+10)
Attachments
Issue Links
- links to