2014-04-15 5 views
3

사용자는 유성 앱에 여러 개의 탭을 자주 열어 둡니다. 여러 개의 중복 연결이 없도록 해당 탭이 동일한 연결 (서버의 상태)을 공유하도록하는 방법이 있습니까? 나는이 일을 스스로 할 수있는 패키지를 생각하고있다. 나는 누군가가 이것에 대해 생각해 봤는지 궁금하다. 성능에 도움이됩니다.유성 다중 탭 공유 상태

+0

나는 ** 유성 **에서 어떤 의미가 있는지 의심 스럽다. 데이터가 클라이언트에게 전달되는 방식이 사용자 정의'DDP 프로토콜 '이기 때문에이 데이터를 로컬에 캐시하고 게시/가입 메커니즘의 반응성을 동일하게 유지하는 쉬운 방법이 없다는 것을 확신합니다. 시각. –

+0

@apendua DDP는 sockjs의 래퍼 일뿐입니다? 후크 할 수 있어야하는 변경 이벤트가 있습니다. ebolyen의 대답은 클라이언트 측에서 데이터를 전달하는 방법을 보여줍니다. 나는 그것이 가능하다고 생각한다, 당신은 왜 당신이 더 자세히 설명 할 수 있습니까? – Harry

답변

2

로컬 스토리지를 통해 클라이언트 측 데이터를 공유합니다 (브라우저 데이터베이스 고려) 할 수 있습니다 :이 라이브러리는 그냥 않습니다. 일반적으로 데이터베이스를 통해 서버 측 데이터를 공유 할 수도 있습니다 (유성의 경우 MongoDB). 네트워크 연결 (컬렉션 대신)은 브라우저에서 자동으로 탭을 통해 공유됩니다.

(연결 대신) 컬렉션을 공유하는 경우 탭 (클라이언트)간에 공유하기 위해 특별한 작업을 수행 할 필요가 없습니다. 동일한 콜렉션을 관찰하는 클라이언트는 동일한 데이터를 보게됩니다.

그러나 Meteor가 제공하는 편의는 비용이 듭니다. 그 중 하나는 each client has its own partial collection copy, thus it can use/waste lots of memory입니다.

이것은 구현 세부 사항입니다. JavaScript가 편리함을 위해 더 많은 메모리와 CPU를 사용하고 낭비하는 것과 마찬가지로 네이티브 코드가 편리함과 교환되는 방식과 비슷하지만 적어도 그렇게 쉽게 할 수는 없습니다.

업데이트 : 실제 DDP 연결 '공유'의 경우 새 탭을 감지 및 연결 해제하고 localStorage를 사용하여 첫 번째 탭의 데이터를 동기화하여 활성 연결이 하나만있을 수 있습니다. 그러나 IMHO 그것은 아주 영웅적인 묘기 일 것입니다.

+0

'네트워크 연결 (컬렉션 대신)은 브라우저에서 자동으로 탭에서 공유됩니다. '각 탭마다 별도의 상태가 있습니다. 이러한 맥락에서 이것은 사실이 아닙니다. – Harry

+0

@Harry 혼란스럽게해서 유감스럽게도 그런 뜻이 아닙니다. 유성 (및 웹 서버)이 일반적으로 작동하는 방식을 감안할 때, 여러 탭에서 Meteor (클라이언트) 연결을 공유하는 것은 불가능합니다. – Sheepy

+0

나는 이것이 사실이라고 생각하지 않는다. 클라이언트 측 데이터를 공유하면 특정 탭에서 ddp를 비활성화하고 모든 연결을 강제로 1 탭으로 이동할 수 있습니다. 어쨌든 github 링크를 주셔서 감사합니다. livedata가 지금 무엇을하는지 이해합니다. 유성은 광기입니다. – Harry