2011-11-17 4 views
7

내가 좋아하는 내 페이지에서 여러 스크립트 태그가있는 경우 :외부 자바 스크립트 파일을 순차적으로 또는 병렬로로드합니까?

<script src="js/jquery-1.7.min.js" type="text/javascript"></script> 
    <script src="js/jquery.jplayer.min.js" type="text/javascript"></script> 
    <script src="js/globals.js" type="text/javascript"></script> 
    <script src="js/sound.js" type="text/javascript"></script> 

내가 이전의 것과 코드는 후자의 사람이로드 될 때 이미 사용할 수 있다는 사실에 의존 할 수 있습니까?

+0

아래의 정답 상단에 스크립트가 비동기 코드를 도입하여 실행 순서를 "중단"할 수 있다고 언급 할 만합니다.예를 들어, 첫 번째 스크립트에'setTimeout (function() {alert ("Hello");} 행이 포함 된 경우 다른 스크립트가로드 된 후 해당 경고가 표시됩니다. 사실, 전체 HTML이로드 된 후에. –

답변

5

, 스크립트가 다운로드 순차적으로 (this page 참조) : 자바 스크립트 코드는 웹 페이지의 내용과 레이아웃을 변경할 수 있습니다

때문에, 때까지 스크립트 태그를 다음과 콘텐츠를 렌더링 브라우저 지연 해당 스크립트가 다운로드되어 구문 분석되고 실행되었습니다. 그러나, 더 중요한 왕복 시간을 위해, 많은 브라우저는 이러한 스크립트 다운로드 및 실행까지 스크립트 후 문서에서 참조 [같은 스타일 시트, 이미지 및 기타 스크립트와 같은] 자원의 다운로드를 차단합니다.

+1

+1 링크입니다. – Thilo

+0

"많은 브라우저가 스크립트가 실행될 때까지 리소스 다운로드를 차단합니다."최근의 많은 브라우저가 다른 리소스를 미리 가져 오는 것으로 생각합니다 (스크립트의 결과에 관계없이 결국 필요하다고 가정). – Thilo

3

이들은 병렬로로드되지만 모든 파일이로드 된 후에 만 ​​실행됩니다. 대답은 '예'입니다. 사실에 의존 할 수 있습니다.

5

짧은 : 예 : 스크립트 태그 안에 defer 또는 async 속성을 지정하지 않고

, 스펙이 해당 파일을로드 브라우저가 순차적으로 (동기)를 가지고 있음을 말한다. 즉

, 브라우저가 필요를 발견 일반 스크립트 태그

(위하는 동안 다른 렌더링/실행 프로세스를 차단) 실행로드 얻을 수

"최신"브라우저는 여전히 해당 프로세스를 최적화하려고 시도하지만 이러한 단계를 적용해야합니다 (최소한 프로세스와 유사). 그것이 항상 당신의 <body> 태그의 하단에 더 이상의 사양없이 스크립트 태그를 배치 해야하는 이유입니다. 스크립트를로드/실행하는 동안 DOM 렌더링 프로세스도 중지됩니다.

는 것을 방지하기 위해, 당신은이 문서가 후 실행을 의미하는 스크립트입니다 브라우저에 지시

<script defer src="/foo/bar.js"></script> 

처럼, 그 스크립트 태그에 defer 또는 async (HTML5에만 해당) 속성을 지정할 수 있습니다 구문 분석되었습니다.

그들은 평행 (네트워크를 통해) 로딩 될 수있다

관련 문제