#8.0 Methods (13:42) - airbnb-clone-backend

star_is_mine·2022년 11월 9일
0

airbnb_clone_coding_backend

목록 보기
13/14

배운점

성능 최적화 개선

# 아래 코드는 rooms/models.py -> class Room(CommonModel): 내용 중 핵심 부분만 발췌한 것
# admin 패널에서 방의 리뷰점수 평균값을 보여주기(list_display) 위해 만든 메서드입니다. 

# 1. 기존의 코드 
    def rating(room):
        count = room.reviews.count()
        if count == 0:
            return "No Reviews"
        else:
            total_rating = 0
            for review in room.reviews.all(): # 이 부분이 핵심입니다.
                total_rating += review.rating
            return round(total_rating / count, 2)

# 2. 개선된 코드
    def rating(room):
        count = room.reviews.count()
        if count == 0:
            return "No Reviews"
        else:
            total_rating = 0
            for review in room.reviews.all().values("rating"): # 이 부분이 핵심입니다.
                total_rating += review["rating"]
            return round(total_rating / count, 2)
            
            
# 위 2개의 코드는 성능에 매우 차이가 있습니다. 
# 먼저 개선전의 1번 코드를 보면 단순히 for review in room.reviews.all() 라고만해서 
# room.reviews.all() 인스턴스 전부를 선별 없이 호출하였습니다. (만약 room.reviews 가 100억 개라면..)
# 개선 된 이후의 2번 코드를 보겠습니다. 
# 2번 코드는 room.reviews.all().values("rating") 라고 하였습니다. 
# 즉 room.reviews 중 values("rating") 필드값만 선별해서 호출하였습니다. 
# 즉 room.reviews 인스턴스가 갖는 여러 필드들 중 오직 rating 필드 값만 요청한 것입니다.
# 이 또한 역시 결국은 room.reviews.all() 인스턴스 전체를 호출하는 것이므로 성능에 좋을수만은 없지만 그래도 개선 이전의 코드 보다는 필요한 값만 요청하므로 성능적으로 개선될 것입니다. 

핵심명령어 정리

None


None


Note

profile
i have a dream and I will make my dreams come true.

0개의 댓글