import LazyLoad from "react-lazy-load";
import { v4 as uuidv4 } from "uuid";
export default function LazyLoadPreLoadPage() {
return (
<>
<h1>LazyLoad</h1>
<div>
{new Array(10).fill(0).map((_, i) => (
<div key={uuidv4()}>
<div className="filler" />
<LazyLoad height={500}>
<img src={`/lazyLoad/image${i}.png`} />
</LazyLoad>
<div className="filler" />
</div>
))}
</div>
</>
);
}
import { useEffect, useRef, useState } from "react";
export default function LazyLoadPreLoadPage() {
const [imgTag, setImgTag] = useState<HTMLImageElement>(); // 태그를 저장할 state
const divRef = useRef<HTMLDivElement>(null);
useEffect(() => {
const img = new Image();
img.src = "/lazyLoad/image0.png";
img.onload = () => {
setImgTag(img); // 태그를 저장한다.
};
}, []);
const onClickPreload = () => {
if (imgTag) divRef.current?.appendChild(imgTag);
};
return (
<>
<button onClick={onClickPreload}>이미지 보여주기</button>
<div ref={divRef}></div>
</>
);
}
[react-dropzone] : 파일을 드래그하는 방식으로 업로드
[react-avatar-editor] : 사진을 동그라미 형태로 변경하거나 확대/축소 등 가능
[react-beautiful-dnd] : drag n drop, 일정 관리 등에 쓰일 수 있다.
[JPG to WEBP 변환] : 이미지 사이즈 줄이기
이미지의 확장자인 webp로 사진을 변환하면 png, jpeg보다 압축률이 높아 더 좋은 성능을 보여줄 수 있다.
[PageSpeedInsights] : 사이트 속도를 검증하고 개선점을 알려준다.
배포 후에 측정 가능하다.
속도를 개선하면 검색 엔진(봇)의 점수를 더 높게 받을 수 있다.