なんとなく「JSON.stringifyってまあ普通の処理だよね~」って思ってたんだけど、実は最近のChromeとかで使われてるV8エンジンが、これをもっと速く動かせるように工夫してるって知ってちょっとびっくりしたんだよね💭
そもそもJSON.stringifyって何?
JavaScriptでオブジェクトをテキストに変換するときに使うやつ。
例えば、 { name: "Alice", age: 20 }
っていうデータを「{"name":"Alice","age":20}
」みたいな文字列に変えるんだよね📜
これがないと、データをファイルに保存したりネットに送ったりできないから、プログラミングではかなりよく使う機能なんだ✨
どこが速くなったの?
V8の開発チームは、JSON.stringifyの中で時間がかかってるところを調べて、特に「文字列に変換する処理」をめちゃくちゃ最適化したらしいんだよね🧐
具体的には、
- 文字列を作るときのメモリの使い方を見直して
- 不必要な処理を減らして
- 変換スピードを上げるアルゴリズムに変えた
って感じ✨
たとえば、これまでは文字列をちょっとずつ作っては繰り返す方法だったけど、今は一気に「まとめて」作る方法にしてるんだって!💡
なんでそんなに速さが大事なの?
JSON.stringifyはブラウザの中でいっぱい使われてるし、データが多いと処理がもたつくこともあるから、ちょっとでも速くなると、ユーザーの体感が変わるんだよね🌸
たとえば、Webアプリでチャットしたり、SNSで写真アップしたりするときの「待ち時間」が減るのは嬉しいポイントだよね👍
ぼんやり思ってたことがちゃんと進化してた
正直、JSON.stringifyなんて裏側で動いてるだけだし、気にしてなかったけど、こうやって細かいところの工夫が積み重なって、結果的に快適さを作ってるって、なんだかちょっと感動したよ🥺
プログラミングの世界って、目に見えないところにすごい工夫がいっぱいあるんだなあって改めて思った💗
もし、自分でもプログラム書くなら、こういうパフォーマンスの話もちょっと意識してみるとおもしろいかも?✨
意外なところに改善のヒントが隠れてるかもしれないよ🧠💬
コメント
グレース
これは2週間前に投稿されたよ。 /r/programmingだけ既出リンクの通知がなくなったみたい。
レオ
なかなかいいね!
クリス
コンパイラにASCIIだけにするオプションがあればいいのに。 最高のパフォーマンスが必要なweb assembly書いたから。
キンバリー
今のJSON.parse(JSON.stringify(obj))ってstructuredClone()より速いのかな? (もしかしてずっとそうだった? )
ハンナ
バックドアがないかちゃんと確認したほうがいいね😂