ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Vue Lazy Load(비동기 컴포넌트)란?
    개발/Front-end 2021. 8. 24. 23:12
    728x90

    1. Lazy Load 사용하는 목적

     Vue CLI를 통해 빌드하면 소스 코드가 하나의 파일로 합쳐집니다. 이때 큰 프로젝트는 파일 용량이 매우 커집니다. 이 때문에 사용자는 웹 사이트 처음 접속 시 큰 파일을 다운로드하느라 초기 랜더링 시간이 오래 걸리게 되며 랜더링 속도가 너무 늦어지게 됩니다. 즉 현재 보고 있는 화면과 무관한 내용까지 받아서 오래 걸리게됩니다. 따라서 Lazy Load를 이용하여 리소스를 컴포넌트 단위로 분리하여 필요한 것들만 그때그때 라우트 단위 혹은 컴포넌트 단위로 다운로드할 수 있게 하는 방법입니다.

    Lazy Load는 Lazy '가능한 길게 일을 미루는 행위'란 의미에 Load 단어를 합쳐 페이지 내에서 실제로 필요할 때까지 리소스 로딩을 미루는 것입니다.

     


    2. prefetch

    vue-cli3 부터 prefetch 기능이 추가되었습니다. prefetch 기능은 미래에 사용될 수 있는 리소스를 캐시에 저장함으로써, 사용자가 접속할 때 빠르게 리소스를 내려줄 수 있습니다.

    Lazy Load로 컴포넌트를 import 하면 내부적으로 Vue CLI의 prefetch 기능이 사용됩니다. (기본값으로 prefetch 기능이 true로 설정됨)

    2-1. 주의점

    prefetch 기능을 사용하는 이유는 렌더링 시간을 줄이기 위해서인데 잘못 사용하면 렌더링 시간이 늘어납니다. 왜냐하면 비동기 컴포넌트로 정의된 모든 리소스를 당장 사용하지 않더라도 캐시에 담는 비용이 발생합니다. 즉 별도로 분리된 chunk 파일 각각에 대한 request가 일어나고, 각각의 파일을 다운로드하여서 캐시에 저장하기 됩니다.

    2-2. prefetch 적용 비교

    prefetch는 상황에 맞게 사용해야합니다.

    prefetch 기능을 사용하면 request 요청 수가 증가합니다. 비동기 컴포넌트로 정의된 모든 리소스를 캐시에 담기 때문에 request 요청 수가 많아집니다. ⇒ 초기 랜더링 속도가 느려진다.

    반면 prefetch 기능을 사용하지 않으면 요청 수가 훨씬 줄어듭니다. 이 기능을 사용하지 않으면 라우터가 이동될 때마다 라우터에서 필요한 리소스를 그때그때 가져오게 됩니다.

    아래는 prefetch를 사용한 경우와 prefetch를 사용하지 않은 경우 Load 타임입니다.

     

     

    • prefetch 사용한 경우 : 883ms

    • prefetch 사용하지 않은 경우 : 648ms

    2-3. prefetch 적용 팁

    • 사용자가 접속할 가능성이 높은 컴포넌트는 한 번에 다운로드할 수 있게 설정합니다.
    • 사용자의 접속 빈도가 낮은 컴포넌트는 prefetch를 적용하거나 사용자 접속 시점에서 리소스를 다운로드하게 해서 전체 애플리케이션에 대한 리소스를 내려받는 시점을 분리합니다.

     


    3. prefetch 기능 제거하기

    3-1. vue.config.js 파일 추가

    경로는 아래와 같습니다.

    아래 코드를 추가해서 플러그인을 제거합니다.

    module.exports = {
        chainWebpack: (config) => {
            config.plugins.delete('prefetch');
        }
    }

     

    3-2. prefetch가 제대로 제거되었는지 확인

    vue inspect --plugin prefetch 명령어를 날려서 확인합니다.

    # prefetch 기능이 활성화된 경우 
    $ vue inspect --plugin prefetch
    /* config.plugin('prefetch') */
    new PreloadPlugin(
      {
        rel: 'prefetch',
        include: 'asyncChunks'
      }
    )
    
    # prefetch 기능이 비활성화된 경우 
    $ vue inspect --plugin prefetch
    undefined

    3-3. prefetch 기능 끄고 특정 컴포넌트 prefetch 적용

    아래와 같이 /* webpackPrefetch: true */ 주석을 달면 prefetch 기능이 켜집니다.

    import(/* webpackPrefetch: true */'../views/About.vue')

     

     

     이번 시간에는 lazy load에 대해서 알아보고 prefetch에 대해서 알아보았습니다. 다음 시간에는 vue lazy load 실습을 통해 lazy load에 대해서 자세하게 이해해 봅시다.

    '개발 > Front-end' 카테고리의 다른 글

    Vue 데이터 바인딩  (0) 2021.08.25
    Vue 컴포넌트 Basic  (0) 2021.08.24
    Vue Lazy load 적용하기  (0) 2021.08.24
    Vue Router  (0) 2021.08.24
    2. Vue CLI로 Vue 프로젝트 생성하기  (1) 2021.08.11

    댓글

Designed by Tistory.