눈에 잘 띄지 않는 JavaScript : HTML 코드의 맨 위 또는 맨 아래에 <script>?


90

최근에 웹 사이트 속도 향상을위한 Yahoo 선언문 Best Practices를 읽었 습니다 . 가능한 경우 HTML 코드 하단에 JavaScript 포함을 넣을 것을 권장합니다.

하지만 정확히 언제 어디서?

닫기 전 </html>또는 후에 넣어야 합니까? 그리고 무엇보다도 언제 <head>섹션에 넣어야 할까요?


답변:


87

눈에 잘 띄지 않는 스크립트에는 두 가지 가능성이 있습니다.

  • 헤드 섹션의 스크립트 태그를 통해 외부 스크립트 파일 포함
  • 본문 하단의 스크립트 태그를 통해 외부 스크립트 파일 포함 (이전 </body></html>)

두 번째 방법은 원래 Yahoo 연구에서 일부 브라우저가 스크립트 태그에 도달 할 때 스크립트 파일을로드하려고하므로 완료 될 때까지 페이지의 나머지 부분을로드하지 않는 것으로 나타났기 때문에 더 빠를 수 있습니다. 그러나 스크립트에 DOM이 준비 되 자마자 실행되어야하는 '준비'부분이있는 경우이를 머리에 넣어야 할 수 있습니다. 또 다른 문제는 레이아웃입니다. 스크립트가 가능한 한 빨리로드하려는 페이지 레이아웃을 변경하여 페이지가 사용자 앞에서 다시 그리는 데 오랜 시간을 소비하지 않도록합니다.

외부 스크립트 사이트가 다른 도메인 (예 : 외부 위젯)에있는 경우 페이지로드 지연을 방지하기 위해 하단에 배치하는 것이 좋습니다.

성능 문제에 대해 자체 벤치 마크를 수행하십시오 . 연구가 수행 될 때 한 번에 사실 일 수있는 것은 자체 로컬 설정 또는 브라우저 변경으로 변경 될 수 있습니다.


13
'준비'부분이있는 스크립트에 대해. 이 스크립트를 본문의 맨 아래에두면 DOM이 조작 될 준비가되었음을 보장합니다. 머리에 넣으면 DOMReady (또는 유사한) 이벤트를 기다리도록 랩핑해야합니다.
Juan Mendes

4
@Juan Yes는 그렇습니다.하지만 스크립트를 맨 아래에 배치하면 브라우저가 해당 스크립트를 요청하기 전에 문서를 구문 분석하고 헤드 요소를 처리하는 데 필요한 시간 (200-500ms)만큼 DOMReady 이벤트를 지연시킵니다. . 주로 첫 페이지로드시 (여기에서 캐시 될 수 있다고 가정). 머리에 넣으면. 훨씬 더 빨리 준비 될 것입니다. 따라서 HTML5를 염두에두고 DOM이 준비되었을 때 스크립트가 레이아웃을 수정해야한다면 이제 헤드에 "async"또는 "defer"스크립트를 사용하는 것이 좋습니다.
hexalys

31

너무 잘려서 건조하지 않습니다. Yahoo는 닫는 </body>태그 바로 앞에 스크립트를 배치 할 것을 권장 합니다. 그러면 페이지가 빈 캐시에 더 빨리로드된다는 착각이 생깁니다 (스크립트가 문서의 나머지 부분을 다운로드하는 것을 차단하지 않기 때문입니다). 그러나 페이지로드시 실행하려는 코드가있는 경우 전체 페이지가로드 된 후에 만 ​​실행이 시작됩니다. <head>태그에 스크립트를 넣으면 이전에 실행되기 시작하므로 프라이밍 된 캐시에서 페이지가 실제로 더 빨리로드되는 것처럼 보입니다.

또한 페이지 하단에 스크립트를 넣는 권한이 항상있는 것은 아닙니다. 라이브러리 또는 이전에로드 된 다른 자바 스크립트 코드에 의존하는 인라인 스크립트를 뷰에 포함해야하는 경우 해당 종속성을 <head>태그 에로드해야합니다 .

Yahoo의 모든 권장 사항은 흥미롭지 만 항상 적용 가능한 것은 아니므로 사례별로 고려해야합니다.


1
눈에 거슬리지 않는 javscript가 있다면 인라인 스 니펫이 없을 것입니다.
Juan Mendes

1
인라인 <script>태그는 눈에 거슬리는 자바 스크립트를 의미하지 않습니다.
Eran Galperin 2011-06-28

@Eric Galperin : 눈에 거슬리지 않는 인라인 스크립트 태그를 잘 사용하는 것은 무엇입니까?
Juan Mendes

4
@Juan obstrusive Javascript는 UI가 없으면 UI가 손상되었거나 마크 업에 포함되어 있음을 의미합니다. <script>태그는 마크 업과 분리되어 있으며 인터페이스를 향상시키는 코드와 함께 사용할 수 있지만 필수는 아닙니다. 따라서 인라인 <script>태그 에 대해 본질적으로 눈에 띄는 것은 없습니다 .
Eran Galperin 2011-06-30

