: 주어진 상황에서 원하는 가장 알맞은 결과를 얻을 수 있도록 처리하는 과정
최적화는 허용된 자원의 한계 내에서 주어진 요구사항을 만족시키면서 최선의 결과를 얻는 과정이다.
수익과 관련되는 분야에서는 이익을 최대로 내는 과정을 말하기도 한다.
다양한 분야와 때에 따라 다르게 정의할 수 있고 물류(logistics), 설계(design) 문제 등에 응용된다.
분야에 따라 의미가 조금씩 달라지긴 하지만, 최적화는 보통 주어진 조건으로 최대 효율을 낼 수 있도록 하는 것을 의미한다.
웹 개발에서의 최적화는 화면을 최대한 빠른 속도로 표시하게 하는 것
이탈률 감소
최적화가 잘 되지 않으면 웹 페이지는 화면 로딩에 시간이 걸리고, 화면을 불러오는 시간이 길어지만 사용자가 페이지를 이탈할 확률이 높아진다.
그러나 웹 사이트의 성능 최적화를 통해 페이지 로딩 속도를 줄이면, 사용자의 이탈률을 효과적으로 줄일 수 있어 최적화의 필요성을 알 수 있다.
전환율 증가
이탈률이 줄어들면, 전환율이 높아질 확률도 커진다.
전환률이란 웹 사이트를 방문한 사용자 중 회원가입, 상품 구매, 게시글 조회, 다운로드 등의 행위를 한 방문자의 비율을 의미한다.
수익 증대
사용자 경험(UX) 향상
background-position
속성을 사용해 이미지의 일정 부분만 클래스 등으로 구분하여 사용하는 방법CDN은 콘텐츠를 좀 더 빠르고 효율적으로 제공하기 위해 설계되었다.
CDN은 유저가 가까운 곳에 위치한 데이터 센터(서버)의 데이터를 가져와서 데이터가 전달되기 위해 거쳐야하는 서버의 갯수가 크게 줄기 때문에 로딩 속도가 빨라진다.
캐시(Cache) : 다운로드 받은 데이터나 값을 미리 복사해 놓은 임시 장소
데이터에 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다.
: 캐시에 저장된 데이터와 서버의 데이터가 동일한지 확인하기 위한 정보를 담은 응답 헤더
Last-Modified
: 데이터가 마지막으로 수정된 시점을 의미하는 응답 헤더, 조건부 요청 헤더인 If-Modified-Since
와 묶어서 사용Etag
: 데이터의 버전을 의미하는 응답 헤더, 조건부 요청 헤더인 If-None-Match
와 묶어서 사용: 캐시의 데이터와 서버의 데이터가 동일하다면 재사용하게 해달라는 의미의 요청 헤더
If-Modified-Since
: 캐시된 리소스의 Last-Modified
값 이후에 서버 리소스가 수정되었는지 확인하고, 수정되지 않았다면 캐시된 리소스 사용If-None-Match
: 캐시된 리소스의 Etag
값과 현재 서버 리소스의 Etag
값이 같은지 확인하고, 같으면 캐시된 리소스 사용: 말 그대로 나무를 흔들어 잔가지를 털어내듯 불필요한 코드를 제거하는 것
JavaScript는 파일의 크기, 파일의 실행 시간 등의 이유로 가능하면 트리쉐이킹을 해주는 것이 좋다.
필요한 모듈만 import 하기
import 구문을 사용해 라이브러리를 불러와 사용할 때, 라이브러리 전체를 불러오는 것이 아니라 필요한 모듈만 불러우면 번들링 과정에서 사용하는 부분의 코드만 포함시키기 때문에 트리쉐이킹이 가능하다.
Babelrc 파일 설정하기
Babel : JavaScript 문법이 구형 브라우저에서도 호환이 가능하도록 ES5 문법으로 변환하는 라이브러리
이 때 ES5문법은 import
를 지원하지 않기 때문에 commonJS 문법의 require
로 변경시킨다. require
는 export
되는 모든 모듈을 불러오기 때문에 Barbelrc 파일에 아래 코드를 작성해주면 ES5로 변환하는 것을 막을 수 있다.
{
“presets”: [
[
“@babel/preset-env”,
{
"modules": false
// modules 값을 true로 설정하면 항상 ES5 문법으로 변환하므로 주의해서 작성해야 함
}
]
]
}
: 구글에서 개발한 오픈소스로서 웹 페이지의 품질을 개선할 수 있는 자동화 툴
성능, 접근성, PWA, SEO 등을 검사하며 이를 이용해 사용자는 어떤 웹페이지든 품질 검사를 할 수 있다.
다양한 지표를 이용하여 웹페이지의 성능 검사를 해줄 뿐만 아니라 그에 대한 개선책도 제공해준다.