hmk run dev
웹 어셈블리(WebAssembly)를 쓰는 이유 본문
웹 어셈블리란 왜 쓰는 것일까?
새로운 프로그램 언어가 아닌
브라우저에서 실행할 수 있는 새로운 파일 형식
WASM를 쓰는 이유
자바스크립트 말고 다른 언어의 코드도 브라우저에서 실행 가능
javascript 보다 작동 속도가 빠르다.
js 코드는 크롬 브라우저가 실행해준다.
그 과정을 뜯어보면 상당히 복잡한데
javascript 작동과정
1. 크롬 브라우저가 js 코드를 발견한다.
2. parsing ex) 코드의 변수 함수 등을 스캔
3. Bytecode // 기계 친화적인 js 해석본
> 반복되는 코드는 최적화 Optimized Code(Optimizing 해줌)
> Turbofan 엔진이 빠르게 실행해줌
옵티마이즈는 취소도 가끔 함 ex) 타입이 변하거나 그럴 때!
4. interpreter가 코드 실행 (ignition)
wasm 작동과정
1. 크롬에서 만든 liftoff 엔진이 wasm을 실행
> js처럼 parsing의 과정이 필요 없음 // 미리 컴파일된 바이너리 포맷사용
> 속도가 빠름
2. optimizing 할 수 있는 코드들을 만나면 Turbofan이 실행시켜줌
> 거의 모든 코드가 optimzing 될 수 있음 (js는 반복 출현하는 코드만 주로 함)
> optimzing 취소가 거의 일어나지 않음
> wasm은 빠른 Turbofan을 잘 씀
그렇다고 wasm이 항상 js보다 빠른 것은 아님
> js가 optimzing이 되면 turbofan에서 코드를 실행
> wasm이 optimzing이 되면 turbofan에서 코드를 실행
>> js코드도 충분히 잘짠다면 wasm과 비슷한 성능을 낼 수 있음!
종합해보자면 wasm은
1. 터보팬 작동까지 시간이적게 걸림
2. 거의 모든 코드가 터보팬으로 이동하고
3. 중간에 꺼질일이 드물다.
4. 항상 더 빠른 속도를 내진 않지만 안정적으로 빠른 속도 기대 가능
wasm을 쓰면서 javascript코드가 turbofan을 잘 쓰도록 코드를 짜는 힌트도 얻을 수 있을지도..?
자바스크립트 대체제가 아닌 작성한 js코드 중에 특정 부분이 느리다면 사용할 수 있는 좋은 방법 중 하나 가라고 말할 수 있겠습니다.
'javascript' 카테고리의 다른 글
setTimeout, setInterval 그리고 자바스크립트의 비동기 처리에 대해... (0) | 2022.05.05 |
---|---|
이터레이터 & 제너레이터 (0) | 2022.04.18 |
자바스크립트 실행 컨텍스트(Excution Context) (0) | 2022.03.20 |
스코프 & 클로저 & this 개념말고 실전 (feat. vue) (0) | 2022.01.12 |
javascript loop (0) | 2021.12.22 |