diff --git a/CHANGELOG.md b/CHANGELOG.md index 42967e51..57146521 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +# 8.3.0 + +- Serialization performance: if `toString` is used to map types, cache the + result to improve performance. + # 8.2.1 - Fix deps: allow `built_value_generator` to use `built_value 8.2.0`. diff --git a/built_value/lib/src/built_json_serializers.dart b/built_value/lib/src/built_json_serializers.dart index 08b96c4d..cadfa0ab 100644 --- a/built_value/lib/src/built_json_serializers.dart +++ b/built_value/lib/src/built_json_serializers.dart @@ -316,8 +316,15 @@ class BuiltJsonSerializersBuilder implements SerializersBuilder { } } +/// Raw name uses `toString` which is not particularly fast, so cache the +/// results. +Map _rawNameMap = {}; + String _getRawName(Type? type) { + var maybeResult = _rawNameMap[type]; + if (maybeResult != null) return maybeResult; var name = type.toString(); var genericsStart = name.indexOf('<'); - return genericsStart == -1 ? name : name.substring(0, genericsStart); + var result = genericsStart == -1 ? name : name.substring(0, genericsStart); + return _rawNameMap[type] = result; }