4
1. 내 이름은 Eric이 아니라 Eran입니다. 2. 예를 들어 항목이있는 경우 루프에서 서버 측 언어에서 Javascript로 데이터를 전달하려는 경우 <script>태그를 사용하여 해당 값을 JavaScript 변수로 인코딩 할 수 있습니다. 인라인 편집 또는 기타 유사한 동작.
Eran Galperin 2011

22

다른 사람들이 말했듯이 닫는 본문 html 태그 앞에 배치하십시오 .

다른 날 우리는 고객들로부터 그들의 사이트가 매우 느리다고 불평하는 수많은 전화를 받았습니다. 우리는 지역을 방문하여 한 페이지를로드하는 데 20-30 초가 걸린다는 것을 알았습니다. 서버의 성능이 나쁘다고 생각하고 로그온했지만 웹 서버와 SQL 서버는 모두 ~ 0 % 활동이었습니다.

몇 분 후, 자바 스크립트 추적 태그를 위해 연결하는 외부 사이트가 다운되었음을 알게되었습니다. 이것은 브라우저가 사이트 의 헤드 섹션 에서 스크립트 태그를 누르고 스크립트 파일을 다운로드하기를 기다리고 있음을 의미합니다.

따라서 적어도 제 3 자 / 외부 스크립트의 경우 페이지에 마지막으로 두는 것이 좋습니다. 그런 다음 사용할 수없는 경우 브라우저는 최소한 해당 시점까지 페이지를로드하고 사용자는이를 알지 못합니다.


10
Cool story bro :)하지만 진지하게, 이것은 페이지 하단에 스크립트 태그를 배치하는 것에 대해 제가 본 것 중 가장 설득력있는 주장입니다.
user271608 2011 년

16

요약하면, 위의 제안을 바탕으로 :

  1. 외부 스크립트 (Google 애널리틱스, 타사 마케팅 추적기 등)의 경우 </body>태그 앞에 배치합니다 .
  2. 페이지 레이아웃에 영향을 미치는 스크립트의 경우 머리에 배치하십시오.
  3. 'dom ready'(예 : jquery)에 의존하는 스크립트의 </body>경우 헤드에 스크립트를 배치해야하는 특별한 이유가없는 한 이전에 배치하는 것이 좋습니다.
  4. 종속성이있는 인라인 스크립트가있는 경우 필요한 스크립트를 head에 배치하십시오.

6

스크립트의 위치를 ​​수정하고 싶다면 YSlow는 성능을 향상 시키거나 손상시킬 경우 풍미를 제공하는 훌륭한 도구입니다. 특정 문서 위치에 자바 스크립트를 배치하면 실제로 페이지로드 시간을 줄일 수 있습니다.

http://developer.yahoo.com/yslow/


5

그것은 </html>유효하지 않을 것이므로 이후에 있어서는 안됩니다 . 스크립트를 넣는 가장 좋은 장소는</body>

이는 기본적으로 대부분의 브라우저가 사용자가 제공하는 스크립트를 평가하는 동안 페이지 렌더링을 중지하기 때문입니다. 따라서 페이지의 아무 곳에 나 비 차단 코드를 넣어도 괜찮습니다 ( onLoad이벤트 바인딩이 매우 빠르기 때문에 이벤트 에 함수를 첨부하는 것을 주로 생각하고 있습니다). 여기서 가장 큰 킬러는 페이지 시작 부분에 광고 서버 스크립트를 삽입하는 것입니다.이 스크립트는 광고가 완전히 다운로드되기 전에 페이지로드를 방지하여 페이지로드 시간을 풍선으로 만듭니다.


속도에 정말 관심이 있다면 </ body> 또는 </ html>이 없을 것입니다. 이러한 요소 유형에 대한 닫는 태그는 선택 사항입니다. 맨 끝에 <script>를 넣고 </ body>와 </ html>을 모두 사용하는 것은 잊어 버리십시오.
Jim

9
짐이 냉소적 이었으면 좋겠습니다. 어쨌든 그의 조언을 받아들이지 마십시오. 잘 구성된 XHTML에는 body 및 html 태그를 포함하여 모든 요소에 대해 닫는 태그가 필요합니다. 코드가 유효한 XML이 아니라면 잘못된 것입니다.
Matt lohkamp

6
아뇨, 비꼬는 거 아니에요. 질문을보세요. XHTML이 아닌 HTML을 지정합니다. 유효한 XHTML에는 이러한 것들이 필요하지만 유효한 HTML에는 필요하지 않습니다. HTML을 선택하고 이러한 요소 유형에 대해 닫는 태그를 생략하는 데 전혀 문제가 없습니다.
Jim

2

하단에 놓으면 마지막으로로드되므로 사용자가 페이지를 볼 수있는 속도가 빨라집니다. 최종 전에 있어야 </html>하지만 그렇지 않으면 DOM의 일부가 아닙니다.

코드가 즉시 필요하다면 머리에 넣으십시오.

블로그 위젯과 같은 것을 하단에 배치하여로드되지 않더라도 페이지의 유용성에 영향을 미치지 않도록하는 것이 가장 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.