jQuery Academy · 강의

캐싱 및 지연 객체 활용

선택자 캐싱으로 중복 DOM 검색을 피하고, 비동기 작업을 더 효과적으로 관리하는 jQuery 지연 객체를 이해해 코드 가독성과 성능을 개선합니다.

레슨 3/311개 단계

캐싱 및 지연 객체 활용은(는) CoddyKit의 무료 jQuery Academy 강의입니다. 이것은 3개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 jQuery Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. jQuery Academy 강의에는 총 3개의 강의가 포함되어 있습니다.

캐싱과 Deferred로 성능 향상하기

환영합니다! 이번 레슨에서는 jQuery 애플리케이션을 더 빠르고 효율적으로 만드는 두 가지 강력한 기법인 선택자 캐싱과 Deferred 객체를 살펴보겠습니다.

이러한 방법을 사용하면 중복 작업을 줄이고 복잡한 비동기 작업을 쉽게 관리할 수 있습니다.

선택자 캐싱이 중요한 이유

$("#myElement")나 $(".item")과 같은 jQuery 선택자를 사용할 때마다 jQuery는 일치하는 요소를 찾기 위해 문서 객체 모델(DOM)을 탐색해야 합니다.

  • 이 탐색은 특히 복잡한 선택자나 규모가 큰 DOM 트리에서 느릴 수 있습니다.
  • 같은 요소를 반복해서 조회하면 처리 능력이 낭비됩니다.

캐싱을 사용하면 이를 피할 수 있습니다!

선택 결과 저장하기

DOM을 여러 번 검색하는 대신 jQuery 선택 결과를 변수에 저장하세요. 그러면 이 변수는 jQuery 객체에 대한 참조를 보관합니다.

다음 예제를 실행하여 선택 결과를 캐싱하는 방법을 확인해 보세요.

// Imagine this is in your HTML
// <div id="myDiv">Hello</div>

// Simulate jQuery selecting an element
// In a real browser, this would return a jQuery object
const $myElement = {
  id: "myDiv",
  text: "Hello",
  // Simulate jQuery methods
  css: function(prop, value) {
    console.log(`Setting ${prop} to ${value} on #${this.id}`);
  },
  addClass: function(cls) {
    console.log(`Adding class "${cls}" to #${this.id}`);
  }
};

console.log("--- Without Caching (simulated) ---");
// This would ideally re-query the DOM
$myElement.css("color", "blue"); // Simulates $("#myDiv").css(...)
$myElement.addClass("highlight"); // Simulates $("#myDiv").addClass(...)

console.log("\n--- With Caching ---");
// We already have $myElement, so no re-query
$myElement.css("font-weight", "bold");
$myElement.addClass("active");

효율성을 위한 체이닝

jQuery의 메서드 체이닝은 이미 효율성을 높이는 방법입니다. 동일하게 선택된 요소 집합을 대상으로 작업하기 때문입니다.

하지만 코드의 서로 다른 지점이나 여러 이벤트 처리기에서 같은 요소에 작업해야 할 때는 캐싱이 매우 중요합니다.

// Chaining is good for sequential ops
$("#myElement")
  .addClass("active")
  .css("color", "blue")
  .fadeIn();

// Caching is better for repeated, non-sequential ops
const $cachedElement = $("#myElement");
// Later in code...
$cachedElement.trigger("click");
// Even later...
$cachedElement.removeClass("active");

선택 결과 재사용하기

요소 그룹과 자주 상호 작용하는 상황을 생각해 보세요. 최초 선택 결과를 캐싱하면 DOM 조회를 반복하지 않아도 됩니다.

이는 반복문, 이벤트 처리기 또는 동일한 요소 집합을 대상으로 작업하는 함수 내부에서 특히 유용합니다.

// Imagine HTML: <li class="item">1</li> <li class="item">2</li>
// <li class="item">3</li> <button id="toggleBtn">Toggle</button>

// Simulate jQuery context
const $items = [{
  text: "Item 1"
}, {
  text: "Item 2"
}];
const $toggleButton = {
  text: "Toggle Button"
};

console.log("Cached items count:", $items.length);
console.log("Cached button text:", $toggleButton.text);

// Later, you might need them again, without re-querying
// e.g., in an event handler
function handleToggle() {
  // Use $items and $toggleButton directly
  console.log("Toggle button clicked! Working with cached items.");
}

// Call the function
handleToggle();

비동기 작업 관리하기

jQuery의 Deferred 객체는 여러 콜백을 대기열에 등록하고, 콜백 대기열을 호출하며, 동기 또는 비동기 작업의 성공 또는 실패 상태를 전달하는 방법을 제공합니다.

  • 미래의 결과를 위한 "promise"라고 생각해 보세요.
  • AJAX 요청, 애니메이션 또는 타이머와 관련된 코드를 체계적으로 구성하는 데 도움이 됩니다.

