안녕하세요, Discourse가 ActiveModelSerializer의 오래된 버전을 사용하고 있다는 것을 방금 알게 되었습니다.
이 버전은 5년 전에 출시되었고, 좋은 선택이라고 생각하지 않습니다.
AMS를 포크할 계획인 것 같지만, 더 나은 해결책이 있습니다.
제가 만들고 유지보수하는 JSON 직렬화 라이브러리인 Alba 로 마이그레이션하는 것을 제안합니다. Alba는 AMS와 100% 호환되지는 않지만, 제공하는 API는 AMS와 유사하며 최신 AMS보다 약 10배 빠릅니다.
유지보수자들이 마이그레이션에 동의한다면, PR을 제출하겠습니다.
Falco
(Falco)
7월 19, 2022, 10:15오후
2
PR에서 2~3개 엔드포인트를 해당 방식으로 변경하고 벤치마크를 실행해 주시겠어요? 그렇게 하면 이를 평가하는 데 도움이 될 것입니다
sam
(Sam Saffron)
7월 20, 2022, 4:21오전
3
네, Falco가 언급했듯이 여기서는 두 가지 영역에 대해 신경 써야 합니다:
플러그인 호환성 - 많은 플러그인이 직렬화기(serializer)를 확장하고 있으므로, 깨지는 변경(breaking changes)을 최소화하고 싶습니다.
성능 - 직렬화기를 변경하려면 단단한 데이터로 뒷받침되어야 합니다.
토픽 페이지나 토픽 목록 페이지에 사용되는 일부 직렬화기를 확인하고 이를 테스트 대상으로 사용하는 것을 권장합니다:
그 다음 discoruse bench 의 "이전"과 “이후” 수치를 사용하세요. 진행 상황을 매우 정확하게 파악하는 데 도움이 될 것입니다.
허용할 수 있는 생태계 교란의 정도는 여기서 얻는 성능 개선에 크게 달려 있습니다.
늦게 답변드려 죄송합니다.
성능이 개선될 것 같아 벤치마크 스크립트를 실행해 보겠습니다.
시리얼라이저 플러그인에 대해서는 몰랐습니다. 시리얼라이저를 커스터마이즈하는 플러그인의 예시를 하나 찾았습니다.
여기서 include_votes? 메서드는 코드베이스에서 어디에 사용되는지 찾을 수 없어 AMS의 매직 메서드인 것 같습니다. Alba는 이러한 동작을 지원하지 않으므로 이러한 경우 마이그레이션이 필요할 것 같습니다.
호환성 유지는 매우 중요하므로, Alba가 기존 플러그인과 호환되도록 만들 수 없다면 진행을 포기하는 쪽을 선호합니다.
pfaffman
(Jay Pfaffman)
8월 18, 2022, 11:42오후
5
찾고 있는 마법은 add_to_serializer입니다. 새로운 serializer를 만들 필요가 없습니다.
아래 링크가 도움이 될 수 있습니다: Add to serializer only for staff and current user - #7 by paresy
아, 감사합니다. 플러그인이 활성화되어 있는지 여부와 플러그인 본체를 반환하는 몇 가지 헬퍼 메서드를 정의하는 것 같네요. Alba와 호환되도록 만들 수 있을 것 같은데, 한번 시도해 보겠습니다.
pfaffman
(Jay Pfaffman)
8월 19, 2022, 4:39오전
7
죄송합니다. 원래 플러그인을 충분히 자세히 살펴보지 않았습니다. 제 힌트가 생각했던 것만큼 도움이 되지 않을 수도 있겠다는 생각이 듭니다.
만약 기존 직렬화기에 무언가를 추가하는 작업(예: 게시물 직렬화기에 필드를 추가하는 것)이라면, 제가 도움을 드린 것입니다. 하지만 자체 정보를 반환하는 새로운 라우트를 추가해야 한다면, 다른 작업을 수행해야 합니다.