LazyLoad vs PreLoad

M_yeonΒ·2022λ…„ 10μ›” 22일
0

LazyLoad

πŸ’‘ LazyLoad λž€?
νŽ˜μ΄μ§€λ₯Ό μ½μ–΄λ“€μ΄λŠ” μ‹œμ μ— μ€‘μš”ν•˜μ§€ μ•Šμ€ λ¦¬μ†ŒμŠ€ λ‘œλ”©μ„ μΆ” 후에 ν•˜λŠ” 기술둜 슀크둀이 λ‚΄λ €κ°€λ©΄μ„œ ν•„μš”ν•œ λ•Œκ°€ 되면 λ‘œλ“œκ°€ λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄, 이미지가 10μž₯이 λ„˜λŠ” νŽ˜μ΄μ§€κ°€ μžˆλ‹€κ³  κ°€μ •ν•  λ•Œ 이미지λ₯Ό λͺ¨λ‘ λ‹€ λ‘œλ“œκ°€ 될 λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦¬κ²Œ λœλ‹€λ©΄, νŽ˜μ΄μ§€μ˜ λ‘œλ”©μ„ κΈΈμ–΄μ§€κ²Œ 될 κ²ƒμž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ, 맨 μœ„μ˜ 화면에 λ³΄μ΄λŠ” μ΄λ―Έμ§€λ§Œ λ‘œλ“œλ₯Ό ν•œ 후에, μŠ€ν¬λ‘€μ„ λ‚΄λ¦¬λ©΄μ„œ 이미지가 보여져야 ν•  λ•Œλ§ˆλ‹€ 이미지λ₯Ό λ‘œλ“œν•œλ‹€λ©΄, λ°μ΄ν„°μ˜ λ‚­λΉ„λ₯Ό 막을 수 μžˆμŠ΅λ‹ˆλ‹€!

import React from "react";
import LazyLoad from "react-lazy-load";

export default function MyComponent() {
  return (
    <div>
      <div className="filler" />
      <LazyLoad height={600} offsetVertical={300}>
        <img
          src="https://cdn.pixabay.com/photo/2017/09/25/13/12/cocker-spaniel-2785074_1280.jpg"
          width={500}
          height={500}
        />
      </LazyLoad>
      <div className="filler" />
      <LazyLoad height={600} offsetVertical={300}>
        <img
          src="/trick2.jpg"
          width={500}
          height={500}
        />
      </LazyLoad>
      <div className="filler" />
      <LazyLoad height={600} offsetVertical={300}>
        <img
          src="/trick.jpg"
          width={500}
          height={500}
        />
      </LazyLoad>
    </div>
  );
}

react-lazy-load 라이브러리λ₯Ό μ΄μš©ν•΄λ³΄μ•˜λŠ”λ°μš”. 이처럼 ν˜„μž¬λŠ” 보기 νŽΈν•˜κΈ° μœ„ν•΄μ„œ 2개의 μ΄λ―Έμ§€λ§Œ μ μ—ˆμ§€λ§Œ 10개라고 κ°€μ •ν–ˆμ„λ•Œ μŠ€ν¬λ‘€μ„ λ‚΄λ €μ•Ό 이미지가 λΆˆλŸ¬μ™€μ§‘λ‹ˆλ‹€.


PreLoad

πŸ’‘ PreLoad λž€?
νŽ˜μ΄μ§€λ₯Ό 읽어듀일 λ•Œ 미리 λ¦¬μ†ŒμŠ€λ₯Ό λ°›μ•„λ†“λŠ” κΈ°μˆ μž…λ‹ˆλ‹€. μœ„μ™€ 같이 예λ₯Ό λ“€μ–΄ 이미지가 10μž₯이 λ„˜λŠ” νŽ˜μ΄μ§€κ°€ μžˆλ‹€κ³  κ°€μ •ν•©μ‹œλ‹€. LazyLoad의 κ²½μš°μ—λŠ” ν•„μš”ν•  λ•Œλ§ˆλ‹€ 데이터λ₯Ό λ‘œλ“œν•˜λŠ” 방법이라면, PreLoad의 κ²½μš°μ—λŠ” λͺ¨λ“  데이터듀을 미리 λ‘œλ“œν•΄λ†“κ³  λŒ€κΈ°ν•˜λŠ” 방식이라 λ³΄μ‹œλ©΄ λ©λ‹ˆλ‹€!


export default function ImagePreloadPage () {
	const [imgTag, setImgTag] = useState()
	const divRef = useRef(null)

	useEffect(() => {
		const img = new Image()
		img.src = "뢈러올 이미지 μ£Όμ†Œλ₯Ό λ„£μŠ΅λ‹ˆλ‹€."
		img.onload = () => {
			setImgTag(img)
		}
	}, [])

const onClickPreload = () => {
	if(imgTag) divRef.current?.appendChild(imgTag)
}


return (
	<div>
		<div ref={divRef}></div>
			<button onClick={onClickPreload}> 이미지 ν”„λ¦¬λ‘œλ“œ </button>
	</div>
)
}

0개의 λŒ“κΈ€