Web/React.JS
-
리액트 성능 최적화 기법 3 - 코드 스플릿, lazy-loadingWeb/React.JS 2022. 11. 16. 17:40
문제 원래 이렇게 평범하게 import 해서 Routing 하던 컴포넌트가 있다. import React from 'react' import { Switch, Route } from 'react-router-dom' import './App.css' import ListPage from './pages/ListPage/index' import ViewPage from './pages/ViewPage/index' function App() { return ( ) } export default App 어떤 번들을 사용하고 있는지 확인할 수 있는 도구인 cra bundle analyzer을 가동해보면 청크를 한 뭉탱이 가져와 적절하지 않게 사용하고 있다는 것을 알 수 있다. (refractor은 특정 페이지에..
-
리액트 성능 최적화 기법 2 - 자바스크립트 실행 시간 줄이기Web/React.JS 2022. 11. 15. 16:50
자바스크립트 실행시간을 어떻게 줄이지? 개발자 도구 -> 성능 탭으로 가면 프로파일링 시작 버튼을 누름으로써 성능을 볼 수 있다, 탭에 나와있는 결과를 보며 비정상적으로 긴 실행 시간을 가지고 있는 컴포넌트가 있다면, 해당 컴포넌트로 가서 로직을 변경하므로써 해결할 수 있다. 실습 성능 탭에서 프로파일링을 하면 나오는 창이다. 보면 Article 이라는 컴포넌트의 자식 요소들이 유독 눈에 띄는데 끊어지고, 실행되고를 반복하고 있는걸 확인 했다. function removeSpecialCharacter(str) { const removeCharacters = ['#', '_', '*', '~', '&', ';', '!', '[', ']', '`', '>', '\n', '=', '-'] let _str = ..
-
리액트 성능 최적화 기법 1 - 이미지 최적화Web/React.JS 2022. 10. 27. 23:36
이미지 최적화란? 뷰어에게 보여지는 이미지의 품질은 훼손시키지 않으면서 동시에 가능한 작은 크기의 이미지를 제공하는것 가능한 작은 이미지를 제공하여 사용자가 이미지 로드를 기다리는 시간을 줄일 수 있다. 또한 적절한 alt 요소를 사용하는것도 이미지 최적화로 볼 수 있다. 1. img 태그 사용하기 .thumb{ background-image: url("thumb.png") } img 태그를 적절하게 사용하면 스크린 리더기와 같은 보조기구에 더 인식이 잘되며 SEO 최적화에 도움이 된다. 2. 이미지의 크기를 적절하게 조절하기 html에서 img 태그는 본인의 width, height 픽셀의 2.4배정도 표현 할 수 있다. 예를 들어 100x100 img 태그에 1200x1200 이미지를 사용하나, 24..
-
Promise.all로 반복되는 API 한번에 모아 보내기Web/React.JS 2022. 6. 20. 17:55
프로젝트를 진행하면 가끔 이런 경우가 있다. 1. 데이터 여러 개를 받아야 해서 배열로 받긴 했는데, api에는 하나씩 post 해야 하는 경우 2. 여러개의 데이터를 한 군데 모으긴 했는데 , api에는 하나씩 post 해야 하는 경우 이럴 때 maps를 돌려 처리하면 편리하지만 api를 여러 번 호출하기 때문에 서버에 부담도 된다. 데이터를 모아서 배열 형태로 한방에 보내는 방법은 없을까 고민을 하다가 promise all() 메서드를 찾았다. Promise.all() 메서드를 간단히 설명하면 순회 가능한 객체에 주어진 모든 프로미스가 이행한 후, 혹은 프로미스가 주어지지 않았을 때 이행하는 Promise를 반환한다고 하는데 어떻게 사용해야 할까? Promise.all()을 사용하지 않을때: cons..
-
React 프로젝트 Vitejs react-ts 로 빌드하기Web/React.JS 2022. 5. 9. 17:13
전부터 안쓰는 기능이 많은 CRA를 안쓰고 직접 빌드를 해봐야겠다고 생각만 해보다가 프로젝트에 vite를 사용한다고 해서 냅다 시작해 보았다. 장점 서버 구동시간 공식 문서에서 가장 먼저 어필하던게 서버 구동이 빠르다는 점이다. dependencies 그리고 source code 두 가지 카테고리로 나누어 따로 번들링 한다고 한다. dependencies는 개발하는 와중에 바뀌지 않을 내용이다. Esbuild를 사용한 사전 번들링으로 기존 번들러 (Webpack, Parcel 포함) 보다 10~100배 빠르다고 한다. 실행해 보니까 첫 구동때 체감이 될정도로 빠르다. 보통 5~6초 걸리던 프로젝트 시작시간이 한 2~3초 걸리는 느낌? 코드 갱신 시간 source code 부분 코드 갱신도 빠르다고 하는데..
-
재활용 가능한 Rating component (별점 컴포넌트)Web/React.JS 2022. 4. 3. 19:48
저번 프로젝트도 그렇고 지금 프로젝트도 그렇고 자꾸 별점 컴포넌트를 필요로 합니다. 이번 프로젝트는 MUI, 라이브러리 등을 사용하지 않고 만들고 있습니다. 근데 구글링을 해보니 딱히 프로젝트에 적용할 만한 글이 없길래 직접 만들었습니다. 만드는 김에 재활용성 빵빵하게 만들어서 두고두고 쓰자 라는 생각이 들었습니다. 제 생각엔 어디든 쓸 수 있을 거 같으니 퍼가서 써도 좋을 거 같습니다. 결과물부터 보여드리면 원리를 간단하게 설명하면 1. 별을 누르면 값이 변하고 2. 변한 값보다 작으면 별을 색칠하고 3. 변한 값을 부모로 보낸다 입니다. 진짜 간단하네요 RatingSection.tsx // line 26 까지는 css const RatingContainer = styled.div` display: f..
-
React) 클릭하면 특정 div로 스크롤 이동하는 hook 만들어보기Web/React.JS 2022. 2. 27. 23:40
지금 쇼핑몰 프로젝트를 하고 있는데 구현하고 싶은 기능이 있다. 이렇게 생긴 버튼을 클릭하면 해당 부분으로 스크롤을 자동으로 움직여주는 기능이다. 거의 모든 쇼핑몰에서 사용하고 있길래 이번 프로젝트에서 적용해 보았다. 첨에는 쉽지 않겠다... 싶었는데 찾아보니 useRef에 구현해놓은 메서드가 이미 존재했다 (https://developer.mozilla.org/ko/docs/Web/API/Element/scrollIntoView) element.scroolIntoView라는 메서드였다. 바로 useMoveScroll라는 hook을 만들어 활용해 보았다. import { useRef } from 'react'; //hook function useMoveScrool() { const element = us..