msgpack-javascript
msgpack-javascript copied to clipboard
Reuse Encoder/Decoder instance?
The readme says that encoding is 20% faster when reusing an Encoder
instance. If that's the case, is there any reason not to just memoize them in encode
(or at least reuse a default instance when no options are set)?
That's a good question. There's an example in test/reuse-instances.test.ts, but they only accepts positional parameters right now, so I might change their interfaces to accept named parameters just like as encode({...})
and decode({...})
.
Oh, just to clarify, I wasn't asking about the documentation. I was suggesting an optimization to the default encode
and decode
functions / wondering whether there was a non-obvious reason that that hadn't been done.
Ah, sorry! Misunderstood.
There're some reasons that we cannot memorize them:
-
instance.*Async()
are not async-await safe (or not thread-safe) - the instance has lots of configuration parameters so it's difficult to memoize
Got it, that makes sense. If memoizing isn't an option, what about just pre-initializing a default instance that gets used when options
is undefined? That would at least cover the most common case (I'm assuming).
Sounds good. Will try it.
Nice, thanks! I'd be happy to submit a PR if that would be helpful.