샘플에 따르면
<html>
<head>
<script src="jquery.js" type="text/javascript"></script>
<script src="abc.js" type="text/javascript">
</script>
<link rel="stylesheets" type="text/css" href="abc.css"></link>
<style>h2{font-wight:bold;}</style>
<script>
$(document).ready(function(){
$("#img").attr("src", "kkk.png");
});
</script>
</head>
<body>
<img id="img" src="abc.jpg" style="width:400px;height:300px;"/>
<script src="kkk.js" type="text/javascript"></script>
</body>
</html>
대략 실행 흐름은 다음과 같습니다.
- HTML 문서가 다운로드됩니다
- HTML 문서 파싱이 시작됩니다
- HTML 파싱 도달
<script src="jquery.js" ...
jquery.js
다운로드 및 파싱
- HTML 파싱 도달
<script src="abc.js" ...
abc.js
다운로드, 파싱 및 실행
- HTML 파싱 도달
<link href="abc.css" ...
abc.css
다운로드 및 파싱
- HTML 파싱 도달
<style>...</style>
- 내부 CSS 규칙이 구문 분석되고 정의됩니다.
- HTML 파싱 도달
<script>...</script>
- 내부 자바 스크립트가 구문 분석되고 실행됩니다.
- HTML 파싱 도달
<img src="abc.jpg" ...
abc.jpg
다운로드되어 표시됩니다
- HTML 파싱 도달
<script src="kkk.js" ...
kkk.js
다운로드, 파싱 및 실행
- HTML 문서 끝 파싱
다운로드는 브라우저의 동작으로 인해 비동기식 및 비 블로킹 일 수 있습니다. 예를 들어 Firefox에는 도메인 당 동시 요청 수를 제한하는이 설정이 있습니다.
또한 구성 요소가 이미 캐시되었는지 여부에 따라 가까운 미래 요청에서 구성 요소를 다시 요청하지 않을 수 있습니다. 구성 요소가 캐시 된 경우 실제 URL 대신 캐시에서 구성 요소가로드됩니다.
구문 분석이 종료되고 문서가 준비되어로드되면 이벤트 onload
가 시작됩니다. 따라서 onload
발사되면 $("#img").attr("src","kkk.png");
실행됩니다. 그래서:
- 문서가 준비되었으며 온로드가 시작되었습니다.
- 자바 스크립트 실행 적중
$("#img").attr("src", "kkk.png");
kkk.png
다운로드되어로드됩니다 #img
$(document).ready()
이벤트는 실제로 모든 페이지 구성 요소가로드 및 준비가되었을 경우, 트리거 된 경우입니다. 그것에 대해 자세히 읽으십시오 : http://docs.jquery.com/Tutorials:Introducing_$ (document) .ready ()
편집-이 부분은 병렬 부분에 대해 더 자세히 설명합니다.
기본적으로 브라우저는 일반적으로 HTML 파서, Javascript / DOM 및 CSS의 3 가지 방법으로 각 페이지를 실행합니다.
HTML 구문 분석기는 마크 업 언어의 구문 분석 및 해석을 담당하므로 다른 두 구성 요소를 호출 할 수 있어야합니다.
예를 들어 파서가이 줄을 가로 질러 오는 경우 :
<a href="#" onclick="alert('test');return false;" style="font-weight:bold">a hypertext link</a>
파서는 3 번, 2 번은 자바 스크립트, 1 번은 CSS를 호출합니다. 먼저 파서는이 요소를 생성하고이 요소와 관련된 모든 속성과 함께이 요소를 DOM 네임 스페이스에 등록합니다. 둘째, 파서는 onclick 이벤트를이 특정 요소에 바인딩하기 위해 호출합니다. 마지막으로 CSS 스레드를 다시 호출하여 CSS 스타일을이 특정 요소에 적용합니다.
실행은 하향식이며 단일 스레드입니다. 자바 스크립트는 멀티 스레드로 보일 수 있지만 실제로는 자바 스크립트는 단일 스레드입니다. 외부 자바 스크립트 파일을로드 할 때 기본 HTML 페이지의 구문 분석이 일시 중단 된 이유입니다.
그러나 CSS 규칙은 항상 적용되므로 CSS 파일을 동시에 다운로드 할 수 있습니다. 즉, 요소는 항상 최신 CSS 규칙이 정의되어 다시 그려 져서 차단을 해제합니다.
요소는 구문 분석 된 후에 만 DOM에서 사용할 수 있습니다. 따라서 특정 요소로 작업 할 때 스크립트는 항상 창 onload 이벤트 이후 또는 window onload 이벤트 내에 배치됩니다.
이와 같은 스크립트는 오류를 발생시킵니다 (jQuery에서).
<script type="text/javascript">/* <![CDATA[ */
alert($("#mydiv").html());
/* ]]> */</script>
<div id="mydiv">Hello World</div>
스크립트가 구문 분석 될 때 #mydiv
요소가 여전히 정의되지 않았기 때문입니다. 대신 이것은 작동합니다 :
<div id="mydiv">Hello World</div>
<script type="text/javascript">/* <![CDATA[ */
alert($("#mydiv").html());
/* ]]> */</script>
또는
<script type="text/javascript">/* <![CDATA[ */
$(window).ready(function(){
alert($("#mydiv").html());
});
/* ]]> */</script>
<div id="mydiv">Hello World</div>