development

Node.js에서 process.nextTick의 적절한 사용 사례는 무엇입니까?

big-blog 2020. 12. 30. 20:15
반응형

Node.js에서 process.nextTick의 적절한 사용 사례는 무엇입니까?


나는 process.nextTick몇 군데에서 사용되는 것을 보았고 그것이 무엇을 위해 사용되고 있는지 잘 모르겠습니다 .

process.nextTickNode.js 의 주요 / 적절한 사용 사례는 무엇입니까? 문서는 기본적으로 더 최적화 된 방법이라고 말하지만 setTimeout별로 도움이되지는 않습니다.

저는 많은 ActionScript를 사용 했으므로 코드를 실행하기 위해 "다음 프레임까지 대기"라는 개념은 어느 정도 의미가 있습니다. 예를 들어 애니메이션을 실행하는 경우 매 밀리 초가 아닌 모든 프레임을 업데이트하도록 할 수 있습니다. 여러 변수 설정을 조정하려는 경우에도 이치에 맞습니다. 프레임 1에서 변수를 변경하고 프레임 2에 변경 사항을 적용합니다. Flex는 구성 요소 수명주기에서 이와 같은 것을 구현했습니다.

내 질문은 서버 측 JavaScript에서 이것을 무엇에 사용해야합니까? 이런 종류의 미세 조정 된 성능 / 흐름 제어가 필요한 곳을 바로 볼 수 없습니다. 올바른 방향의 지점을 찾고 있습니다.


process.nextTick콜백을 대기열에 넣습니다. 이 큐의 모든 콜백은 이벤트 루프의 다음 틱이 시작될 때 실행됩니다. 기본적으로 호출 스택을 지우는 방법으로 사용됩니다. 문서에 '같다 setTimeout' setTimeout(function() { ... }, 1)는 것은 브라우저에서 사용 하는 것과 같다는 의미 입니다. 동일한 사용 사례가 있습니다.

한 가지 사용 사례는 이벤트를 바인딩해야하는 일부 개체에 대한 생성자를 만드는 것입니다. 그러나 인스턴스를 생성하는 코드가 아직 이벤트에 바인딩 할 시간이 없었기 때문에 이벤트를 즉시 생성 할 수 없습니다. 생성자 호출은 호출 스택에서 그 위에 있으며 동기식 작업을 계속하면 그대로 유지됩니다. 이 경우하려는 작업 process.nextTick을 진행하기 전에 a 사용할 수 있습니다 . 생성자를 사용하는 사람이 이벤트를 바인딩 할 충분한 시간을 갖게됩니다.

예:

var MyConstructor = function() {
  ...
  process.nextTick(function() {
    self._continue();
  });
};

MyConstructor.prototype.__proto__ = EventEmitter.prototype;

MyConstructor.prototype._continue = function() {
  // without the process.nextTick
  // these events would be emitted immediately
  // with no listeners. they would be lost.
  this.emit('data', 'hello');
  this.emit('data', 'world');
  this.emit('end');
};

이 생성자를 사용하는 미들웨어 예제

function(req, res, next) {
  var c = new MyConstructor(...);
  c.on('data', function(data) {
    console.log(data);
  });
  c.on('end', next);
}

단순히 이벤트 루프의 끝에 함수를 배치합니다. 일반적으로 무거운 동기 처리를 수행하는 경우 프로세스가 다른 이벤트를 차단하지 않도록 모든 코드 청크에 대해 process.nextTick을 사용하는 것이 좋습니다. 그렇게하면 proess.nextTick에 도달하고 함수가 종료 된 후 http 요청과 같은 다른 이벤트를 처리 한 다음 process.nextTick 콜백에 도달하여 실행합니다.

그 외에는 호출 스택이 오버플로되지 않고 함수를 재귀 적으로 실행하는 데 사용할 수 있습니다!

편집 : 현재 대기중인 I / O 이벤트 (새 웹 요청 처리와 같은) 이후에 실행될 기능 을 예약하는 노드의 setImmediate 함수 가 있습니다 . 이 질문에 대한 답변에서 사용 사례를 설명했습니다 .

참조 URL : https://stackoverflow.com/questions/8112914/what-are-the-proper-use-cases-for-process-nexttick-in-node-js

반응형