logo
/
JavaScriptのreduceによるオブジェクト構築はめちゃめちゃ遅くなる
2023-01-13
Array.reduceは要素が多くなればなるほど動作が重くなる。
Playgroundでの実験では、5000個の配列をオブジェクトに変換する場合以下の結果となった。
Loading...
ここまで差が出るとは思ってなかった。
商用プロダクトでforeachからreduceに変更したところパフォーマンス問題を起こしてしまったので気をつけたい。
ちなみに、reduceが遅いというわけではない。
Loading...
reduceによって大量のオブジェクトが構築(という表現が正しいかわからないが)されるのが遅い原因に思える
loopを繰り返すにあたってオブジェクトの状態は以下の様に変化する。
Loading...
foreachの場合、同じオブジェクトに対してプロパティを追加する。 reduceの場合、毎回スプレッドで展開して新しいオブジェクトを作成する。
そのコストが高い?もしくは作成されたオブジェクトがreduce完了まで開放されない?

reduceがいけないんじゃなくてspread(...)がいけないのでは?

2023-01-22 追記
Loading...
多分そう オブジェクトが大きいほど重くなる気がする?