대개 JS 스크립트가 문서의 머리글에 삽입되는 이유는 무엇입니까? 그것은 표준에 의해 요구 되는가, 아니면 특별한 이유없이 단지 대회 일 뿐인가?일반적으로 JS 스크립트는 문서의 헤더에 삽입됩니까?
답변
그냥 규칙입니다. 항상 페이지를로드하기 전에 페이지를 표시 할 수 있도록 스크립트를 본문 끝 부분에 두는 것이 좋습니다. 항상로드하는 것이 좋습니다. 또한 document.body
은 문서가로드되거나 본문에 스크립트를 넣을 때까지 사용할 수 없습니다.
단순한 대회가 아니며 차이점이 있습니다. –
과거의 관행은 종종, 로딩을 개선하기 위해 하단에있는 스크립트를 배치 이제 것이 좋습니다 중앙 집중화 스크립트와 스타일을 위해서 (등)에 대한 헤더에 배치하는 것이 었습니다 있지만 http://developer.yahoo.com/performance/rules.html#js_bottom
보기 나머지 페이지의 속도.
는 인용 :스크립트로 인한 문제는 그들이 병렬 다운로드를 차단하는 것입니다. HTTP/1.1 사양은 브라우저가 호스트 이름 당 두 개 이상의 구성 요소를 병렬로 다운로드하지 못하도록 제안합니다. 여러 호스트 이름에서 이미지를 제공하는 경우 두 개 이상의 다운로드가 동시에 발생하도록 할 수 있습니다. 그러나 스크립트가 다운로드되는 동안 브라우저는 다른 호스트 이름에서도 다른 다운로드를 시작하지 않습니다.
일부 상황에서는 스크립트를 맨 아래로 이동하는 것이 쉽지 않습니다. 예를 들어, 스크립트가 document.write를 사용하여 페이지 내용의 일부를 삽입하면 페이지에서 더 아래로 이동할 수 없습니다. 범위 지정 문제가있을 수도 있습니다. 많은 경우 이러한 상황을 해결할 수있는 방법이 있습니다.
지연된 스크립트를 사용하는 것이 좋습니다. DEFER 속성은 스크립트에 document.write가 포함되어 있지 않으며 브라우저에서 렌더링을 계속할 수 있다는 것을 나타냅니다. 불행히도 Firefox는 DEFER 속성을 지원하지 않습니다. Internet Explorer에서 스크립트는 지연 될 수 있지만 원하는만큼 실행되지 않을 수 있습니다. 스크립트를 연기 할 수 있으면 스크립트를 페이지 맨 아래로 이동할 수도 있습니다. 그러면 웹 페이지가 더 빨리로드됩니다.
<script src="url"></script>
스크립트가 페치되고 컴파일되고 실행되었다 성분까지 다른 페이지의 다운로드를 차단 것이다. 가능한 한 늦게 으로 스크립트를 호출하는 것이 더 편하며, 이미지 및 다른 구성 요소의 로딩은 이 지연되지 않도록 입니다.
스크립트가 수행하는 작업에 따라 다릅니다. 코드가 onLoad 이벤트로 래핑 된 경우 거의 즉시 반환되고 그렇지 않으면 차단하지 않기 때문에 중요하지 않습니다. 배치가 중요하기 때문에 어디에 배치해야 하는지를 지정해야합니다.
마지막에 넣는 것으로, 사용자가 페이지를보기 시작할 때 약간의 시간을줍니다. 그냥 자신에게 질문을 - 자바 스크립트없이 내 사이트가 작동합니까? 그렇지 않다면 내 의견으로는 DOM이 완전히로드 된 경우 (이미지와 같은 바이너리 콘텐츠 포함)에만 onLoad 코드가 실행되기 때문에 어디에 두는 지 알 수 없습니다. javascript없이 사용할 수 있다면 이미지를 더 빨리로드 할 수 있도록 끝까지 넣으십시오.
또한 대부분의 JS 라이브러리는 onLoad 문제를 해결하는 특수 코드를 사용하며 DOM에로드되고 이진 데이터를 기다리지 않으면 실행되는 맞춤 이벤트를 사용합니다.
이제 모든 것을 썼다. 나는 내 자신에 대한 질문을 얻었다. 말을합니까를 사용하여 jQuery의
$(document).ready(function() {});
페이지의 끝에서 스크립트 태그를 onLoad 이벤트를 사용하고 시작 퍼팅과 동일 퍼팅? 브라우저에서 목록의 마지막 스크립트 인 스크립트를로드하기 전에 브라우저가 모든 이미지를로드하므로 동일해야합니다. 대답을 알고 있다면 (나는 너무 게으르며 atm을 시험하기에는 너무 늦다) 코멘트를 남겨라.
$ (document) .ready! = window.onload, 페이지 DOM이 빌드되었을 때 발생하는 DOMready 이벤트를 사용합니다. 일반적으로 페이지가 렌더링 될 때 onload가 일반적으로 IE, FF 등에서 다르게 작동합니다. 자세한 내용은 준비된 이벤트에 대한 jQuery 문서를 참조하십시오. – roryf
알아, 내 대답을 다시 읽어라. 문제는 이론적으로 페이지 끝 부분에 포함 된 스크립트 파일에서 사용되는 경우 onLoad와 동일하게 작동해야한다는 것입니다. bowser는 웹 서버에서 스크립트를 요청하기도 전에 먼저 DOM과 모든 이미지를로드해야합니다. 그리고 제 질문은이 가정이 실제로 정확한지 아닌지에 관한 것입니다. –
확실히 :이 경우 브라우저가 _started_ 모든 이미지를로드해야하지만 HTML이 완전히 구문 분석되면 DOMready 이벤트가 즉시 실행됩니다. 이미지는 일반적으로 잠시 동안 계속로드됩니다. onLoad는 모든 것이 완전히로드되면 시작됩니다. –
나는 당신이 선택한 대답이 완전히 정확하지는 않으며 분명히 최선이 아니라고 생각합니다. –
답변을 추가하지 않습니다. Google 애널리틱스에 익숙하다면 문서 본문 끝 부분에 GA 스크립트를 배치하고 싶을 것입니다. –
@ 마이 쿠 : 나는 당신에 동의합니다. 어쩌면 당신은 자신의 대답을 기꺼이 받아들이거나 (또는 그렇지 않은 경우) 도울 수 있습니다. 나는 그랬다. –