2017-10-26 6 views
0

최근에 나는 이것을 읽었습니다 : "ECMAScript 6 모듈은 엔진이 모듈을 동 기적으로 (예 : 서버에서)로드하는지 아니면 비동기 적으로로드하는지 (예 : 브라우저에서) 독립적으로 작동해야합니다."JS 모듈이 브라우저와 서버에서 다르게로드되는 이유는 무엇입니까 (비동기 및 동기화)?

JS가 서버와 브라우저에서 각각 비동기식으로 동기식으로로드되는 이유는 무엇입니까? 이것은 의도적입니까?

+1

서버에서 모듈 파일은 파일 시스템에서 빠르게로드되지만 브라우저에서는 네트워크를 통해로드됩니다 (속도가 느리므로 페이지를 서버에서 정지시키지 않고 비동기 적으로로드하는 것이 유리할 수 있음). 네트워크 가져 오기). 그 대답은 찾고있는 것입니까, 아니면 더 기술적 인 것입니까? 예 : 실제로 어떤 API 또는 코드가로드를 수행하는 데 사용됩니까? – apsillers

+0

서버가 파일 시스템에 직접 액세스하고 하드 드라이브에서 직접 모듈을로드합니다. 그것은 어쨌든 하드웨어의 속도에 의해서만 제한되기 때문에 비동기가 필요하지 않습니다. 반면에 브라우저는 네트워크 속도에 의해 크게 제한됩니다. 그들은 어떤 파일이로드되기를 기다리고 있기 때문에 항상 UI를 차단할 여유가 없으므로 비동기 적으로해야합니다. –

+0

@ JeremyThille은 서버가 비동기 적으로로드되지 않는 이유가 무엇입니까? 다 치지 않을 것 같습니다. 나는이 두가지를 이해하려고 노력하고있다. –

답변

2

서버는 모듈이 파일 시스템에서 신속하게로드되므로 모듈을 동 기적으로 가져 오는 것을 선호합니다. 일반적으로 동기식 코드는 쓰기 및 읽기가 더 쉽습니다. 그것은 할 수 있도록 노드에서 좋아요 : 네트워크 부하가 더 긴 시간과 동기 실행 블록을 취할 수 있기 때문에

var myModule = require("mymodule"), 
    foo = require("foo"); 
myModule.doThing(foo); 

대신 반대로

require("mymodule", function(err, myModule) { 
    require("foo", function(err, foo) { 
     myModule.doThing(foo); 
    }); 
}); 

의 비동기 코드는 브라우저에서 종종 바람직하다 UI. 백그라운드에서 모듈을 조용히로드하고 완료에 비동기 적으로 응답하면서 브라우저의 스레드가 사용자에게 응답하고 애니메이션로드 등을 표시 할 수 있도록하는 것이 좋습니다.