3. Minification & Mangling
네트워크를 통해 전송되는 resource양이 커지면 사용자들에게 전달되는 컨텐츠 도착시간이 길어짐.
그래서, 최종적으로 사용자에게 전달되는 리소스들의 형태는 불필요한 요소를 제거한 최적화된 상태가 되어야하는데, 소스코드와 리소스들을 최적화할 때 어떻게 하는지 살펴보기.
모드값이 production인 경우, 소스코드가 압축된 상태를 확인했었는데 mode를 사용하지 않고 직접 최적화함으로써 js뿐만아니라 다른 자원들도 어떻게 최적화 시키는지 알아보자.
코드의 형태를 압축
압축과정에서 일어나는 일
Minification
어플리케이션이 동작하는 과정에 관여하지 않는 요소 제거(주석, console.log,..) - 용량이 줄어듬
표현을 간결화 (들여쓰기 또는 띄어쓰기 공백을 최대한 짧게, 분기문을 블럭형식 대신 삼항연산자로 표현 등)
Minification: 표현의 난독화(uglify)
변수, 함수 클래스 이름같은 코드를 구성하는 표현을 알파벳 한두글자로 치환.
외부에서 코드를 봤을때 코드를 분석하기 어렵게 만듬, 용량줄임
위와같은 과정을 거치면, 소스코드가 압축된 형태로 나오게 되는데 네트워크에 이 최적화된 리소스가 전달이 되고 최적화된 리소스들이 캐싱으로 저장되면 사용자들이 App을 사용할 때 더 빠르게 동작시킬 수가 있다.
실습
HTML Markup 최적화
html-webpack-plugin설정에서 제공되는 key중 minify이라는 key가 제공됨.
mark up 이 생성될때 mark up 컨텐츠가 최적화되는 과정을 함께 진행함
객체형태로 지정해서 선택적으로 (일부만) 최적화를 진행할 수 있다.
html-webpack-plugin readme.md 문서 확인. (minify검색 상세 링크 클릭)
실습에서는 공백을 줄이는것, doctype을 짧게 사용하는 것, type attribute 제거 사용
plugin 에 minify key와 옵션 추가
빌드 후, 결과확인
CSS 최적화
css파일크기 압축(css-nano compressor)
스타일을 보다 빠르게 제공
css-nano를 사용하면 css를 최소화 한 결과물을 얻을 수 있고, 압축률 정보도 확인이 가능
css-nano module설치하기
webpack plugins 설정
plugin은 외부 모듈이므로 불러와야함
build결과 (dist/~~.css확인해보기) => 압축 잘 되었다!
JS최적화
css처럼 js compressor 사용
대표
uglify.js
babel-minify
terser
웹팩이 기본적으로 채택하는 terser 사용해볼 것
웹팩의 의존성에 포함된 모듈이기 때문에 별도로 terser를 설치할 필요는 없고, optimization키에 작성 해주면된다.
optimization 내부에 minimize라는 키를 true를 하면, 웹팩 내부에서 terser를 실행시켜 압축 진행.
minimizer 키에서 어떤 compressor를 사용할지 별도로 설정할 수 있음.(uglify, babel-mini)
terser를 작성한 이유?: terser customize하기 위해서
minimize만 true로 해두면 기본동작만 하기 때문.
빠르게 cache되도록 설정함(빌드 되는 시간 줄임)
혹시 terser확인하고 싶으면, node_modules확인! (webpack설치할때 같이 설치되었음)
terser-webpack-plugin 설치(외부 플러그인)
webpack.config.js 수정
Last updated