본문으로 건너뛰기

"internals" 태그로 연결된 34개 게시물개의 게시물이 있습니다.

모든 태그 보기

자바스크립트 코드 커버리지

· 약 8분
Jakob Gruber ([@schuay](https://twitter.com/schuay))

코드 커버리지는 애플리케이션의 특정 부분이 실행되었는지 여부와 선택적으로 얼마나 자주 실행되었는지에 대한 정보를 제공합니다. 이는 테스트 스위트가 특정 코드베이스를 얼마나 철저히 검증하는지 판단하는 데 자주 사용됩니다.

왜 유용한가요?

자바스크립트 개발자로서 코드 커버리지가 유용할 수 있는 상황에 자주 처하게 될 것입니다. 예를 들어:

  • 테스트 스위트의 품질에 관심이 있나요? 오래된 레거시 프로젝트를 리팩토링 중인가요? 코드 커버리지는 코드베이스의 어떤 부분이 커버되었는지를 정확히 보여줄 수 있습니다.
  • 코드베이스의 특정 부분이 빠르게 도달되었는지 알고 싶나요? console.log를 이용한 printf 스타일 디버깅이나 코드를 수동으로 디버깅하는 대신, 코드 커버리지는 애플리케이션의 어떤 부분이 실행되었는지에 대한 실시간 정보를 표시할 수 있습니다.
  • 또는 속도 최적화를 위해 어느 부분에 집중해야 할지 알고 싶나요? 실행 횟수는 핫 함수와 루프를 지적할 수 있습니다.

Orinoco: 젊은 세대 가비지 컬렉션

· 약 6분
Ulan Degenbaev, Michael Lippautz, Hannes Payer, [TSAN](https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual)의 친구들

V8의 JavaScript 객체는 V8의 가비지 컬렉터로 관리되는 힙에 할당됩니다. 이전 블로그 글에서는 가비지 컬렉션 일시 중지 시간을 어떻게 줄이는지 (여러 번) 그리고 메모리 소비를 줄이는 방법도 다뤘습니다. 이번 블로그 글에서는 V8의 거의 병렬 및 동시 가비지 컬렉터 Orinoco의 최신 기능 중 하나인 병렬 Scavenger를 소개하고 설계 결정 및 대안 접근 방식에 대해 논의합니다.

V8의 Elements 종류

· 약 12분
Mathias Bynens ([@mathias](https://twitter.com/mathias))
노트

참고: 기사 읽기 대신 발표를 보는 것을 선호하는 경우 아래 비디오를 즐기세요!

JavaScript 객체는 임의의 속성을 가질 수 있습니다. 객체 속성 이름에는 어떤 문자든 포함될 수 있습니다. JavaScript 엔진이 최적화하려는 흥미로운 경우 중 하나는 속성 이름이 숫자로만 구성된 속성, 특히 배열 인덱스입니다.

V8에서 빠른 속성

· 약 10분
Camillo Bruni ([@camillobruni](https://twitter.com/camillobruni)), [“빠른 `for`-`in`”](/blog/fast-for-in)의 저자

이 블로그 게시물에서는 V8이 JavaScript 속성을 내부적으로 어떻게 처리하는지 설명하고자 합니다. JavaScript의 관점에서 속성에 대한 몇 가지 구별만 필요합니다. JavaScript 객체는 대부분 문자열 키와 임의 객체를 값으로 하는 사전처럼 작동합니다. 하지만 사양에서는 정수 인덱스 속성과 다른 속성을 반복 중 다르게 취급합니다. 그 외에는 정수 인덱스인지 아닌지에 관계없이 서로 다른 속성이 대부분 동일하게 작동합니다.

Ignition과 TurboFan 출시

· 약 5분
V8 팀

오늘 우리는 Chrome v59의 안정 버전에 도달할 V8 v5.9에 대한 새로운 JavaScript 실행 파이프라인 출시를 발표하게 되어 기쁩니다. 새 파이프라인을 통해 실제 JavaScript 애플리케이션에서 대규모 성능 향상과 상당한 메모리 절약을 이룰 수 있습니다. 이 게시물 끝부분에서 숫자에 대해 자세히 논의하겠지만 먼저 파이프라인 자체를 살펴보겠습니다.

빠른 `for`-`in` V8

· 약 11분
Camillo Bruni ([@camillobruni](http://twitter.com/camillobruni))

for-in은 많은 프레임워크에서 널리 사용되는 언어 기능입니다. 그 보편성에도 불구하고, 구현 관점에서는 비교적 모호한 언어 구조 중 하나입니다. V8은 이 기능을 가능한 한 빠르게 만들기 위해 많은 노력을 기울였습니다. 지난 1년 동안, for-in은 완전히 사양을 준수하게 되었고 문맥에 따라 최대 3배 빨라졌습니다.

V8의 미래 테스트를 도와주세요!

· 약 2분
Daniel Clifford ([@expatdanno](https://twitter.com/expatdanno)), Original Munich V8 Brewer

V8 팀은 현재 실제 JavaScript 성능에 개선을 가져올 수 있는 새로운 기본 컴파일러 파이프라인을 개발 중입니다. Chrome Canary에서 새로운 파이프라인을 오늘 미리 경험하여 모든 Chrome 채널에 새로운 설정을 배포할 때 예상치 못한 문제가 없는지 확인하는 데 도움을 줄 수 있습니다.

점화를 점화 해석기로 시작하기

· 약 3분
로스 맥일로이, V8 점화 시동기

V8 및 기타 현대 자바스크립트 엔진들은 스크립트를 실행 직전에 네이티브 머신 코드로 즉시(JIT) 컴파일하여 속도를 얻습니다. 코드가 처음에는 기본 컴파일러에 의해 컴파일되며, 이는 최적화되지 않은 머신 코드를 빠르게 생성할 수 있습니다. 컴파일된 코드는 실행 중 분석되며, 필요에 따라 더 고급의 최적화 컴파일러로 동적으로 다시 컴파일되어 최상의 성능을 제공합니다. V8에서는 이러한 스크립트 실행 파이프라인이 다양한 특수 사례와 조건을 포함하고 있어 기본 컴파일러와 Crankshaft 및 TurboFan이라는 두 개의 최적화 컴파일러 사이를 전환하기 위한 복잡한 메커니즘이 필요합니다.

Jank Busters Part Two: Orinoco

· 약 5분
the jank busters: Ulan Degenbaev, Michael Lippautz, and Hannes Payer

이전 블로그 게시글에서 우리는 가비지 컬렉션이 부드러운 브라우징 경험을 방해하며 발생하는 잉크 문제를 소개했습니다. 이 블로그 게시글에서는 새로운 V8 가비지 컬렉터인 _Orinoco_를 구축하기 위한 세 가지 최적화를 소개합니다. Orinoco는 대부분 병렬적이고 동시적 가비지 컬렉터를 엄격한 세대 경계를 넘어 구현함으로써 가비지 컬렉션 잉크와 메모리 소비를 줄이는 동시에 높은 처리량을 제공할 수 있다는 아이디어를 바탕에 두고 있습니다. Orinoco를 별도의 가비지 컬렉터로서의 플래그 뒤에 구현하는 대신, 즉각적으로 사용자에게 도움을 줄 수 있도록 Orinoco의 기능들을 V8의 최상위 트리에 점진적으로 배포하기로 결정하였습니다. 이번 글에서 논의된 세 가지 기능은 병렬 압축, 병렬 기억 집합 처리, 및 블랙 할당입니다.

V8 추가 기능

· 약 5분
도메닉 데니콜라 ([@domenic](https://twitter.com/domenic)), Streams 마법사

V8은 JavaScript 언어의 기본 객체와 함수의 큰 부분을 JavaScript 자체로 구현합니다. 예를 들어, 우리의 프라미스 구현은 JavaScript로 작성된 것을 볼 수 있습니다. 이러한 내장 요소들은 자체 호스팅 이라고 불립니다. 이러한 구현들은 시작 스냅샷에 포함되어 있어 새로운 컨텍스트를 실행 중에 자체 호스팅 내장 요소를 준비하고 초기화할 필요 없이 빠르게 생성할 수 있습니다.