Skip to content

Latest commit

 

History

History
90 lines (53 loc) · 3.9 KB

Chapter5.md

File metadata and controls

90 lines (53 loc) · 3.9 KB

CHAPTER 5. 프로그램 성능

5.1 웹 워커

브라우저 같은 환경은 다수의 자바스크립트 엔진 인스턴스를 쉽게 내어줄 수 있고 인스턴스마다 개별 스레드를 배정해 실행할수있다. 이러한 프로그램의 독립적인 스레드 조각을 웹 라고 하는데 프로그램을 덩이로 나누어 병렬 실행하는 작업 병행성을 추구한다.

  • 자바스크립트 메인프로그램에서 워커를 인스턴스화 하는방법

    const w1 = new Worker("js file 위치") ;

    파일을 지정하면 브라우저는 이 파일을 별도의 스레드에서 독립적으로 실행한다.

  • 워커는 같은 워커끼리, 심지어 메인프로그램과도 데이터를 공유하지 않는다.

  • 워커 객체 w1은 이벤트 리스터 + 트리거로 워커가 보낸 이벤트를 구독하고 워커에 이벤트를 보낸다.

    // 리스닝 코드 
    w1.addEventListener("메세지",()=>{
    // 콜백 
    }) ;
    
    // 메세지 이벤트 코드 전달 코드 
    w1.postMessage("sfasfas");

5.1.1 워커 환경

워커 내부에서는 메인코드나 Dom 객체에 접근하는 것이 불가능하다. 대신에 navigator,location,ajax와 같은 중요한 전역 변수/특성 자체를 복사하여 접근할 수 있다.

  • 외부 js 코드를 읽어드리기

    //워커 내부에서 
    importScript("~.js"); 
  • 웹 워커의 주요 용도

    1. 처리 집약적 수학 계산
    2. 대용량 데이터 세트 정렬
    3. 데이터 작업
    4. 트래픽 높은 네트워크 통신

5.1.2 데이터 전송

위의 4가지 용도에는 주요 공통점이 있는데 이벤트 체계를 바탕으로 스레드간 장벽을 넘어 대량의 데이터가 양방향 전성이 되어야 하는 요건이다.

두 가지 방법이 있다.

  1. 구조화된 복제 알고리즘

    알고리즘을 사용하여 객체를 복사/복제 하는 방법이다.

  2. 트랜스퍼러블 객체

    데이터 자체는 그대로 두고 객체의 소유권만 전달하는 방법이다.

구조화된 복제 알고리즘 보단 트랜스퍼러블 객체가 성능이 더 좋다.

5.1.3 공유 워커

네트워크 제약이 필요한 상황에서 웹의 사이트와 웹의 페이지 인스턴스를 공유할 수 있는 중앙 워커를 사용하면 도움이 되는데 SharedWorker 를 사용하여 생성을 할 수 있다.

공유 워커는 전용 워커와 기능과 의도는 같지만 다수의 인스턴스와 연결이 가능하기에 포트라는 고유의 식별자가 있어 이부분을 설정 해주는 것 말고는 차이가 없다.

  • 포트접속이 끊겨도 다른 포트 접속이 살아있다면 공유 포트는 유지된다.

5.1.4 웹 워커 폴리필

웹 워커를 사용할 땐 실행 환경이 비호환 구형 브라우저인 경우를 감안 해야한다.

구형 브라우저에서는 웹 워커가 돌아가지 않는다. 저자의 말에 따르면 폴리필을 찾으려면 찾을 수 는 있지만 별로 좋아 보이진 않는다고 한다.

5.2 SIMD

SIMD 는 데이터 병행성을 나타내는 형식으로 웹 워커의 작업 병행성과는 대조되는 개념이다.

SIMD의 관심사는 여러데이터 비트를 병렬로 처리하는 일이다.

SIMD는 스레드를 지원하지 않고 현대 CPU가 숫자 벡터와 모든숫자에 병렬 연산이 가능한 명령어 세트를 지원하는 데 이것을 이용한다.

5.3 asm.js

asm.js 는 자바스크립트 언어에서 고도로 최적화 가능한 부분 집합을 말한다.

최적화 하기 어려운 , 특정한 체계와 패턴을 방지한 asm.js식 코드는 자바스크립트 엔진이 인식하여 아주 공격적으로 저수준 최적화를 하는 등의 특별히 조치한다.

최적화 방법의 코드 가독성 같은 부분은 좋지 않은 것 같다.