Develop

[jQuery] script 실행 순서 ready, load 및 기타 실행 순서 제어 방법

issuemaker99 2024. 11. 7. 16:05
728x90

웹 페이지의 스크립트 실행 순서는 사용자 경험과 페이지의 기능성에 큰 영향을 미칩니다. 특히 jQuery에서는 $(document).ready()와 $(window).load()를 통해 스크립트가 실행되는 타이밍을 제어할 수 있습니다. 이 글에서는 두 가지 메서드의 차이점과 그 외 스크립트 실행 순서에 영향을 줄 수 있는 방법들을 설명하고, 실제 예제 코드를 통해 이해를 돕겠습니다.

1. $(document).ready()

$(document).ready()는 문서의 DOM이 완전히 로드된 후 실행됩니다. HTML 요소들이 준비된 상태에서 스크립트를 실행하고자 할 때 유용하며, 이미지, 스타일시트, 기타 리소스의 로딩은 기다리지 않습니다.

$(document).ready(function() {
    console.log("DOM이 준비되었습니다!");
    // 이 시점에서 DOM 요소에 접근할 수 있습니다.
});

 

이 코드는 페이지의 구조가 완전히 준비된 상태에서 실행되며, 이미지나 CSS 파일 로딩과 관계없이 동작합니다. 따라서 페이지의 빠른 로드 및 초기화가 필요한 경우 사용됩니다.

2. $(window).load()

$(window).load()는 페이지의 모든 요소 - 즉, 이미지, CSS, 비디오 등의 모든 리소스가 로드된 후 실행됩니다. 이 메서드는 페이지가 완전히 로드된 후에 실행되기 때문에, 로딩이 오래 걸릴 수 있는 이미지가 많을 경우 더 지연될 수 있습니다.

$(window).on('load', function() {
    console.log("모든 리소스가 로드되었습니다!");
    // 이미지와 기타 리소스가 준비된 상태에서 실행됩니다.
});

 

이 코드는 모든 리소스가 로드된 후에 실행되므로, 이미지나 동영상을 다룰 때 유용합니다.

3. 스크립트 실행 순서에 영향을 주는 다른 방법들

  1.  defer 속성
HTML의 <script> 태그에 defer 속성을 추가하면, 페이지가 완전히 파싱될 때까지 스크립트의 실행이 지연됩니다. defer는 페이지의 로딩을 최적화하는 데 유용하며, 모든 DOM이 준비된 후 실행됩니다. 하지만 async 속성과 달리 스크립트의 실행 순서는 유지됩니다.

<script src="example.js" defer></script>

 

  2.  async 속성
async는 스크립트를 비동기로 로드하여 로딩 시간 최적화를 돕습니다. 그러나 스크립트 실행 순서를 보장하지 않기 때문에, 순서가 중요한 경우 주의가 필요합니다.

<script src="example.js" async></script>

 

  3.  setTimeout과 setInterval
JavaScript의 setTimeout setInterval은 특정 시간 이후에 스크립트를 실행하거나 반복 실행하도록 예약합니다. 이를 통해 특정 이벤트 후 지연하여 실행할 수도 있습니다.

$(document).ready(function() {
    setTimeout(function() {
        console.log("1초 후에 실행됩니다.");
    }, 1000);
});

 

  4.  즉시 실행되는 스크립트 (페이지 상단에 위치한 스크립트)

스크립트가 <head> 또는 <body> 상단에 위치하면, 페이지 로딩 과정에서 해당 스크립트를 만나자마자 실행됩니다. 이 경우, 아직 DOM이 완전히 준비되지 않았기 때문에 DOM 조작을 시도할 경우 오류가 발생할 수 있습니다.

 

전체 실행 순서 예제

아래 예제는 $(document).ready(), $(window).load(), defer, async, 그리고 페이지 상단 및 하단 스크립트까지 모두 포함하여 각 스크립트가 어떤 순서로 실행되는지 보여줍니다.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>Script 실행 순서</title>

    <!-- 상단에 위치한 즉시 실행 스크립트 -->
    <script>
        console.log("상단 스크립트 실행");
    </script>

    <!-- async 속성의 스크립트 -->
    <script src="async-script.js" async></script>

    <!-- defer 속성의 스크립트 -->
    <script src="defer-script.js" defer></script>
</head>
<body>
    <h1>Hello World</h1>
    <img src="large-image.jpg" alt="이미지" />

    <!-- $(document).ready() -->
    <script>
        $(document).ready(function() {
            console.log("$(document).ready() 실행");
        });
    </script>

    <!-- $(window).load() -->
    <script>
        $(window).on('load', function() {
            console.log("$(window).load() 실행");
        });
    </script>

    <!-- 하단에 위치한 즉시 실행 스크립트 -->
    <script>
        console.log("하단 스크립트 실행");
    </script>
</body>
</html>

 

예상 실행 순서

위 예제의 스크립트들이 실행되는 순서는 다음과 같습니다.

  1. 상단 스크립트 실행 - 페이지 상단에서 바로 실행됩니다.
  2. async 스크립트 실행 - async 스크립트는 비동기적으로 로드되며, 로드가 끝나는 즉시 실행됩니다. 따라서, 다른 스크립트와 무관하게 로드가 빨리 끝나면 먼저 실행됩니다.
  3. defer 스크립트 실행 - defer 속성이 있는 스크립트는 HTML 파싱이 완료된 후, 선언된 순서대로 실행됩니다.
  4. $(document).ready() 실행 - DOM이 준비된 후에 실행됩니다.
  5. 하단 스크립트 실행 - HTML 파싱이 완료되고 DOM이 준비된 상태에서 즉시 실행됩니다.
  6. $(window).load() 실행 - 페이지의 모든 리소스가 로드된 후 마지막으로 실행됩니다.
LIST