# Backend速度調査(5回計測した平均) > 目安計算量はESとDBをあまり考慮していないのでそこのチューニングは別途で見積もった。 * api/v1/login 931.92ms~5.62s 平均すると、1.07s 最初の挙動が遅い * api/v2/es_search 2.57s 6.31s 2.25s 1.30s 目安計算量(WORD+2TAG) * api/v2/tag_category 1回目:7.09s 2回目:3.87s 3回目:4.35s 目安計算量(CATEGORY^3) * api/v2/tags/suggest 文字数によってスピードが変わるわけではない(劇的には) 平均すると6.28sかかっている * /v1/videos 1.13s ~ 5.73s 1回目:1.13s 2回目:5.73s 3回目:1.48s * /v2/tags/soaring 1.16s ~ 7.23s 1回目: 3.57s 2回目: 1.16s 3回目: 7.23s * /v2/tags/popular 0.5s ~ 8.31s 1回目: 8.31s 2回目: 0.5s 3回目: 2.92s * /v2/tags/new 0.5s ~ 10.05s 1回目: 10.05s 2回目: 0.5s 3回目: 5.09s * /v2/recomendVideos 0.6s ~ 1.15s 1回目: 1.15s 2回目: 0.6s 3回目: 0.74s * 問題点 1. 最初のサイト訪問が遅い 2. タグカテゴリがちょっと遅い(静的にして、あたらしいタグが追加されたときに更新したらどうか&リスポンシブ形式が変わるが、最悪計算量をCATEGORY^2に抑えられる) 3. 入力時にタグサジェストAPIを叩いている(大量に叩きすぎ) 4. バックエンドのAPIが軒並み遅い 5. たまにes_searchにクエリが空で叩いている * 対応策 1. クラスターのシャードが多すぎるため、どのクエリも実行速度が遅くなっていると感じる場合があるのでelastic-searchに割り当てるヒープ領域を20GB未満に抑える(これは一時的に挿入時に30GBまで増やしたので下げる必要がある) 2. サーバー自体に負荷がかかっているかどうか調査 3. grafanaなどを使って負荷率を常時監視負荷が高かったり、落ちている場合はslackに知らせるようにするロードバランサーを調整 4. タグカテゴリAPIを静的にするか、計算量を抑える(個人的には静的が良いと思う。毎回形を整えて返すのでどうしても遅くなってしま う 5. タグサジェストの時に入力途中でAPIを叩いているので入力終了してフォーカスが外れた時にAPIを叩くようにする 6. 最初のサイト訪問がSSRによって遅いので、ユーザーが見ている時バックエンドのAPIにたたくようにする。(ユーザーのカーソル位置によって) 7. firebaseに複雑な検索させないようにする ## 引用 https://www.elastic.co/jp/blog/advanced-tuning-finding-and-fixing-slow-elasticsearch-queries https://blog.koh.dev/2020-03-04-nodejs-performance/#%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E8%A8%88%E6%B8%AC%E3%83%84%E3%83%BC%E3%83%AB%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8B https://www.slideshare.net/ssuser91c7c7/elasticsearch-57588384