クエリーセットは怠け者ですが、この場合にDjangoがどのように動作するかはわかりません。 2つの変数user_tokens
とuser_last_token
を出力したいとしましょう。Djangoクエリーセットでのパフォーマンス
例A
@classmethod
def get_all_tokens(cls, user):
return cls.objects.filter(user=user, usage=cls.PHONE_VALIDATION)
@classmethod
def get_last_token(cls, user):
return cls.get_all_tokens(user).latest('created_at')
@classmethod
def play_with_tokens(cls, user):
user_tokens = cls.get_all_tokens(user, True)
user_last_token = cls.get_last_token(user, True)
print(user_tokens)
print(user_last_token)
例B
@classmethod
def get_all_tokens(cls, user):
return cls.objects.filter(user=user, usage=cls.PHONE_VALIDATION)
@classmethod
def play_with_tokens(cls, user):
user_tokens = cls.get_all_tokens(user, True)
user_last_token = user_tokens.latest('created_at')
print(user_tokens)
print(user_last_token)
が速くよりBです: これらの例間のパフォーマンスの違いはありますか?ありがとう。
これは怠惰な回答かもしれませんが、django-debug-toolbarでそれらを試して評価することができます。 – aliva
2番目のprint文が新しいデータベース参照を呼び出さないため、Bが高速です。これは、user_tokens変数からキャッシュされたデータを使用します。 – dentemm