[Front] WebAssembly에 관하여

WebAssembly란

  • 2015년에 발표한 로우레벨의 웹 바이러니 포맷
  • 구글, 모질라, 마이크로 소프트, 애플과 wsc에서 어셈블리 그룹을 만들어서 표준화 준비중 (주요 프로젝트의 개발자들이 참여한다는점을 주목)
  • 결과물은 구글, 마이크로소프트, 모질라 같은 브라우저 업체에서 사용 (크롬 카나리아, 파이어폭스 nightly에서 확인)
  • 원하는 언어로 짠 결과물을 (현재는 c++) 브라우저에서 돌릴수 있도록 해줌

모질라 최고기술책임자(CTO)였던 자바스크립트 창시자, 브렌던 아이크는 개인 블로그를 통해 웹어셈블리 표준화 소식을 전하며 "웹어셈블리는 처음엔 asm.js와 이를 위한 보조표현(co-expressive) 형태로, 장기적으로는 자바스크립트 문법에서 분리 가능한 형태로 구현될 것"이라고 설명했다.

왜 asm.js가 있는데 만든걸까?

먼저 asm.js란

저수준의 언어 c나 c++코드를 웹으로 포팅하는데 유용한 자바스크립트의 섭셋이다.
새로운 기능이라기 보다는 그저 새로운 코딩스타일일뿐. Emscripten같은 컴파일 라이브러리를 이용한다.

여길 참고하길 바란다.
https://blog.outsider.ne.kr/927

무엇이 문제였을까.

"asm.js 처리시 파서가 과열지점(hotspot)이 되고, 그 전 단계에서 대역폭을 절약하기 위해 이뤄진 압축을 해제하는 과정도 (전체 실행 성능에) 지장을 초래한다"며 "그리고 자바스크립트는 asm.js에서 다루기 어려운 문제점도 포함하고 있다"고 지적했다.

  • 그냥 자바스크립트가 파싱하는것보다 20배가 더 빠르다. 모바일에서 큰 프로젝트는 파싱하는데만 20~40초가 걸리는데 이것은 유저 경험에 치명적이다
  • asm.js에 대한 특별한 최적화 없이 좋은 성능을 내고 AOT-compilablity의 제약을 피하기 위해서이다

_ AOT-compilablity : 목표 시스템의 기계어와 무관하게 중간 언어 형태로 배포된 후 목표 시스템에서 인터프리터나 JIT 컴파일 등 기계어 번역을 통해 실행되는 중간 언어를 미리 목표 시스템에 맞는 기계어로 번역하는 방식 _

WebAssembly는?

  • 기존의 포터블들은 c와 c++을 브라우저에서 구현 할 수 있게 해주지만 플러그인이 따로 필요해서 보안에 취약
  • 웹어셈블리는 문법을 네이트브로 지원해서 보안에 강함, 상호운영성이 좋음
  • 크기와 로딩시간의 효율성
  • 하드웨어의 navitive의 처리속도를 따라가고자함
  • 자바스크립트 가상머신안에서 실행되고 메모리적으로 안전하며 웹에 임베디드 되어있는 형태라 브라우저의 보안측면에서 안정적이다.

좀 더

데모

  • Chrome Canary, Firefox Nightly에서 유니티의 기본게임(angry bot)을 시연 가능
  • 일반 브라우저에서는 asm.js로 동작하는걸 볼 수 있음

https://webassembly.github.io/demo/

참고

Comments

comments powered by Disqus
comments powered by Disqus