2011-10-08 5 views
2

내 앱의 프레임 워크는 웹 소켓을 통해 데이터를 보내고 다른 클라이언트의 모델을 데이터로 업데이트하는 백본 모델 축소와 관련하여 만들어졌습니다. 내 질문에 작업이 행에 5 변경 사항을 트리거하는 시간에 대한 이러한 업데이 트를 일괄해야하는 방법입니다.일괄 Backbone.js 이벤트?

동기화 방법은 모든 변경 사항을 업데이트하도록 설정되어 있지만 동시에 5 개 항목을 설정하면 5 번 연속으로 실행하지 않으려 고합니다.

다른 동기화가 시도 될 때 지워지는 동기화에 대해 setTimeout을 할 수 있다고 생각했습니다. 이것이 가장 좋은 경로처럼 보입니까, 아니면 이것을 할 수있는 더 좋은 방법이 있습니까?

감사합니다.

+0

좋은 질문입니다. 동일한 질문이 있습니다. –

답변

1

백본을 사용하여이 작업을 수행하지는 않았지만 이전에는 다른 분산 (클라이언트/서버) 응용 프로그램에서 이러한 종류의 일괄 처리 명령을 수행했습니다.

요점은 시간 초과로 시작하여 추가 최적화를 위해 배치 크기를 추가해야한다는 것입니다.

일괄 처리 크기가 10이라고 가정합니다. 9 개의 항목이 일괄 처리 된 다음 사용자가 거기에 앉아서 다른 작업을 수행하지 않으면 어떻게됩니까? 서버는 사용자가하고 싶은 일을 결코 알리지 않을 것입니다.

일반적으로 타임 아웃은 작은 배치를 얻기에 적합합니다. 그러나 많은 관련 명령을 생성하는 조치가있는 경우 타이머를 기다리는 대신 준비가 완료되는대로 모든 명령을 일괄 처리하여 전송할 수 있습니다. 명령을 작성하고 문제를 일으키는 방식으로 물건을 분리하는 데 시간이 걸릴 수 있습니다.

희망이 도움이 되었으면합니다.

1

Underscore.js는 Backbone.js 사용하는 유틸리티 라이브러리는, several functions for throttling callbacks 있습니다

  • throttle은 대부분 한 번씩 X 밀리 초를 실행하는 함수의 버전을합니다.
  • debounce는 X 밀리 초 그것이
  • after
  • 그것이 X의 번 호출 된 후에 만 ​​실행하는 함수의 버전을 만들어 호출 된 마지막 시간 이후 경과 한 경우에만 실행하는 함수의 버전을합니다.

그래서 당신이 변경됩니다 (5 개) 항목이 알고있는 경우에, 당신은이 같은 콜백을 등록 할 수 있습니다 :

// only call callback after 5 change events 
collection.on("change", _.after(5, callback)); 

하지만 그렇게하지, 그리고 당신이 가고 싶은거야 가능성 시간 초과 접근 방식 :

// only call callback 30 milliseconds after the last change event 
collection.on("change", _.debounce(30, callback)); 
+0

5 회 ** 또는 ** 30 초 요구 사항은 무엇입니까? 'after'와'debounce'가 함께 작동하는 방법? – JobaDiniz

+0

둘 다 병렬로 사용하십시오. :) – alltom