group byみたいな処理はフロントよりもDBにやらせて(DBは億超えレコードも余裕で想定された作りの処理なので)、結果だけフロントで受け取って好きな形に整形してあげた方が早いのでは?みたいな気分になってしまう
7: soybeancucumber2025/05/28 11:49
APMに頼らずログからボトルネック抽出は辛そう
8: lizy2025/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」
プロファイラを利用して Node.js サーバーのレスポンス時間を 200 秒 → 20 秒に短縮した話
"toLocaleString は桁違いに遅い処理です。大量のデータを集計する時など、ループの中で呼び出すとそれが顕著に現れます"
node.jsのパフォーマンスチューニング
toLocaleString() を毎回呼ばずに Intl.DateTimeFormat を使い回そうの話、他の言語でもあるある / async_hooks で処理時間が長いタスクをログに出すの良いね
プロセスも開示してくれててめっちゃ良い記事
200秒のレスポンスがまずびっくりするけどいい話。DB問い合わせが16秒だからCPUでの計算は50倍高速化されてる。今度はDBがボトルネックになるからここを高速化すると10秒台も目指せそう
group byみたいな処理はフロントよりもDBにやらせて(DBは億超えレコードも余裕で想定された作りの処理なので)、結果だけフロントで受け取って好きな形に整形してあげた方が早いのでは?みたいな気分になってしまう
APMに頼らずログからボトルネック抽出は辛そう
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」
全体がわからないから何ともだけどこれだけ読むと、Groupbyは他の処理を挟んでないんならRDBでやらせればいいと思うし、月じめ処理で日付型を文字列に変換する機会なんてほとんどないと思うんだけど。
ほえー勉強になりました
問題把握の過程から見せてくれるのありがたい。挙動の観測点を増やす
I/OでもメモリでもなくCPUがボトルネックになるとは珍しい。DateはともかくGroupByのほうはプロファイラ抜きで見つけられる気がしないな。
原因特定するまでのプロセス自体が参考になるので、ありがたい
プロファイラは重要なツール
https://www.utgop.org/gymi898
https://support.google.com/edu/classroom/thread/347174824?hl=en&sjid=382380191890853776-NC
昔似たようなことが起きたな僕も https://zenn.dev/herp_inc/articles/js-intl-date-time-format-performance
https://www.utgop.org/geminitime
https://www.utgop.org/geminisupport0964
https://www.utgop.org/geminisupport0964
https://www.utgop.org/geminisupport0964
https://www.utgop.org/phonecall