Javascript를 최적화를 위한 다양한 방법들을 알아보자!
[ 속도가 중요한 이유 ]
https://web.dev/why-speed-matters/
속도가 왜 중요합니까?
사용자 경험에서 속도는 중요한 역할을 합니다. 모바일 속도로 인한 지연은 실망스러울 뿐만 아니라 비즈니스 결과에도 부정적인 영향을 미칠 수 있습니다.
web.dev
성능 측정의 척도
- 올바르게 동작하게 만든다
👉 메모리, 네트워크 트래픽과 같은 자원과 연관
- 빠르게 동작하게 만든다.
👉 시간과 관계
시간
시간은 크게 3가지로 분류한다.
1. 초기 구동시간
2. 계산시간
3. 반응 시간
이 시간들을 어떻게 최적화 할지 알아보자.
초기 구동시간
- 초기에 애플리케이션이 로드 되는 시간
[ 초기 구동시간을 줄이는 법 ]
- 다운로드 해야하는 파일 갯수,용량은 작게!
👉 이미지 스프라이트 기법
👉 가능한 최신 포맷의 이미지 사용 (WebP ,AVIF)
( IE 지원불가능 주의 )
👉 최적화된 폰트사용
( 폰트용량 고려, 최신포맷의 폰트사용 , 이미지폰트사용 )
계산시간
- 동일한 계산을 얼마나 빨리 수행하는지
👉 알고리즘 영역
반응 시간
- 사용자 행동에 얼마나 빨리 반응하는지
반응시간을 줄이기 위해선 브라우저의 렌더링 과정을 이해해야한다.
[ 😀 브라우저 렌더링에 대해 궁금하다면 ? ]
https://mandelina-code.tistory.com/63
[FE] 웹페이지 렌더링과 page reflow & repaint
웹 페이지 렌더링 - 브라우저가 HTML파일을 화면에 그려내는 과정 1. 파싱 : HTML파일을 DOM으로 변환 (파싱) 2. 스타일 계산 : CSS를 CSSOM으로 파싱 3. 레이아웃 : CSSOM 정보를 토대로 레이아웃 트리(렌더
mandelina-code.tistory.com
반응 시간을 줄이기 위해서는
1. JS보단 CSS로 애니메이션 수정
2. Position보단 Transform 속성을 사용
3. repaint, reflow 를 유발하는 속성은 되도록 사용하지 않기
참고 : css 속성별 reflow & repaint 를 유발하는 브라우저
CSS Triggers
@PROPERTY_DESCRIPTION@ B G W E Change from default B G W E Subsequent updates
csstriggers.com
4. requestAnimationFrame 을 사용
requestAnimationFrame 란 ?
- 비활성 탭에서는 애니메이션이 동작하지 않게 한다.
- 브라우저가 애니메이션을 최적화 하도록 한다.
5. DOM 접근과 업데이트는 가능한 적게한다.
- DOM접근은 가능한 좁은 범위에서!
- DocumentFragment 을 사용하여 DOM을 한번에 업데이트
메모리
메모리누수 ?
프로그램이 필요하지 않은 메모리 공간을 계속해서 점유하는 현상을 의미
이를 방지하기 위해 고수준 언어에는 가비지 컬렉터가 존재
Garbage Collection ?
- 자바스크립트 엔진이 사용하지 않는 메모리를 추정하여 삭제한다.
- 이때 사용하는 방식은 참조 카운팅이다.
- 참조카운팅이 0이 되면 값을 메모리에서 삭제
- 객체끼리 서로 맞물려있어 제거되지 않았던 순환 참조 문제가 있었지만 마크 스위프 알고리즘을 통해 해결
[마크 스위프 알고리즘]
https://developer.mozilla.org/ko/docs/Web/JavaScript/Memory_Management#mark-and-sweep_algorithm
자바스크립트의 메모리 관리 - JavaScript | MDN
C 언어같은 저수준 언어에서는 메모리 관리를 위해 malloc() 과 free()를 사용합니다. 반면, 자바스크립트는 객체가 생성되었을 때 자동으로 메모리를 할당하고 더 이상 필요하지 않을 때 자동으
developer.mozilla.org
- 전역변수는 프로그램이 종료되기 전까지 계속 메모리에 존재하므로 주의해서 사용해야한다.
strict mode (엄격모드)
엄격모드란 ?
- 오류를 줄여 안정적인 코드를 생산하기 위해 ES5부터 엄격모드가 추가되었다.
- 자바스크립트 언어의 문법을 좀 더 엄격히 적용하여 오류발생을 줄이고 최적화 작업에 문제를 일으킬수 있는 코드에 대해 명시적인 에러를 발생시킨다.
적용방법
- 전역의 선두에 'use strict'를 추가한다.
'use strict' ;
엄격모드가 발생시키는 에러
1. 암묵적 전역 : 선언하지 않은 변수를 참조하면 RefernceError
2. 변수,함수,매개변수의 삭제 : delete연산자로 지울수 없는 값 삭제시 SyntaxError
3. 매개변수 이름의 중복 : 중복된 매개변수 이름을 사용하면 SyntaxError
4. 읽기 전용 객체에 값을 할당하면 에러
하지만 전역에 strict mode를 적용하는것 또는 함수단위로 적용하는 것은 피하고
즉시 실행 함수로 감싼 스크립트 단위로 적용하는것이 바람직하다.
'FE' 카테고리의 다른 글
[Electron] 일렉트론이란? (0) | 2022.11.14 |
---|---|
리액트를 사용해보고 느낀점과 Next.js vs Gatsby 알아보기 (2) | 2022.08.04 |
[디자인패턴] 아토믹패턴이란? (2) | 2022.07.04 |
SSR , CSR이 무엇일까 ? (0) | 2022.06.22 |
[FE] 브라우저 렌더링과 page reflow & repaint (0) | 2022.05.19 |