-
Notifications
You must be signed in to change notification settings - Fork 166
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
[개인 미션 - 성능 오답노트] 윤생(이윤성) 미션 제출합니다. #79
Conversation
- 코드의 공백등을 제거 함. - 빌드 시 bundle.js의 크기를 1097293B 에서 274670B로 개선
- 소스코드 크기 bundle.js 274670B -> 271203B 로 감소
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안녕하세요 윤생! 이렇게 만나뵙게 되어 영광입니다. 미션을 충실하게 완수해주셨네요! 코멘트 확인해주십쇼!
Tree Shaking에서 side effect에 대한 질문
- 저도 잘 알지는 못하지만 아는 선에서 말씀드리자면, webpack5에서 자동으로 트리셰이킹을 해주지만 아직 완벽한 자동화가 되지 않아 그런 경우 side effect를 따로 설정해주면 되는 것으로 알고 있어요. 여기서 side effect는 모듈간의 의존관계가 있을 경우 모듈이 트리셰이킹 과정에서 제거되었을 때 발생할 수 있는 부작용이라고 볼 수 있을 것 같습니다. 혹시 답이 되었을까요?
package.json
Outdated
"@webpack-cli/generators": "^2.2.0", | ||
"babel-loader": "^8.2.2", | ||
"compression-webpack-plugin": "^10.0.0", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CDN 사용 전에 적용하셨던 플러그인이군요! 이제 지워주셔도 좋을 것 같습니다. 😄
src/assets/images/find.mp4
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
mp4로 변환은 로딩속도를 개선 측면에서 매우 좋은 것 같습니다.
다만 GIF를 검색하고 다운받는 서비스에서 MP4로 변환하는 것이 옳은 방향인지 의문이 듭니다.
저도 미션하면서 고민되었던 부분이라 공유드립니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저도 많이 고민되었어요! 사실 그래서 실제 프로젝트에서 사용할 일이 있다면 그렇게 크지 않다면 (hero처럼) gif로 넘겨주는 것도 나쁘지 않다고 생각이 듭니다~! 다만 미션이라 이것저것 해보려고 했습니다!
import heroImage from '../../assets/images/hero.webp'; | ||
import trendingMp4 from '../../assets/images/trending.mp4'; | ||
import findMp4 from '../../assets/images/find.mp4'; | ||
import freeMp4 from '../../assets/images/free.mp4'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
역시 애플꺼라고 사파리만..
@@ -14,20 +15,17 @@ const CustomCursor = ({ text = '' }: CustomCursorProps) => { | |||
|
|||
useEffect(() => { | |||
if (cursorRef.current) { | |||
cursorRef.current.style.top = `${mousePosition.pageY}px`; | |||
cursorRef.current.style.left = `${mousePosition.pageX}px`; | |||
cursorRef.current.style.transform = `translate(${mousePosition.pageX}px, ${mousePosition.pageY}px)`; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
<span key={index} className={styles.character}> | ||
{char} | ||
</span> | ||
<CustomCursorChar key={index} char={char} /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 친구는 React.memo를 적용안하신 이유가 있으신가요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
FeatureItem 같은 경우 검색 처럼 잦은 많은 갯수의 잦은 렌더링이 일어나지 않을거라 판단해 따로 메모이제이션을 적용하지 않았습니다!
if (!sessionStorage.getItem('trending')) { | ||
const newTrendingGifs = await gifAPIService.getTrending(); | ||
sessionStorage.setItem('trending', JSON.stringify(newTrendingGifs)); | ||
} | ||
|
||
const cachedTrendingGifs = sessionStorage.getItem('trending'); | ||
if (!cachedTrendingGifs) return; | ||
|
||
const gifs: GifImageModel[] = JSON.parse(cachedTrendingGifs); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
@@ -37,10 +42,10 @@ module.exports = { | |||
}, | |||
{ | |||
test: /\.css$/i, | |||
use: ['style-loader', 'css-loader'] | |||
use: [MiniCssExtractPlugin.loader, 'css-loader'] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이렇게 바꿔주신 이유가 궁금합니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
css를 압축하기 위해 별도의 loader를 사용하려고 하였습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
윤생 고생하셨습니다! approve 진행할게요.
안녕하세요 제레미!! 반갑습니다~!
잘부탁드립니다 😁
🔥 결과
✅ 개선 작업 목록
1 요청 크기 줄이기
2 필요한 것만 요청하기
3 같은 건 매번 새로 요청하지 않기
Cache-Control ~ max-age은 캐싱하려는 서버(cdn)에 원본서버에서 가져온 데이터를 몇초 동안 보관할지 설정하는 헤더라고 판단하였고, 해당 설정을 통해 원본(s3)에서 가져온 데이터를 cdn에 오랜기간 캐싱할 수 있게 하였습니다.
4 최소한의 변경만 일으키기
🧐 공유