タグ検索の該当結果が少ないため、タイトル検索結果を表示しています。
Leaner 開発チームの黒曜(@kokuyouwind)です。 この記事は Datadog Advent Calendar 2022 の 22 日目です。いよいよクリスマスが近づいてきましたね。 今回は Datadog APM のトレース機能を利用したパフォーマンスチューニングを実施したため、その内容をまとめます。 パフォーマンスチューニングの背景 今回パフォーマンスチューニングの対象にしたのは、外部サービスの商品を横断的に検索する「商品検索 API」です。この API では外部サービスごとに API を呼び出しており、取得したデータの加工や集約などを行っています。 機能を使ってみて確かに重いことはわかっているのですが、どの処理に時間がかかっているのかは判別できていませんでした。このため自分を含むメンバー全員が「外部サービス API 呼び出しが大半を占めており改善はできないだろう」と推測
こんにちは! スペースマーケットでフロントエンドエンジニアをしているmizukiです。 少し前に新規でコンポーネントを実装したのですが、パフォーマンスについてはあまり意識せずに実装したところ、画面の読み込みや処理にかなり遅延が発生してしまいました。 そこから処理速度を上げて遅延をなくすためにパフォーマンスチューニングをしたので、その話について書いていきたいと思います。 数値上の結論を先にお伝えすると、この改善をしたことで、当初は50秒ほどかかっていたユニットテストが7~8秒ほどまで短縮することができました。 (改めて文字に起こすと改善前は時間かかりすぎですね・・・) 問題発覚 コンポーネント実装時には、PCのchromeでローカル環境を立ち上げて挙動を確認していました。 コンポーネントではAPIからデータ取得後に少し複雑な加工処理を行なっていましたが、PCのchromeで見る分には特に遅延
これは Javascript のかなり細かい部分の話なので似たようなケースで困った事がある人以外にとってはどうでも良い話だと思いますが......。 JavaScript は元々シングルスレッド構造なのであまり重い処理をさせるには向いていないのだ、という事は昔から言われていました。 重い処理をしようとした時にまず影響を受けやすいのは UI 周りの動作です。 UI をちゃんと動かしつつ重い処理をさせるためには、処理を小分けにしてタイマーから駆動する等の手法がとられます。 またこの時、コールバックで小分けにした処理を繋げるとソースが見づらくなるので Promise や async/await を使う、という手段が定石となっていったのですが、そもそも、ひとまとまりの重い処理をやらせたいならやっぱり別スレッドで走らせたい、という事で WebWorker というものが作られました。 これによって J
はじめに Streamlit は UI 操作の度にコードの再実行が走ることを特徴としています。これによりセッション状態の管理などが大幅に軽減されるのですが、重い処理がある場合に UX の低下を招きかねません。 実際私も下図のように、重い処理を含む際のセレクトボックス操作でよく重たい印象を与える処理を記述してしまいがちです。 上図の Playground そこで Streamlit は、キャッシュやセッション状態管理、フォーム、特定の関数のみの再実行など多様な機能を提供しています。 というわけで個人的に長年の悩みだったので、いくつかのパターンで検証してみます。 結論 個人的には比較的新しい機能であり特定の関数のみ再実行できる st.fragment が実装も簡単で、理解もしやすかったです。 上図の Playground 検証 検証コード(ベース)😑 それでは最初に示した重い実装からみていき
はじめに Node.jsの特徴としてシングルスレッドであることが挙げられます。そのため、CPU負荷の重い処理をさせると、スレッドがブロックされてパフォーマンスが低下するので、そのような処理はNode.jsには不向きとされています。どうしても重い処理をしたいときは、マルチスレッドやマルチプロセスを用いることもできます(参考)が、いずれも重大な欠点があります。 マルチスレッドの問題 Node.jsにおけるマルチスレッドでは、基本的にlibuvが提供するthreadpoolからスレッドを取得して使うことになると思います。しかし、libuvのthreadpoolは最大で128個(既定で4個)のスレッドしか供給できません。さらに、libuvが提供するスレッドは、ファイル操作の非同期処理にも使われます。例えば、ローカルファイルの読み書きを行う場合は勿論、ドメイン名をIPアドレスに変換するresolve
今回やりたいこと API経由でバッチ処理とか重い処理を動かしておいて、UI側で状態を監視したい…なんてことあるよね。今回はそんな時の処理を書いていこうと思います。 APIからバックグラウンドで重い処理を起動したい バックグラウンド処理の状態を取得して画面側で表示したい 処理中でもAPIへのリクエストは止めたくない 今回はとりあえずAPI処理だけに留めようと思います。 APIが出来ちゃえば画面側はご自由にといった感じです。 環境 Python 3.9.2 FastAPI 0.68.1 各処理を書いていく FastAPIにはバックグラウンド処理用にBackground Tasksが用意されています。 公式を見ても分かる通りかなりシンプルに書けます。add_taskにバックグラウンド処理を入れるだけ。後はお任せ。素晴らしい。 #!/usr/bin/env python3 import time
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く