메타에서 실험적 'lazy_loaded_categories' 기능 활성화

:information_source: 이 프로젝트는 당분간 보류되었습니다. 향후 재검토할 수 있으며, 그렇게 되면 여기에 업데이트를 게시하겠습니다.

많은 수의 카테고리를 가진 커뮤니티를 돕기 위해 실험적 기능을 도입합니다. :rocket:

지난 몇 달간 우리는 많은 수의 카테고리를 가진(그리고 그 외에도!) 커뮤니티에서 Discourse 사이트가 더 잘 작동하도록 열심히 작업해 왔습니다. 이를 통해 관리자는 친숙한 사용자 경험(UX)을 유지하면서 수천 개의 카테고리를 만들 수 있게 됩니다.

이것은 여전히 실험적 기능이며, lazy_loaded_categories_groups 사이트 설정을 조정하여 활성화할 수 있습니다. 현재 기본적으로 비활성화되어 있습니다.

:gear: 이 기능은 어떻게 작동합니까?

현재 Discourse 커뮤니티로 이동할 때 모든 카테고리 데이터가 로드됩니다. 이를 “즉시 로딩(eager loading)”이라고 하며, 많은 카테고리를 가진 사이트에는 이상적이지 않습니다. 첫 번째 렌더링 전에 많은 양의 정보가 전송되어 전체 로딩 시간이 증가하기 때문입니다.

새로운 방법은 “지연 로딩(lazy loading)”이라고 불리며, 카테고리에 대한 정보를 실제로 필요할 때까지(예: 카테고리 검색, 이동 또는 링크, 해당 카테고리를 언급하는 주제나 게시물 읽기 등) 로드하는 것을 지연시킵니다. 전송되는 데이터가 적을수록 로딩 시간이 빨라지고 사용자는 더 만족합니다! :star:

:discourse: Meta의 멤버인 여러분에게 이것이 무엇을 의미합니까?

우리는 이 기능을 내부적으로 철저히 테스트해 왔지만, 수행된 작업의 규모를 고려할 때 버그가 도입될 가능성이 약간 있습니다. 카테고리와 관련된 이상 증상이 발견되면 이 주제에 답글을 달거나 Contribute > Bug 주제를 열어 알려주세요.

:people_holding_hands: 여러분이나 여러분의 커뮤니티에 이것이 무엇을 의미합니까?

우리가 호스팅을 제공하는 경우든 자체 호스팅을 하는 경우든, 이 기능은 기본적으로 비활성화되어 있으며 눈에 띄는 변화가 없어야 합니다.

그러나 커뮤니티를 확장하여 많은 카테고리를 가질 계획이라면 이 기능을 활성화하는 것을 강력히 권장합니다.

미래에는 이 기능을 기본적으로 활성화하고, 궁극적으로 카테고리를 “즉시 로딩”하는 코드를 비추천(deprecate)하고 제거할 것입니다.

:technologist: 플러그인 및 테마 개발자에게 이것이 무엇을 의미합니까?

일반적으로 대부분의 플러그인에는 거의 또는 전혀 변경이 필요하지 않을 것입니다. 단, 코어의 카테고리 컴포넌트나 사전 로드된 데이터를 사용하는 경우입니다(예: 페이지 로드 시 이미 표시되는 카테고리에만 쿼리를 실행하는 것. 이는 이미 사전 로드되었음을 의미하므로).

아직 로드되지 않은 카테고리에 대한 정보를 사용하려고 할 때 일부 문제가 발생할 수 있습니다. Category.findByIds 메서드는 이미 로드된 카테고리만 반환하는 반면, Category.asyncFindByIds는 정보가 아직 로드되지 않은 경우 서버에서 조회를 수행할 수 있습니다.

44개의 좋아요

게시글 아래에 있는 링크 중 하나를 사용하여 다른 카테고리의 주제로 이동할 때 카테고리 정보가 누락되는 것 같습니다. Contributing translations to Discourse 를 새 탭에서 열고 Switching from Transifex to Crowdin 로 이동하면 다음과 같이 보입니다:


