JavaScript에서 Promise 속도 향상

3985 단어 webdevnodejavascript
약속은 JavaScript에서 비동기 코드의 필수적인 부분입니다. 서로 독립적인 여러 Promise를 한 번에 실행해야 하는 경우가 종종 있습니다. JavaScript를 사용하여 이를 달성할 수 있습니다Promise.all. Promise.all는 일련의 약속을 수락하고 모든 약속이 해결되면 해결되는 JavaScript에서 제공하는 약속입니다.

3개의 서로 다른 API에서 데이터를 가져와야 한다고 가정합니다. 각 API는 응답하는 데 약 3초가 걸립니다. 동시성이 없는 일반 코드는 다음과 같습니다.

async function fetchData() {
  const metadata = await getMetadata(); 
  const products = await getProducts();
  const categories = await getCategories();

  return { metadata, products, categories };
}


위의 코드는 잘 작동합니다. 그러나 동시성을 활용하여 개선할 수 있습니다. 세 가지 기능이 모두 서로 독립적이므로 순차적으로 실행할 필요가 없습니다. metadata 전에 products 가 필요하지 않습니다. 위의 코드 스니펫을 다음과 같이 다시 작성할 수 있습니다.

async function fetchData() {
  const metadata = getMetadata();
  const products = getProducts();
  const categories = getCategories();

  return await Promise.all([
    metadata,
    products,
    categories,
  ]);
}


이제 우리는 metadata 전에 products 를 기다리지 않습니다. 대신 모든 데이터를 동시에 가져옵니다. 이 기술은 매우 강력하고 코드 속도를 높입니다. 이 기술은 특정 입력을 기반으로 데이터를 가져올 수도 있습니다. 제품 목록에 대한 제품 세부 정보를 가져오고 싶다고 가정합니다. 다음과 같이 약속을 리팩터링할 수 있습니다.

async function fetchProductDetails(ids) {
  const productDetails = await Promise.all(
    ids.map(id => getProduct(id))
  );
  return productDetails;
}


JavaScript는 단일 스레드이므로 각 약속에 대해 자식 프로세스를 만들지 않으면 병렬 처리를 수행할 수 없습니다. 프로세스 생성은 비용이 많이 드는 작업이며 실행 가능성을 떨어뜨리는 특정 오버헤드가 있습니다. Promise.all는 동시성을 달성하고 코드 속도를 높이는 좋은 대안입니다. 다시 말하지만 해결하려는 문제에 따라 다릅니다. JavaScript에서 Promise의 속도를 높이려면 어떤 기술이 필요합니까?

좋은 웹페이지 즐겨찾기