From 5f2a83f56346ccbbce906513f9fe56ebc42cd2e6 Mon Sep 17 00:00:00 2001 From: Aaron O'Mullan Date: Sun, 4 Apr 2021 15:04:35 +0200 Subject: perf(serde_v8): preallocate vector when serializing arrays (#9955) --- serde_v8/src/ser.rs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'serde_v8/src') diff --git a/serde_v8/src/ser.rs b/serde_v8/src/ser.rs index 16b6447b9..126657c6b 100644 --- a/serde_v8/src/ser.rs +++ b/serde_v8/src/ser.rs @@ -103,13 +103,12 @@ pub struct ArraySerializer<'a, 'b, 'c> { } impl<'a, 'b, 'c> ArraySerializer<'a, 'b, 'c> { - pub fn new(scope: ScopePtr<'a, 'b, 'c>) -> Self { - // let serializer = Serializer::new(scope); - Self { - scope, - // serializer, - pending: vec![], - } + pub fn new(scope: ScopePtr<'a, 'b, 'c>, len: Option) -> Self { + let pending = match len { + Some(len) => Vec::with_capacity(len), + None => vec![], + }; + Self { scope, pending } } } @@ -421,8 +420,8 @@ impl<'a, 'b, 'c> ser::Serializer for Serializer<'a, 'b, 'c> { } /// Serialises any Rust iterable into a JS Array - fn serialize_seq(self, _len: Option) -> Result { - Ok(ArraySerializer::new(self.scope)) + fn serialize_seq(self, len: Option) -> Result { + Ok(ArraySerializer::new(self.scope, len)) } fn serialize_tuple(self, len: usize) -> Result { -- cgit v1.2.3