2012-11-29 2 views
3

일부 미들웨어로 인해 파일의 마지막 수정 시간을 알아야하는 값을 직접 반환해야하는 NodeJS의 문제가 발생했습니다. 분명히 올바른 방법은 내가 사용하고있는 미들웨어,려면 getFilename는 값을 반환해야 인해, 그러나NodeJS Filesytem 동기화 및 성능

getFilename: function(filename, next) { 
    fs.stat(filename, function(err, stats) { 
     // Do error checking, etc... 
     next('', filename + '?' + new Date(stats.mtime).getTime()); 
    }); 
} 

을하는 것, 그래서 내가 뭐하는 거지 :

getFilename: function(filename) { 
    stats = fs.statSync(filename); 
    return filename + '?' + new Date(stats.mtime).getTime()); 
} 

내가 완전히 이해가 안 돼요 본질적으로 NodeJS 이벤트 루프의 본질적으로, 내가 궁금해하던 점은 statSync가 어떤 특별한 소스를 가지고 있다면 어떻게 든 이벤트 루프를 펌핑했다는 것입니다 (또는 노드에서 호출되는 명령의 스택이 수행되기를 기다리고 있습니다). 로딩 또는 정말로 차단하고 있으며이 코드가 성능 악몽을 일으킬 수 있으며 나는 우리가있는 미들웨어를 다시 작성해야합니다. 콜백을 사용 하시겠습니까? 이벤트 루프가 디스크에서 대기하는 동안 계속 진행할 수 있도록 특별한 소스가 있다면 다른 곳에서도 사용할 수 있습니까 (일부 약속 라이브러리 또는 일부).

+0

IO가 없기 때문에 미들웨어가 비동기 실행을 허용하지 않는 것은 이상한 일입니다. – usr

답변

2

아니요, 여기에는 마법이 없습니다. 함수의 중간에 차단하면 모든 것이 차단됩니다.

성능이 문제가되는 경우 유일한 방법은 미들웨어의 해당 부분을 다시 작성하거나 사용 방법을 독창적으로 만드는 것입니다.