새로고침을 하면 카테고리가 표시됩니다.

6개의 좋아요

제가 #site-feedback:theme-feedback 주제를 게시한 후, 해당 카테고리의 주제에서 카테고리 배지가 표시되지 않았습니다.

4개의 좋아요

컴포저의 검색 기능은 일치하는 카테고리가 있는지 여부를 판단할 수 없습니다.

3개의 좋아요

이것도 지연 로드되는 카테고리(lazy loaded categories)와 관련이 있나요?

2개의 좋아요

네. docs 플러그인이 깨지는 문제가 있어서 당분간 lazy_load_categories를 비활성화해 두었습니다.

5개의 좋아요

해당 실험을 다시 활성화했습니다. 마지막으로 활성화된 이후 수정된 내용은 다음과 같습니다:

  • 헤더의 카테고리가 올바르게 표시되며, 특히 게시물 링크나 추천 주제를 통해 한 주제에서 다른 주제로 이동할 때에도 올바르게 표시됩니다.
  • 이전에 방문하지 않은 카테고리에서 새 주제를 생성한 후에도 배지 스타일링이 올바르게 표시됩니다.
  • Docs 플러그인이 카테고리 데이터를 사전 로드하므로, /docs 페이지가 이제 올바르게 렌더링됩니다.
  • 내부 검토를 통해 발견된 기타 버그

아직 해결되지 않은 유일한 버그는 특정 쿼리(짧은 쿼리나 정지 단어만 포함된 쿼리)에 대한 검색 결과가 표시되지 않는 문제입니다.

검색 기능을 더 강력하게 만들고자 전문 검색 엔진을 카테고리까지 확장했는데, 이는 원치 않는 부수 효과입니다. 이전 검색 알고리즘으로 되돌려야 할 것 같지만, 아직 조사 중입니다.

7개의 좋아요

/about 페이지의 카테고리 모더레이터 카테고리가 누락되어 있습니다

그리고 내 초안을 보면 카테고리도 누락되어 있습니다.

