현재 사용자 카드에 클릭하면 /u/david.json이 로드되는데, 이는 내 전체 프로필과 동일한 엔드포인트입니다. 사용자 카드가 대부분의 데이터를 사용하지 않기 때문에 이는 다소 비효율적입니다.
따라서 사용자 카드가 새로운 루트인 /u/david/card.json을 사용하도록 변경할 예정입니다. 이 엔드포인트는 카드를 렌더링하는 데 필요한 최소한의 정보만 포함합니다. 제 테스트 결과, 이를 통해 사용자 카드 로딩 속도가 이전보다 2~3배 빨라졌습니다!
현재 이 변경 사항은 숨겨진 사이트 설정 뒤에 있습니다. 테스트해 보려면 Rails 콘솔로 이동하여 다음을 실행하세요.
SiteSetting.enable_new_user_card_route = true
향후 몇 주 내에 이 기능이 기본적으로 활성화되고, 해당 사이트 설정은 제거될 예정입니다. 현재 Meta에서는 이미 활성화되어 있습니다.
좋습니다! 제가 해야 할 일이 있나요?
사용자나 포럼 관리자라면 아무것도 할 필요가 없습니다! 곧 사용자 카드에서 향상된 성능을 확인할 수 있을 것입니다.
플러그인 개발자라면 새로운 루트를 지원하기 위해 몇 가지 조치가 필요할 수 있습니다.
플러그인에서 커스텀 필드를 사용하고 사용자 카드에 렌더링합니다
문제가 없습니다. 커스텀 필드는 정확히 동일한 방식으로 계속 작동합니다.
사용자 직렬화기에 데이터를 추가하고 전체 사용자 프로필에서 사용합니다
괜찮습니다. 사용자 프로필은 기존 엔드포인트를 계속 사용하며, 기존 add_to_serializer 호출도 계속 작동합니다.
사용자 직렬화기에 데이터를 추가하고 사용자 카드에서 사용합니다
이 경우 약간의 작업이 필요합니다. 이전에는 다음과 같은 구조를 사용했습니다.
class UserSerializer < BasicUserSerializer
이제는 다음과 같은 구조를 사용합니다.
class UserCardSerializer < BasicUserSerializer
# 그리고
class UserSerializer < UserCardSerializer
카드 엔드포인트에 포함하려면 UserCardSerializer에 추가해야 합니다. 예를 들어, 다음과 같은 코드가 있다면:
add_to_serializer(:user, :favourite_forum_software) do
"discourse"
end
다음과 같이 변경해야 합니다.
add_to_serializer(:user_card, :favourite_forum_software) do
"discourse"
end
UserSerializer는 UserCardSerializer에 있는 모든 것을 자동으로 포함하므로, 이 변경을 바로 적용해도 테스트가 통과하며(숨겨진 사이트 설정이 비활성화된 상태에서도) 정상적으로 작동합니다.
stable/beta 버전과의 호환성을 유지하려면 UserCardSerializer에 대한 확인을 다음과 같이 추가하세요:
# TODO: Discourse 2.4 stable이 릴리스되면 스위치 제거
serializer = (defined? UserCardSerializer) ? :user_card : :user
add_to_serializer(serializer, :favourite_forum_software) do
"discourse"
end