Skip to content

Latest commit

ย 

History

History
100 lines (63 loc) ยท 2.45 KB

File metadata and controls

100 lines (63 loc) ยท 2.45 KB

Lazy loading

Lazy loading์ด๋ž€?

์›น ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ํ•œ ๋ฒˆ์— ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ Œ๋”๋งํ•˜๋Š” ๋Œ€์‹ , ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์€ ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.


์žฅ๋‹จ์ 

์žฅ์ 

ํ•„์š”ํ•œ ์›นํŽ˜์ด์ง€ ์ค‘ ์ผ๋ถ€๋งŒ ๋จผ์ € ๋กœ๋“œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ๋‹จ์ถ•๋˜์–ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ์œ ๋ฆฌํ•˜๊ณ  ์ €์žฅ๊ณต๊ฐ„์ด ์ ˆ์•ฝ๋œ๋‹ค.


๋‹จ์ 

์•„์ง ๋กœ๋“œ๋˜์ง€ ์•Š์€ ์ปจํ…์ธ ์˜ ๋ถ€์ ์ ˆํ•œ ์ธ๋ฑ์‹ฑ์œผ๋กœ ๊ฒ€์ƒ‰ ์—”์ง„์—์„œ ์›น์‚ฌ์ดํŠธ์˜ ์ˆœ์œ„์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์ง„์ด๋‚˜ ์˜์ƒ์ฒ˜๋Ÿผ ํฌ๊ธฐ๊ฐ€ ํฌ๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ”๋กœ ๋ณด์—ฌ์ง€์ง€ ์•Š๋Š” ํŽ˜์ด์ง€ ๋“ฑ ์ค‘์š”๋„๊ฐ€ ๋‚ฎ์€ ์š”์†Œ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.


๊ตฌํ˜„ ๋ฐฉ๋ฒ•

| img, iframe ํƒœ๊ทธ์˜ loading ์†์„ฑ

img, iframe ํƒœ๊ทธ์˜ loading ์†์„ฑ์— lazy๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

<img src="..." loading="lazy" alt="..." />

<iframe src="..." loading="lazy" />

| IntersectionObserver

IntersectionObserver๋ฅผ ์ด์šฉํ•ด์„œ ํŠน์ • ์š”์†Œ๊ฐ€ ํ™”๋ฉด์— ๋…ธ์ถœ๋˜์—ˆ์„ ๋•Œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋กœ๋“œํ•˜๋„๋ก ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

const config = {
  rootMargin: "0px 0px 50px 0px",
  threshold: 0,
};

let observer = new intersectionObserver(function (entries, self) {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      preloadImage(entry.target);
      self.unobserve(entry.target);
    }
  });
}, config);

const imgs = document.querySelectorAll("[data-src]");

imgs.forEach(img => {
  observer.observe(img);
});

| React lazy, Suspense

ํฐ ๊ทœ๋ชจ์˜ React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ฒซ ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œํ•˜๋Š” ์ฆ‰์‹œ ๋Œ€๊ทœ๋ชจ ๋‹จ์ผ JavaScript ๋ฒˆ๋“ค์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „์†ก๋˜์–ด ํŽ˜์ด์ง€ ์„ฑ๋Šฅ์„ ์ €ํ•˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

React์—์„œ ์ œ๊ณตํ•˜๋Š” lazy ๋ฉ”์„œ๋“œ์™€ Suspense ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

import { Suspense, lazy } from "react";
import Loading from "./Loading.js";

const LazyComponent = lazy(() => import("./LazyComponent.js"));

export default function MyComponent() {
  return (
    <Suspense fallback={<Loading />}>
      <LazyComponent />
    </Suspense>
  );
}

์ฐธ๊ณ