그룹 또는 사용자의 활동 페이지와 내 프로필의 알림(예: https://meta.discourse.org/my/notifications/responses)에서 카테고리가 로드되지 않습니다.

메시지 내 링크를 통해 또는 받은 편지함에서 새 메시지를 클릭하여 새 주제를 시작하기 위해 작성기를 열었을 때, 작성기 왼쪽 상단의 봉투 아이콘을 사용하여 초안을 새 주제 초안으로 변경하면 카테고리를 선택할 옵션이 없습니다.

8개의 좋아요

/categories를 열면 #documentation의 모든 하위 카테고리가 표시되지 않습니다 (#documentation:theme-developers는 #documentation을 클릭할 때까지 새로고침 후 사라집니다).

또한 카테고리 검색용 자동완성 기능이 작동하지 않습니다. 대부분의 카테고리가 새로고침 후 표시되지 않습니다.

3개의 좋아요

관련 주제 목록에도 카테고리가 없습니다.

두 번째 스크린샷의 카테고리를 로드하기 위해 해당 주제를 방문했을 때, 두 번째 #announcements:blog 주제에서 제목 아래 카테고리가 누락되어 있는 것을 확인했습니다. 관련 주제가 정상적으로 작동할 경우 이러한 문제가 발생하지 않아야 하므로, 이는 중요하지 않을 것으로 추정합니다.

4개의 좋아요

이것이 3.2.1 안정판에서 제 플러그인 중 하나에서 문제를 일으키는 것 같습니다.

Site.current().categories를 검사하고 지연 로딩이 활성화되어 있을 때, 제가 필요한 카테고리(예: 현재 토픽의 카테고리)만(오직) 확인됩니다. 그러나 모든 preloaded_category_custom_fields가 누락되어 있습니다.

지연 로딩을 끄면(다른 모든 카테고리와 함께) 해당 필드들이 나타납니다.

즉, 올바른 카테고리는 사전 로드되고 있지만, 해당 카테고리의 사전 로드된 필드가 빠져 있습니다.

1개의 좋아요

이 문제가 수정되었습니다. :white_check_mark:

이것도 수정되었습니다. :white_check_mark:

이것도 함께 수정되었습니다. :white_check_mark:

나머지 문제들은 현재 작업 중입니다. 피드백을 주셔서 감사합니다, @Moin.

카테고리가 어떻게 로드되었는지에 따라 다릅니다. 일부 코드 경로에서 부분적인 카테고리 데이터만 로드될 수 있다는 점에 동의합니다. 이 문제에 대해 팀과 논의할 것입니다. 다만, 프론트엔드가 데이터에 액세스하기 전에 필요한 데이터를 요청해야 하는 상태로 전환되고 있기 때문입니다.

공개 플러그인인가요? 그렇다면 확인해 볼 수 있습니다. 일반적으로 가장 인기 있는 플러그인들은 "카테고리 지연 로딩"이 활성화되어도 작동하도록 하기 위해 매우 적은 변경 사항만 필요했습니다.

3개의 좋아요

[quote=“Bianca, post:24, topic:299836, full:true, username:nbianca”]

이 문제가 수정되었습니다. :white_check_mark:

[/quote]부모 카테고리의 색상이 여전히 누락되어 있습니다.


2개의 좋아요

이 문제는 일반적인 토픽 뷰에서 발생하고 있습니다.

특별한 점이 있다면, 해당 코드가 post-contents:before 위젯에 연결된 위젯 내부의 초기화 파일(initializer)에 위치해 있다는 것입니다. 이 플러그인은 공개되어 있지 않지만, 제 GitHub 사용자 이름을 개인 메시지로 보내주시면 접근 권한을 드릴 수 있습니다. 아니면 tar.gz 파일을 개인 메시지로 보내드릴 수도 있는데, 이 방법이 더 편할 수도 있습니다. 이 플러그인은 오래되었고 원래 제가 작성한 것은 아니지만, 제가 봐도 명백히 잘못된 부분은 보이지 않습니다.

그렇다면 그 방식은 어떻게 작동하나요? 카테고리가 존재하는지 아닌지에 대한 이진적인 상황은 이해합니다. 하지만 특정 커스텀 필드가 없는 카테고리를 만나게 되면, 해당 커스텀 필드가 실제로 존재하지 않는 것인지, 아니면 아직 완전히 로드되지 않은 것인지 어떻게 구별할 수 있을까요?

즉, 이런 일은 절대 일어나서는 안 됩니다!

1개의 좋아요

그러면 이 문제에 대해 @nbianca 님께서 도와주실 수 있을까요?

lazy loading이 활성화되어 있을 때, 제 공개 private replies 플러그인의 카테고리 객체에서 여기 커스텀 필드가 누락됩니다.

      if ((siteSettings.private_replies_on_selected_categories_only == false) || (topic?.category?.custom_fields?.private_replies_enabled)) {
        return this.currentUser && ((this.currentUser.id == topic_owner_id) || this.currentUser.staff);
      }

그리고 어떻게 가져와야 할지 전혀 모르겠습니다.

저는 여기에서 preloaded category custom fields에 해당 필드를 추가하고 있습니다.

Site.preloaded_category_custom_fields << 'private_replies_enabled'

팀 내에서 이 문제를 내부적으로 논의하고 있지만, 주제에 대한 카테고리를 미리 로드하는 방식을 수정해야 할 것 같습니다.

2개의 좋아요

카테고리가 없는 또 다른 장소를 발견했습니다: AI 검색 결과입니다.

2개의 좋아요

meta.discourse.org을 새로고침한 후 + New Topic을 선택하면 토픽 템플릿이 표시되지 않습니다. 처음에는 영상에서 보시는 것처럼 모든 기능이 정상적으로 작동합니다. 그러나 새로고침을 하면 템플릿이 사라집니다. 작성기를 다시 열면 모든 것이 다시 정상적으로 작동합니다.

참고: 사이드바에 #support가 있는 경우, 새로고침 전에 이를 제거해야 합니다.

1개의 좋아요

기반을 갖추고 확장성까지 챙긴 상태.