typescript-json というライブラリ
samchon/typescript-json: Runtime type checkers and 5x faster JSON.stringify()
今日初めて知った。
JSON ならぬ TSON。
ランタイムで型をチェックしてエラー投げたり true / false 判定したり色々できるらしい。
あと TSON.stringify<T>(input)
は JSON.stringify()
の5倍速いらしい。5倍ってすごくないか?
JSON.stringify()
ってなんかに使っててなんだっけ……と思ってこのサイトのリポジトリを検索したらディープコピーに使っていることを思い出せた。
でもディープコピーは前に書いたメモにあるとおり structuredClone()
があり、最近 IE のサポートが切れたのでいよいよ実用的なレベルになってきたのかなとも思う。
structuredCloneを使ってオブジェクトをディープコピーする
改めて structuredClone()
を解説する記事を読んでいたら比較があり非常に分かりやすかった。
JSON.parse(JSON.stringify(input))
だと undefined の値がなくなって(JSON は undefined をサポートしてないので)、関数も消えるという問題がある。
シンプルに JSON がサポートしていない形式は削ぎ落とすという感じ。
structuredClone()
は関数のコピーができない。
これだけ見たら structuredClone()
かなとも思うけどどうだろうか。
ここで TSON.stringify<T>(input)
が JSON.stringify()
の5倍速いということでディープコピーを JSON.parse(TSON.stringify<T>(input))
でやったらめちゃくちゃ速くなるのでは?と思っったが実際どうなんだろう。
JSON がサポートしている形式でないとディープコピーできないが、たとえば API とのやり取りなど JSON とのやり取りが確定している部分で使うのはよさそう。
それ以外のコード上でのディープコピーは structuredClone()
がいいのかな。たぶん。