2014-07-22 4 views
0

나는 클라이언트 대 서버에서 컬렉션의 업데이트/삽입의 장점과 단점에 대해 질문이 있습니다. 예를 들어 현재 플레이어를 취하고 더 이상 현재 플레이어로 설정하지 않고 새로운 현재 플레이어를 만드는 방법이 있다고 가정 해보십시오.Meteor 서버 측 업데이트/삽입 대 클라이언트 측 업데이트/삽입

Meteor.methods({ 
     currentPlayer : function() { 
       var id = Player.findOne({current:true})._id; 
       Player.update(id, {$set:{current:false}}); 
       Player.insert({current:true}); 
    ... 

클라이언트 측에서 똑같은 일을하고 대 서버에서이 일에 장점이 될 것입니다 무엇 :

'click #add' : function() { 
     var id = Player.findOne({current:true})._id; 
     Player.update(id, {$set:{current:false}}); 
     Player.insert({current:true}); 
    ... 

어쩌면 두 기술에 대한 본질적으로 중요한 차이 또는 이점이 없습니다 . 그러나 내가 있다면 그들에 대해 알고 싶습니다. 귀하의 의견을 보내 주셔서 감사합니다!

답변

3

기본적으로 지연 보상의 측면에서 많은 차이가없는 : 보상

는 문서에서이 작업을 수행하는 방법에 대한 세부 사항에 대한 좀 더 자세한 사항을있다. 클라이언트와 t 모두에서 메소드를 정의하면 그는 서버.

  • 작업이 서버에서만 완료하거나 서버에서만 의미가 어떤 부작용을 초래 할 수있다 (예를 들어 이메일을 전송 : 내 생각에, 방법을 사용하는 몇 가지 이유가있다).

  • 업데이트를 수행하고 있으며 업데이트를 수행하는 데 필요한 권한이 복잡합니다. 예를 들어, 게임의 리더 만 플레이어의 특정 속성을 업데이트 할 수 있습니다. 그런 경우는 허용/거부 규칙에서 표현하기가 매우 어렵지만 방법을 사용하여 작성하기 쉽습니다. 나는 그것이 모든 변경 함수의 작은 집합을 통해 깔때기을 강요하는 경우 상태 변이를 추론하기 쉽게 찾을 수 있기 때문에

개인적으로는 대형 프로젝트의 방법을 사용하여 선호합니다.

한편 복잡한 업데이트 규칙이 많지 않은 소규모 프로젝트에서 작업하는 경우 직접 수집 변형을 수행하는 것이 약간 더 빠릅니다.

3

가장 큰 차이점은 대기 시간 보정입니다.

Player.update/insert/remove은 어쨌든 Meteor.call을 사용합니다. 차이점은 브라우저에서 작업이 성공적으로 수행되기 전에 결과를 시뮬레이션한다는 것입니다.

서버가 2-3 초의 지연 시간을 가진 세계의 다른 곳에 있다고 가정 해보십시오. Player.insert/update을 사용하여 플레이어를 업데이트하면 마치 삽입 및 업데이트 된 것처럼 반영됩니다. 이렇게하면 UI가 반응을 느낄 수 있습니다.

Meteor.methods을 사용하면 서버가 업데이트 된 레코드를 보내길 기다립니다. 즉, 업데이트 할 때 UI에 반영되는 데 2-3 초가 걸릴 것입니다.

이 방법을 사용하면 데이터가 서버에 삽입되어 UI 응답 속도가 느려질 수 있습니다. (당신은이 너무에 대한 Player.insert & Player.update 콜백을 사용할 수 있습니다.

Meteor.methods 사용하면 또한 코드와 클라이언트 측에서 동일한 Meteor.method를 수행하여이 같은 지연 시간 보정 효과를 시뮬레이션 할 수 있습니다 당신이 원하는 그 대기 시간을 시뮬레이션 실행 . 내가 Akshat이 몇 가지 좋은 점을 가지고 있다고 생각 http://docs.meteor.com/#meteor_methods

관련 문제