오늘은 메인 페이지에서 상세 페이지로 이동했을 때 페이지의 로딩 시간이 생각보다 길어서 이것을 해결하려고 했습니다.
맨 처음에 API를 받아올 때는 객체 안에 3개의 주제를 가진 배열이 40개의 항목 안에 8개 정도의 속성이 있었는데 이 데이터를 전부 합친 다음 하나의 배열로 만들어서 find 메서드를 이용해서 id값을 찾아서 해당 id에 속한 내용을 html에 전달하는 방식을 사용했는데 시간 복잡도는 O(N) + O (N) = O(N)이지만 주제별로 처음에 40개씩 나눠서 40개의 항목에 있는 속성의 id만 찾으면 똑같이 시간 복잡도가 O(N)지만 데이터의 수가 꽤 크게 차이 날 거라고 예상해서 코드를 바꿔봤습니다.
기존 API 처리 방식
// 모든 영화 데이터를 하나의 배열로 병합
const allMovies = Object.values(movieData).reduce((acc, curr) => acc.concat(curr), []);
// 영화 ID 찾기
const foundMovie = allMovies.find(movie => movie.id === movieId);
// 영화 데이터 가져오기
const movieData = await fetchData();
const getData = movieData[`${type}`]
console.log(typeof(movieId));
getData.forEach(foundMovie => {
if (foundMovie.id === movieId) {
console.log(foundMovie);
renderMovieData(foundMovie);
}
})
나중에 보니 크롬 브라우저로 두 방법을 시간을 측정 해보니 랜더링의 시간에 크게 차이가 없었습니다.페이지가 느리게 로딩되던 이유는 처음에 페이지에 이미지를 저장해오는 시간이 길었던 것이고 제가 계속 캐시를 초기화 했기 때문이었습니다. 하지만 코드가 더 효율적으로 작성한 것 같아서 만족하기로 했고 시간 또한 당시에 인터넷이 느렸던 것인지 현재는 빠르게 로딩되었습니다.
'TIL' 카테고리의 다른 글
TIL - 크롬 개발자 도구 이용해서 에러 디버깅 (0) | 2024.05.08 |
---|---|
TIL - 협업 할 때 코드컨벤션의 중요성 (0) | 2024.05.07 |
TIL - 비동기 데이터 처리 및 렌더링 (1) | 2024.05.02 |
TIL - CSS와 친해지기 (0) | 2024.05.01 |
TIL - 화살표 함수를 사용하는 이유 (0) | 2024.04.30 |