14 comments

[ 3.6 ms ] story [ 39.3 ms ] thread
Speed is the ultimate User Experience. Especially when it comes to exchanging JSON data which is what apps do all the time these days. Great job!
This is a great blog post with few comments. Impressive work.

Did they merge it?

I quite enjoyed this blog post to be honest
Nice little rabbit hole you ended up in!
This is delightful!

Maybe next you can make the object spread operator faster ;). I was recently bitten by it in a hot loop, thinking it was generally syntactic sugar. Turns out that if I know all the property names in an object, it’s far far faster to just assign them all manually.

That could be interesting! Curious: are you taking about a plain object spread, or are you talking about JSX spreads? The latter has more overhead. Also, which JS engine?

BTW. I recently measured the spread operator in a microbenchmark. Interestingly, while the native spread was faster on Hermes and JSC, it was slower on V8/Chrome, and it's faster there to use `Object.assign()`, i.e.:

['@babel/plugin-proposal-object-rest-spread', { loose: true, useBuiltIns: true }]

Doesn’t assigning properties behave differently? Spread creates a new object while assigning reuses the existing. Unless you mean creating a new object and then assigning the properties. I’d be surprised if that performed worse though. Also curious if the properties are primitives?
I wonder if you can just configure this as part of the compile step with typescript, when the object you're spreading has a known type
Great blog post! As someone who isn't particularly familiar with javascript internals (or many language internals for that matter), this was really easy to follow and a lot of fun.
See, this is the difference between a productive engineer and a purist.

You are a productive engineer. You see a fast library that needs a different encoding, so your first thought is to add a transcoding step and make a 2x gain in a short timeframe.

I am a purist. I see a fast library that needs a different encoding, and my first thought is “ok, I’ll fork that library and make it work with UTF-16 natively”. 24 months later I’ll be found, bearded down to my kneecaps, staring at the bottom of a bottle of scotch, mumbling a mixture of curse words and “PowerPC”. But Id get a 2.05x speedup eventually, so…

Thanks for the chuckle :D And of course you use nixos :]