2013-09-24 3 views
4

나는 res.render 표현 방식이 차단 방식으로 약 400ms 걸리는 nodejs 응용 프로그램이 있습니다. 비 차단 방식으로 실행하려면 어떻게 처리해야합니까? 내 아파치 벤치 마크는 약 30 개의 동시 요청을 실행하는데 12 초가 걸린다. 더 나은 방법으로 이것을 어떻게 구현합니까? Express res.render를 비동기식으로 실행

var start = +new Date; 
//fetch data from redis 
console.log('time taken to fetch data from redis ' + (+new Date - start)); //30 ms 
res.render('some_jade_view', params); 
console.log('time taken to render data ' + (+new Date - start)); //530 ms 

나는 process.nextTick을 시도했지만 많은, AB 결과이 같은 도움이되지 않았다.

+0

몇 가지 코드를 보여주십시오. 특히 .render 호출이있는 부분. – Krasimir

+0

@Krasimir 코드를 추가했지만 렌더링에 500ms의 시간이 걸리는 비취보기이기 때문에별로 도움이되지 않습니다. 이제 자연에서 차단되는 것으로 나타났습니다. 'res'는 익스프레스 라우트로 전달되는 응답 객체입니다. – user883499

+0

옥보기가 매우 복잡합니까? 렌더를 지연시킬 수있는 미들웨어가 추가 되었습니까? – WiredPrairie

답변

3

나는 당신이 정말로 https://github.com/caolan/async을 조사해야한다고 생각한다. 비동기의 REPO에서 직접

:

비동기 비동기 자바 스크립트 작업을위한 직선 앞으로 강력한 기능을 제공하는 유틸리티 모듈입니다. (...)

비동기은 (MAP 감소 필터 각 ...) 통상 '기능' 용의자를 포함 약 20의 기능뿐만 아니라 비동기 제어 플로우에 대한 일반적인 패턴 제공 (병렬, 직렬, 롱 ...). 모든 이 함수는 단일 콜백을 비동기 함수의 마지막 인수로 제공하는 node.js 규약을 따릅니다.

건배.

편집 : 비동기 방식으로보기를 렌더링하면 실제로 시간을 절약하는 데 도움이되는지 확실하지 않습니다. 여러분은 클라이언트 측에서 데이터를 가져 와서 템플릿을 구현하는 것이 좋습니다. 이를 위해서는 Angular과 같은 프론트 엔드 프레임 워크를 사용하거나 수동으로 할 수 있습니다.

관련 문제