2017-04-10 14 views
0

달성하려는 목표는 무엇입니까? 클라이언트 측에서 진행 막대를 표시하는 다양한 div가 있습니다. 각 진행 막대는 다른 상태/수준을 보여줍니다. 그들은 모두 동적으로 업데이트됩니다. 성능 문제없이 동적으로 계속 업데이트해야합니다.성능 문제없이 유성기를 사용하여 클라이언트 측에서 여러 진행률 막대 동기화

무슨 성능 문제가 있습니까? 서버 측에서 클라이언트 쪽에서 실행중인 각 진행률 막대의 상태를 확인할 수있는 일부 논리가 실행 중입니다. 현재 setInterval은 10 분의 1 초 동안 진행 막대 상태 수준을 계속 업데이트하도록 설정되어 있습니다. 먼저 템플릿을 도우미를 통해 상태를 반환하여 템플릿을 업데이트하기 위해 클라이언트 쪽에서 사용한 mongo 컬렉션에 데이터를 직접 저장하여이 작업을 수행했습니다. 이것은 훌륭하고 잘 작동합니다 (대부분). 그러나 동적 진행과 함께 이미 실행중인 본체 템플릿의 ontop을 열 수있는 모달 상자 (반응식 모달 상자)를 추가하면 속도가 크게 저하되기 시작합니다. 모달 상자에는 사용자가 클릭 한 div에 대한 특정 진행률 막대도 표시됩니다.

짧게 말하면 성능에 미치는 영향은 극적이며 크롤링합니다. 나는 이것이 mongo 데이터베이스를 지속함으로써 많은 진행 바 업데이트를 수행 할 필요가있는 서버 때문이라고 생각했습니다. 그것은 너무 많았습니다.

이 문제를 해결하기 위해 무엇을 시도 했습니까? 각 진도 막대의 상태/수준을 저장하기 위해 지속성을 mongo 데이터베이스로 우회하려고했습니다. 이것은 패키지 이름을 구현하여 수행되었습니다. rocketchat:streamer

이 패키지는 "DDP를 통한 양방향 통신"을 제공합니다. 이렇게하면 서버의 로컬 캐시 된 배열에 진행률 막대 수준을 저장 한 다음 rocketchat를 통해 스트리밍을 통해 DDP를 통해 데이터를 클라이언트에 직접 푸시 할 수있었습니다. 실제로 성능이 향상되었습니다.

이제는 문제가 무엇이며 왜이 질문을 제출하십니까?

둘 다 전략에 관계없이 성능 문제가 아직 해결되지 않았으며 개발 서버에 로그인 된 여러 연결된 장치의 동기화가 정확한 진행률 막대 동기화 상태를 얻지 못하는 경우가 있습니다. 브라우저에 연결된 모든 사용자에 대해 항상 정확한 상태를 표시하려면 모든 진행 막대가 필요합니다. 예를 들어 템플릿에 9 개의 다른 진행률 표시 줄을 표시 할 수있는 능력이 필요합니다. 사용자가 고유 한 div 중 하나를 클릭하면 컨 스턴스에서 진행률 표시 줄이 나타나 모달 내에 또 다른 진행률 표시 줄을 표시 할 수 있습니다.

남자, 서버에서 수행되는 로직에서 데이터를 가져옴으로써 Meteor가 클라이언트 측에서 여러 개의 다른 진행 막대를 동기화하는 가장 좋은 방법은 무엇입니까?

나는 이것을 구현하는 간단하고 쉬운 방법을 찾고있다. 이러한 유형의 유스 케이스에 대해 Meteor와 성능 및 동기화를 모두 수행하는 간단한 방법이 있어야한다는 것을 알고 있습니다.

도움을 주시면 감사하겠습니다.

은 차임에서 제공하는 사회에서 모든 사람에게 감사드립니다.

+1

점은 아마 중요한 단서이다. 원래의 접근 방식 (진보와 함께 몽고 업데이트, 펍 - 서브가 그 일을하도록 함)은 견고합니다. 혹시 다른 구독에서 "추가"진행률 표시 줄을 처리 했습니까? 이것이 클라이언트 측 문제인지 서버 측 문제인지 알아 냈습니까? 클라이언트에서 네트워크 트래픽의 모양 (ws)은 어떻게 보입니까? 모달을 그리면 헬퍼가 예상보다 더 많이 업데이트됩니까? –

+1

답변 해 주셔서 감사합니다. 마침내 서버 쪽의 Meteor.publish가 컬렉션에서 찾기를 실행 중이지만 더 이상 활성화되어 있지 않은 문서를 포함한 모든 문서를 반환한다는 것을 알게 된 후 마침내 해결 방법을 찾았습니다. 컬렉션은 계속해서 커졌으며 더 이상 활성화되지 않아이 데이터의 대부분은 필요하지 않았습니다. 나는 $ nin을하기 위해 find를 수정했고 만료 된 오래된 데이터를 클라이언트에 게시하는 것을 포함하지 않았다. 주요 성능이 향상됩니다. 또한 훌륭한 기사를 여기에서 찾아 냈습니다 : https://kadira.io/academy/meteor-performance-101/content/reducing-pubsub-data-usage – jremi

답변

0

이것은 Meteor.publish 통해 지속에서 이전 만료 된 모든 데이터를 포함하지 않음으로써 해결되었다 ....

이야기의 도덕은 필요하지 않은 추가 데이터를 고객에게 게시하지 않았는지 확인하십시오. 예를 들어 $ nin으로 검색하고 특정 유형의 데이터를 제외하고 결과를 필터링하면 Meteor 앱의 성능이 크게 향상됩니다. 이것은 또한 여기에 다른 예를 더 심도있게 검토 할 수 있습니다 : 당신이 추가 진행률 표시 줄 모달를 도입 할 때까지 문제가 실행되지 않은

Kadira.io - Meteor Performance 101