Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/#114 image compression (+webp) #208

Merged
merged 5 commits into from
Feb 19, 2023
Merged

Conversation

joohaem
Copy link
Member

@joohaem joohaem commented Feb 18, 2023

  • 브랜치명, 브랜치 알맞게 설정
  • Reviewer, Assignees, Label, Milestone, Issue(PR 작성 후에) 붙이기
  • PR이 승인된 경우 해당 브랜치는 삭제하기

📌 내용

  • 이미지 로딩 시간을 줄이기 위한 작업을 했어요
  1. banner1, category banner 같은 경우에, 이미지의 파일이 커서 png 파일을 압축하였어요.

  2. png -> webp 파일로 변경하였어요.

    • https://caniuse.com/?search=webp :: webp가 지원이 안 되는 브라우저가 우리의 메인 타겟 브라우저는 아니기 떄문에 따로 picture/source 태그를 추가하여 jpg 파일을 대비하지 않았어요. 필요하다고 판단되면 진행하면 좋을 것 같아요.
    • 앞으로 디자인팀에 이미지 파일을 받을 때, 위 과정을 거쳐 최대한 적은 사이즈로 이용해야 할 것 같아요!
    • 질문 있으면 물어봐주세요
  3. img 태그에 loading="lazy" 속성을 추가하면, 보여지지 않는 이미지는 나중에 로드하여 불필요한 네트워크 통신을 줄일 수 있어요


📌 내가 알게 된 부분


📸 스크린샷

1. 적용 전

2. 적용 후

@joohaem joohaem added this to the 🦄 스프린트2 🦄 milestone Feb 18, 2023
@joohaem joohaem requested a review from NYeonK February 18, 2023 07:09
@joohaem joohaem self-assigned this Feb 18, 2023
@joohaem joohaem linked an issue Feb 18, 2023 that may be closed by this pull request
6 tasks
Copy link
Contributor

@NYeonK NYeonK left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이미지 크기와 시간이 엄청 줄어들었네?! 신기하다!!!!!👀🌟
수고하셨숩니다ㅎㅎ😚😚

관련해소 궁금한게 있는데요!

  1. 앞으로 작업할 때, 저희가 webp 파일로 변환해서 쓰는 걸까요? 아니면 디자인에서 그렇게 넘겨주는 걸까요?-?
  2. png 파일을 따로 모아두신 이유가 궁금합니당!

export { default as ImgBanner3 } from "./banner_3.webp";
export { default as ImgCategoryBanner } from "./categoryBanner.webp";
export { default as ImgDefaultBigProfile } from "./defaultBigProfile.webp";
export { default as ImgDefaultProfile } from "./defaultProfile.webp";
export { default as ImgPiickleLoading } from "./piickleLoading.gif";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

.gif.webp로 변환하지 않은 이유가 있을까요?-? 마찬가지로 용량이 줄어든다고 알고 있어서요!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

헉 그것도 되는구나!! 변경해놓을게요

@joohaem
Copy link
Member Author

joohaem commented Feb 19, 2023

@NYeonK

  1. 디자인 쪽에 요청을 할 수는 있어요, 피그마에서도 webp로 export 가 가능해서!
    • 다만, png로 받아서 용량을 알맞게 줄인(압축) 후 우리가 직접 webp로 변환하는 게 더 자유로울 수도 있겠다?
    • webp는 이미지 압축이 안되어서!
  2. png 원본들은 혹시 몰라 남겨두었어요! (이후에 화질 좀 좋게 하는 걸 원할 수도 있으니!)

@joohaem joohaem merged commit 70d708a into develop Feb 19, 2023
@joohaem joohaem deleted the feat/#114-image_compression branch February 19, 2023 10:06
Copy link
Contributor

@NYeonK NYeonK left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

compressorjs 라이브러리 이해하다가 리뷰가 늦었네요😋 (답변 속도 실화냐고)
파일 업로드 시에 이미지 용량을 줄일 때 사용하눈거군여!!

코드리뷰하면서 오늘 많은 것을 배워갑니다,,✨ 수고해쒀어어어어어><

@@ -25,7 +25,7 @@ export default function Banner() {
<St.BannerSlider>
<Slider {...settings}>
{bannerImage.map((img, index) => (
<St.ImageWrapper key={index} src={img.src} alt={img.alt} />
<St.ImageWrapper key={index} src={img.src} alt={img.alt} loading="lazy" />
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

loading="lazy" 처음 알게 되었어요😲 좋은 정보 감사합니다:D

Comment on lines +22 to +25
const compressedSelectedImg = await compressImage(selectedImg, {
maxWidth: MAX_IMAGE_SIZE,
maxHeight: MAX_IMAGE_SIZE,
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

요로코롬 사용하눈 거구나👀👀 므싯다요😎😎😎😎

const { setImage } = props;
const [imgUrl, setImgUrl] = useState<string>("");
const { setProfileImage } = props;
const [previewImgUrl, setPreviewImgUrl] = useState("");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<string> 요거 있는거랑 없는거랑 상관업숴?-?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"" 로 string인게 이미 추론되어서, 직접 명시할 필요 없어!!

}

const MAX_IMAGE_SIZE = 80 * 2;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

최대치가 *2인 이유가 있을까요?!?!

Copy link
Member Author

@joohaem joohaem Feb 19, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

80으로 직접 명시를 해도 좋은데, 레티나 디스플레이 대응 이슈로 인해 2배 정도로 지정하면 좋다고 알아요!!!~

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아하 구렇구나😆😆

new Compressor(file, {
maxWidth: option?.maxWidth,
maxHeight: option?.maxHeight,
quality: option?.quality ?? 0.6,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

?? 요거 무엇인가요?_? 처음 봐써요!👀

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

undefined, null 일 경우에만 ?? 다음의 값을 반환해줘!

@joohaem
Copy link
Member Author

joohaem commented Mar 7, 2023

이미지 최적화를 위한 추가 작업 -> #219

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[ Common ] 이미지 로딩 속도 줄이기
2 participants