Djangoでレスポンスを返すまでにかかった所要時間を測定する方法(middlewareの活用)
Djangoのmiddlewareで測定できそう。
「Djangoのレスポンスが早いのか遅いのかなんとなくわかるけど正確な秒数を知りたい。」という時はよくあると思います。そんなときにサクッと秒数を測定できるミドルウェアを作ってみましょう。
middlewareにピンとこない場合は「Djangoでmiddlewareを自作する方法」をご覧ください!
djangoのmiddlewareとはざっくり、「リクエストを受けてviews.pyが処理する前や後になにか処理をするもの」です。
サンプルコード
Githubにあります。
またはターミナルで
git clone -b django_time_middleware https://github.com/yeconnect/django-baby-starter-template.git
cd django-baby-starter-template
docker compose up
とし、ブラウザで http://localhost:4989/todo/ にアクセス
バージョン
python 3.9
Django==3.2
コードの書き方
まずはルートにmiddlewareディレクトリを作成します。
その中に__init__.pyとmeasure_time.pyを作り、measure_time.pyを以下のように書きます。(__init__.pyを忘れず作成してください)
import time
class ResponseTimeMeasureMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
start = time.time()
response = self.get_response(request)
end = time.time()
print(f'レスポンスまでの所要時間:{(end-start)*1000}ミリ秒')
return response
これで所要時間を測定しprintするミドルウェアが定義できたのでsettings.pyで読み込みます。
# ↑略
MIDDLEWARE = [
'middleware.measure_time.ResponseTimeMeasureMiddleware', # ここ!
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
# ↓略
middlewareの実行される順番は、MIDDLEWAREに書く順番で決まるので、一番上に書きましょう。
これだけで完成です!うまくいくと↓のようにターミナルに表示されます。
さらに詳細な測定がしたい場合
ただの所要時間だけでなく、SQLの発行数やかかった時間などを見たい場合があると思います。
その場合はdjango-debug-toolbarやdjango-silkなどが向いてそうです。また試して見たら記事を書きます。
ディスカッション
コメント一覧
まだ、コメントがありません