テクノロジー

プロファイラを利用して Node.js サーバーのレスポンス時間を 200 秒 → 20 秒に短縮した話

1: gfx 2025/05/28 08:45

"toLocaleString は桁違いに遅い処理です。大量のデータを集計する時など、ループの中で呼び出すとそれが顕著に現れます"

2: hirorock 2025/05/28 09:17

node.jsのパフォーマンスチューニング

3: teppeis 2025/05/28 09:19

toLocaleString() を毎回呼ばずに Intl.DateTimeFormat を使い回そうの話、他の言語でもあるある / async_hooks で処理時間が長いタスクをログに出すの良いね

4: habarhaba 2025/05/28 09:32

プロセスも開示してくれててめっちゃ良い記事

5: manaten 2025/05/28 10:57

200秒のレスポンスがまずびっくりするけどいい話。DB問い合わせが16秒だからCPUでの計算は50倍高速化されてる。今度はDBがボトルネックになるからここを高速化すると10秒台も目指せそう

6: circled 2025/05/28 11:11

group byみたいな処理はフロントよりもDBにやらせて(DBは億超えレコードも余裕で想定された作りの処理なので)、結果だけフロントで受け取って好きな形に整形してあげた方が早いのでは?みたいな気分になってしまう

7: soybeancucumber 2025/05/28 11:49

APMに頼らずログからボトルネック抽出は辛そう

8: lizy 2025/05/28 12:04

toLocaleStringはMDNにも注意書きがあった「When the method is called many times with the same arguments, it is better to create a Intl.DateTimeFormat object and use its format() method」

9: Fluss_kawa 2025/05/28 12:43

全体がわからないから何ともだけどこれだけ読むと、Groupbyは他の処理を挟んでないんならRDBでやらせればいいと思うし、月じめ処理で日付型を文字列に変換する機会なんてほとんどないと思うんだけど。

10: tetokon 2025/05/28 12:48

ほえー勉強になりました

11: shoh8 2025/05/28 13:39

問題把握の過程から見せてくれるのありがたい。挙動の観測点を増やす

12: turanukimaru 2025/05/28 13:42

I/OでもメモリでもなくCPUがボトルネックになるとは珍しい。DateはともかくGroupByのほうはプロファイラ抜きで見つけられる気がしないな。

13: tofu-kun 2025/05/28 14:14

原因特定するまでのプロセス自体が参考になるので、ありがたい

14: Kazumi007 2025/05/28 15:12

プロファイラは重要なツール

15: wdcfqedk 2025/05/28 15:26
17: SWIMATH2 2025/05/28 16:21

昔似たようなことが起きたな僕も https://zenn.dev/herp_inc/articles/js-intl-date-time-format-performance

18: ligmuw 2025/05/28 17:26
19: ejgpht 2025/05/28 18:14
20: k26ka 2025/05/28 18:14
21: ajptxy 2025/05/28 18:17
22: uitdjn 2025/05/28 22:14