2016-10-11 3 views
1

내 문제는 여기에 있습니다.Meteor에서 중복되는 구독으로 인해 성능이 저하됩니까?

사용자가 메모장에 메모를 저장할 수있는 앱이 있습니다.

현재 사용자가 메모장을 클릭하면 노트 패드를 처음으로 5 노트 돌려주는 발행물을 구독합니다.

그래서 사용자가 새로운 메모장으로 이동할 때마다 새로운 구독이 설정되고 해당 메모장의 5 개의 노트가 minimongo로 끝납니다. 그래서 minimongo는 한 번에 노트 컬렉션에 5 개의 노트 만 가지고 있습니다.

사용자 경험을 향상시키기 위해 전체 앱의 초기로드시 발행물을 변경하여 모든 메모장과 처음 5 개의 노트를 반환하는 게시물을 구독합니다. 각 메모장마다. 그래서 지금 우리는 (5 x (notepads) #) 개의 노트를 항상 가지고 있습니다.

그래서 초기로드가 약간 무거워졌지만 그 이후에는 메모장 간 탐색이 훨씬 빨라 졌으면합니다.

로드시 나는 사용자 메모장을 반환하고 각 메모장마다 5 개의 노트를 반환하는 myInfo에 가입합니다.

메모장을 실제로 클릭하면 myNotepadInfo에 가입하고 메모장의 첫 번째 5 노트를 반환합니다. 처음 구독이 이미이 정보를 검색 했으므로, minimongo에있는 문서는 실제로 변경되지 않습니다. 하지만 템플릿에 구독에 따라 메모 메커니즘을 추가로로드하기 때문에 여전히 myNotepadInfo에 가입하고 싶습니다.

그래서 내 앱이 이러한 변경 사항을 완벽하게 지원하지만 실제로이 기능이 성능 향상에 도움이되는지 확실하지 않습니다. 변경 후 노트 패드가 어떻게로드되는지 구체적인 차이점을 알 수 없습니다.

기본적으로 나는 두 번째 구독이 겹쳐서 초기 구독을합니다.

내게는 두 번째 구독이 초기 구독과 겹치기 때문에 클라이언트에게 문서를 더 적게 전송해야하므로 더 빨라야합니까?

+0

[meteor documentation] (https://docs.meteor.com/api/pubsub.html#Meteor-subscribe) : '* 그러나 실행 기능의 다음 반복이 동일한 레코드 세트에 가입하면 (동일한 이름과 매개 변수), Meteor는 낭비적인 탈퇴/재가입을 건너 뛰기에 충분히 똑똑합니다. * ' 시작시 모든 것을 구독하는 것이 좋다고 생각하지 않습니다. 메모장을 많이 사용하면로드 시간이 크게 늘어납니다. 그것이 구독이 필요한 이유입니다. 앞으로 좀 더 동적로드/검색을 구현하려면 [쉬운 : 검색] (https://github.com/matteodem/meteor-easy-search)이 좋은 선택입니다. –

답변

0

두 가지 중요한 질문은 (1) 얼마나 많은 데이터를 클라이언트로 보내고 있습니까? (2) 몇 명의 사용자가 귀하에게 기대하고 있습니까?

두 번째 요점은 설명이 필요합니다. Meteor의 현재 (2016) pub 서브 아키텍처의 주요 구성 요소는 클라이언트 가입이 서버에 등록되고 추적된다는 것입니다. 재사용 할 수없는 추가 구독 (다른 구독을 복제하지 않음)은 앱의 CPU 요구 사항을 증가시킵니다. 여기에서는 각 사용자가 메모장을 소유하고있는 것처럼 들리지만 (그렇다고해도 그렇지 않을 수도 있음) 그렇다면 낮은 가입 재사용을 의미합니다. 각 사용자는 사용자간에 재사용 할 수 없으므로 메모장을 받기 위해 독립적 인 구독이 필요합니다. 따라서 사용자 당 두 개의 메모장 구독은 메모장 구독으로 인한 앱의 CPU 사용 공간의 두 배를 효과적으로 차지합니다.

반드시 나쁜 것은 아닙니다. 앱이 관리 용, 사내 서비스 용 또는 더 적은 수의 사용자 용으로 설계된 경우 상당한 차이가 발생하지 않을 수 있습니다. 높은 사용자 수를 기대하거나 기대하는 소비자 지향적 인 앱의 경우 나쁜 선택입니다.

관찰자 재사용에 대한 Kadira의 좋은 기사 is here 및 유료 방탄성 기사를 추천합니다.

마지막으로 이러한 문제를 개선하기위한 Kadira 도구 인 Subs ManagerFast Render을 확인할 수 있습니다. 그래도 그들이 적극적으로 유지되고 있는지 확인해야합니다.

+0

안녕하세요, Jeremy에게 감사드립니다. 사용자는 자신의 정보를 구독합니다. 이 출판물에서는 쿼리에서'this.userId'를 사용하여 노트와 노트를 반환합니다. 어떻게 또 할 수 있니? 이해가 안되는데, 이것이 자신의 데이터를 구독하는 유일한 방법 일 것 같습니다. 사용자가 구독을 공유하도록 설정할 방법이 없습니다. 내가 놓친 게 있니? – nearpoint

+0

나는 당신이 아무것도 놓치고 있다고 생각하지 않는다. 출판물에 'Notepads.find (return user {userId : this.userId})'와 같은 것을 쓰는 경우 관찰자를 재사용 할 수 없으므로 앞에서 간략히 설명한 두 가지 전략 중 첫 번째 방법을 사용하는 것이 좋습니다. 질문. 사용자 당 메모장 당 두 개의 구독으로 CPU 문제를 더 빨리 초래할 수 있습니다. 이는 주요 Meteor 병목 현상 병목 현상입니다. (효율성을 약간 높이는 유일한 방법은 위에 링크 된 Kadira 기사에서 언급 한 this.userId에 대해 null 체크를 수행하는 것이고 이것은 주요 문제를 실제로 다루는 것이 아닙니다.) –