개발 프로젝트/[next.js] 지도 서비스 개발

lighthouse로 성능 체크 & 개선하기

jennayeo 2023. 9. 20. 13:43

성능체크를위해 크롬 lighthouse를 사용해보았다.

아직은 큰 기능이 없기때문에 성능이 그렇게 나쁘지않다.

참고로 개발환경이아닌 production환경으로 체크해야 결과가 제대로 나온다.

 

이제 하나하나 살펴보며 성능을 개선해보자

 

1. Next.js Image fill속성 사용 시 사이즈 넣어주기

<Image
    src={currentCourt.IMGURL}
    fill
    style={{ objectFit: "cover" }}
/>

현재 이미지에 fill을 넣어주고있는데, Next.js문서를 보면

 'fill'속성 사용시 'size'를 주냐 안주냐에 따라 성능에 큰 차이를 줄수있다고 한다.

 

2. 버튼에 accessible name이 없다?

웹 접근성 개선을위해 라이트하우스가 알려주는 감점요인을 확인해보았다.

accessible이 없다는 얘기는 Mac과 윈도우에는 모두 웹 서비스를 스크린 리더로 읽을 수있는 내장 기능이 포함되어있다.

맥에서는 cmd + F5 단축키로 확인해 볼 수있는데, 현재 내 사이트는 이 음성지원 기능을 활용할 수 없다는 얘기이다.

이 버튼이 정확하게 어떤 동작을 하는지 알기 어렵다는 것..!

따라서 각각의 버튼이나 a tag마다 접근성이 있는 이름 또는 설명을 주어야한다.

<button
  className={`${styles.arrowButton} ${openModal ? styles.opened : ""}`}
  onClick={() => setOpenModal(!openModal)}
  disabled={!currentCourt}
  aria-label={openModal ? "코트 정보 닫기" : "코트 정보 열기"}
>

설명을 주기위해선 aria-label로 주면된다.

 

3. <title>element가 없다는 것도 해결해보자

<Head>
    <title>테니스 코트 찾기</title>
    <meta name="코트 잡기 하늘의 별따기" content="위쉐어랑 코트 잡자!" />
</Head>

_document.tsx파일에 title과 메타 태그를 추가해주었다.

하지만 document에 추가해주면 페이지가 변경되어도 항상 똑같은 타이틀을 보여주기때문에, 각각의 페이지마다 next/head를 import하여 <Head><title/></Head>로 만들어주는 것이 더 좋다.

그.러.나. 이렇게 되면 또 각 페이지마다 수십개의 페이지가 생긴다면..?

너무 많은 타이틀과 메타태그를 관리해야하게 될것이다.

그래서 이를위해 SEO와 관련된 메타태그들을 관리하는 라이브러리가있다.

next-seo library

 

 

GitHub - garmeeh/next-seo: Next SEO is a plug in that makes managing your SEO easier in Next.js projects.

Next SEO is a plug in that makes managing your SEO easier in Next.js projects. - GitHub - garmeeh/next-seo: Next SEO is a plug in that makes managing your SEO easier in Next.js projects.

github.com

import { NextSeo } from "next-seo";
 <Fragment>
      <NextSeo
        title="위쉐어! 테니스 코트 찾기"
        description="코트 잡기 하늘의 별따기"
      />
      <Header
      .
      .
      .

많이 개선되었지만 Best Practices는 여전하다.

이 부분은 HTTPS로 배포하면서 개선해 볼 예정이다.