새 Deferred 만들기

$.Deferred()를 사용하여 새 Deferred 객체를 만들 수 있습니다. 이 객체에는 상태를 제어하는 메서드가 있습니다. 성공에는 resolve()를, 실패에는 reject()를 사용합니다.

지연 시간 후에 resolve되는 기본 deferred를 설정하는 방법을 살펴보겠습니다.

function doSomethingAsync() {
  const dfd = $.Deferred(); // Create a new Deferred

  setTimeout(function() {
    const success = Math.random() > 0.5; // Simulate success/failure
    if (success) {
      dfd.resolve("Operation successful!"); // Resolve on success
    } else {
      dfd.reject("Operation failed!"); // Reject on failure
    }
  }, 1000); // Simulate 1-second delay

  return dfd.promise(); // Return the Promise part
}

// This code will run when the scene loads
// We'll attach handlers in the next scene
console.log("Deferred created. Waiting for resolution...");

.done() 및 .fail() 사용하기

Deferred 객체 또는 해당 promise가 있으면 .done()으로 성공 처리용 콜백 함수를, .fail()로 오류 처리용 콜백 함수를 연결할 수 있습니다.

.always() 콜백은 성공 여부와 관계없이 실행됩니다.

function doSomethingAsync() {
  const dfd = $.Deferred();
  setTimeout(function() {
    const success = true; // For this example, let's ensure success
    if (success) {
      dfd.resolve("Data loaded!");
    } else {
      dfd.reject("Network error!");
    }
  }, 500);
  return dfd.promise();
}

const myPromise = doSomethingAsync();

myPromise.done(function(message) {
  console.log("SUCCESS:", message);
});

myPromise.fail(function(errorMessage) {
  console.log("FAILED:", errorMessage);
});

myPromise.always(function() {
  console.log("Operation complete (done or failed).");
});

console.log("Initiating async operation...");

.then()으로 결과 변환하기

.done()과 .fail()이 최종 처리를 위한 것이라면 .then()은 더 유연하게 사용할 수 있습니다. resolve된 값을 변환하거나 새 promise를 반환할 수도 있어 순차적인 처리가 가능합니다.

.then()을 사용하여 결과를 다음 단계로 전달하기 전에 처리할 수 있습니다.

function fetchData() {
  const dfd = $.Deferred();
  setTimeout(() => {
    console.log("Data fetched.");
    dfd.resolve({
      id: 1,
      name: "Widget"
    });
  }, 500);
  return dfd.promise();
}

fetchData()
  .then(function(data) {
    console.log("Processing fetched data:", data);
    return data.name.toUpperCase(); // Transform the data
  })
  .then(function(processedName) {
    console.log("Transformed name:", processedName);
    // This second .then() receives the result of the first .then()
  })
  .fail(function(error) {
    console.error("Error:", error);
  });

console.log("Starting data fetch and transformation...");

캐싱 및 Deferred 퀴즈

간단한 도전 문제를 풀 준비가 되셨나요? 선택자 캐싱과 Deferred 객체에 대한 이해도를 확인해 보세요.

요약: 더 빠르고 똑똑한 jQuery

잘하셨습니다! jQuery 애플리케이션의 성능과 코드 구성을 크게 향상하는 방법을 배웠습니다.

  • 선택자 캐싱: jQuery 선택 결과를 변수에 저장하여 비용이 큰 DOM 반복 조회를 피합니다.
  • Deferred 객체: $.Deferred(), .resolve(), .reject(), .done(), .fail(), .then()을 사용하여 복잡한 비동기 작업을 깔끔하고 효율적으로 관리합니다.

이러한 기법을 적용하여 더 견고하고 성능이 뛰어난 웹 애플리케이션을 만들어 보세요!

무료로 시작

AI 튜터와 함께 JavaScript을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
22
레슨
48

자주 묻는 질문

“캐싱 및 지연 객체 활용” 강의는 무료인가요?

네 — “캐싱 및 지연 객체 활용” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 jQuery Academy 강의 전체를 잠금 해제할 수 있습니다. jQuery Academy 강의에는 총 3개의 강의가 포함되어 있습니다.

“캐싱 및 지연 객체 활용”에서 뭘 배우나요?

선택자 캐싱으로 중복 DOM 검색을 피하고, 비동기 작업을 더 효과적으로 관리하는 jQuery 지연 객체를 이해해 코드 가독성과 성능을 개선합니다. 브라우저에서 직접 실행하는 실습 코드로 jQuery Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

jQuery Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 jQuery Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 3번째 강의입니다.

“캐싱 및 지연 객체 활용” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 jQuery Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 jQuery Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. DOM 조작 작업 최적화
  2. 효율적인 이벤트 처리 및 스로틀링
  3. 캐싱 및 지연 객체 활용
← jQuery Academy(으)로 돌아가기