The race for speed part 1: The JavaScript engine family tree
요즘에는 브라우저가 js를 빨리 실행하는 일이 자연스럽다. creativejs.com에는 이런 빠른 실행 속도를 실제로 구현할 수 있는 반짝이는 예제가 가득 – 늘 그렇진 않다 – 하다.
웹 브라우저는 더 빠르고 효과적인 웹 브라우징 경험을 제공하기 위해 다양한 컴포넌트를 사용하고 있다. 이러한 컴포넌트는 자바스크립트 코드를 인터프리트(Interpret)하거나, 화면을 표시하거나, 혹은 플러그인을 관리하는 역할을 한다. 이렇게 많은 컴포넌트 중에서 자바스크립트를 컴파일하여 컴퓨터가 실행할 수 있는 native instructions로 만드는 컴포넌트, 즉 자바스크립트 엔진을 연재를 통해 살펴보자.
최초의 js 엔진은 1995년 넷스케이프 2.0과 함께 등장한 SpiderMonkey이다. Brendan Eich는 겨우 10일만에 언어를 설계하고, 그 언어의 컴파일러를 만들었다. (믿기 힘들만큼 빠른 개발 속도에 대해서는 여기에서 더 자세히 소개하고 있다) 그 언어, 즉 자바스크립트는 금새 유명해 졌고, 그해 8월 MS는 자바스크립트를 JSript라는 이름으로 IE 3.0에 탑채한다. 1996년 말, 자바스크립트는 표준화 절차를 시작했고, 이듬해 ECMA-262라는 이름의 표준안으로 거듭났다.
브라우저에서 자바스크립트를 지원하는 것은 당연한 기능으로 자리매김했고, 각 브라우저 제조사는 자바스크립트를 지원하기 위한 독자적인 엔진을 개발했다. 시간이 지나면서 여러 자바스크립트 엔진은 진화하거나, 자리를 잃거나, 이름을 바꾸거나, 혹은 다른 엔진으로 분화했다. 이러한 변화 양상을 흝어보는 일은 사소한 일이 아니다.
예컨데 KDE의 Konqueror 브라우저는 그들이 만든 오픈소스엔진인 KJS 엔진을 사용했다. 애플의 개발자들은 이 프로젝트를 가져와서 WebKit 엔진의 자바스크립트 코어로 사용했다. KJS 엔진은 그 이름을 Suq.., Squir… Exterme으로 바꾸다가 최근에는 Nitor란 이름으로 알려져 있다.
반대의 경우도 있다. 같은 이름으로 사용하지만 그 속은 완전 다른 엔진도 많다. Mozilla Firefox의 자바스크립트 엔진은 1995년 넷스케이브에서 사용하던 이름인 SpideerMonkey을 그대로 사용하고 있지만, 그 당시의 코드는 이미 흔적도 없다고 해도 과언이 아니다.
2000년 중반 자바스크립트는 표준화 과정을 거쳐 널리 쓰이고 있었지만, 여전히 코드 실행 속도는 느렸다. 그러던 2008년 새로운 엔진이 레이스를 주도했다. 그해 초에는 오페라의 Fathark 엔진이 가장 빨랐지만, 그해 여름 모질라는 Tracemonkey을, 구글은 크롬 브라우저에 탑채한 V8을 내 놓았다.
헷갈리는 코드네임이 늘어 났지만, 이들 엔진은 여전히 js를 파싱하고 실행할 뿐이다. 그렇다면 이들 엔진은 어떤 점이 서로 다른 걸까? 바로 ‘속도’이다.
2008년에 일어난 사건 이후, 자바스크립트 엔진 설계에는 속도 향상을 위한 창의성과 혁신이 계속되었고, 가장 빠른 브라우저를 위한 경쟁이 시작되었다. 2장에서는 이러한 혁신을 자세히 들여다 보고 자바스크립트 엔진이 어떻게 동작하는지 알아 보자.
1개의 댓글
JinKwon Lee · 2014년 1월 16일 11:26 오후
상현님의 번역 감사합니다. 그런데 외부에서 보니 wiki 주소의 이미지는 볼수가 없네요. ㅠㅠ