신동민 2008.09.10 13:15 전체공개

브라우저 전쟁, 자바스크립트 엔진 전쟁으로?

http://channy.tistory.com/287
차니님의 블로그 글을 보니
모질라쪽 사람들이 크롬을 보고 한마디씩 했는데...
http://weblogs.mozillazine.org/roadmap/archives/2008/09/tracemonkey_update.html
http://www.kbench.com/news/?cc=59&pr=0&no=59371
그 중에 Bendan Hich가 한 말을 보면
크롬의 자바스크립트 엔진인 V8에 대해 언급하면서
은근히 파이어폭스의 자바스크립트 엔진(에 애드온될) TraceMonkey가 더 낫다고 빠직하고 있다.
http://andreasgal.com/2008/09/03/tracemonkey-vs-v8/
그 동안 IE와 FF 간에 벌어졌던 브라우저 전쟁이
이제는 크롬과 FF의 자바스크립트 엔진 전쟁으로
양상이 변해가고 있는 게 아닌가 싶으다.
Chrome
V8
- http://code.google.com/p/v8/
V8 is Google's open source JavaScript engine.
V8 is written in C++ and is used in Google Chrome, the open source browser from Google.
V8 implements ECMAScript.
V8은 구글 크롬 브라우저에서 사용되는 C++로 개발된 자바스크립트 엔진으로 ECMAScript 를 구현하였다.
V8 compiles and executes JavaScript source code,
handles memory allocation for objects, and garbage collects objects it no longer needs.
V8은 자바스크립트 소스 코드를 컴파일하고 실행하고 메모리 할당을 관리하며 가비지 컬렉션을 수행한다.
There are three key areas to V8's performance:
V8 성능 향상의 3대 요소
1. Fast Property Access
1. 프로퍼티 접근이 빠르다
Most JavaScript engines use a dictionary-like data structure as storage for object properties
- each property access requires a dynamic lookup to resolve the property's location in memory.
대부분의 자바스크립트 엔진은 오브젝트의 프로퍼티를 저장하기 위해 딕셔너리 류의 자료 구조를 사용하는데,
각각의 프로퍼티에 접근하기 위해서는 메모리상의 프로퍼티 위치를 찾아내기 위해 동적 룩업을 해야 한다.
V8 does not use dynamic lookup to access properties.
Instead, V8 dynamically creates hidden classes behind the scenes.
V8은 프로퍼티 접근을 위해 동적 룩업을 사용하지 않고,
동적으로 히든 클래스를 생성하여 이를 활용한다.
There are two advantages to using hidden classes:
property access does not require a dictionary lookup,
and they enable V8 to use the classic class-based optimization, inline caching.
히든 클래스의 사용에는 두 가지 장점이 있는데,
프로퍼티 접근이 딕셔너리 룩업을 필요로 하지 않는다는 것과
전통적인 클래스 기반 최적화, 인라인 캐싱을 사용할 수 있다는 것이다.
2. Dynamic Machine Code Generation
2. 동적인 머신 코드 생성
V8 compiles JavaScript source code directly into machine code when it is first executed.
There are no intermediate byte codes, no interpreter.
V8은 자바스크립트 코드가 처음 실행될 때 자바스크립트 코드를 직접 머신 코드로 컴파일해버린다.
( VM도 아니고 인터프리터도 아니여 )
3. Efficient Garbage Collection
3. 효율적인 가비지 컬렉션
V8 employs a stop-the-world, generational, accurate, garbage collector.
This means that V8:
stops program execution when performing a garbage collection cycle.
processes only part of the object heap in most garbage collection cycles.
This minimizes the impact of stopping the application.
always knows exactly where all objects and pointers are in memory.
This avoids falsely identifying objects as pointers which can result in memory leaks.
V8은
가비지 컬렉션 싸이클 수행 시에는 프로그램 실행을 중단시키는데,
그러면서도 대부분의 가비지 컬렉션 사이클에서 오브젝트 힙의 일부분만을 처리해서
프로그램 중단의 영향을 최소화하고,
항상 오브젝트와 포인터가 메모리상에 어디 있는지 정확하게 알기 때문에
메모리 릭이 날 수 있는 오브젝트에 대한 잘못된 참조를 피하도록 한다.
Firefox
TraceMonkey
- https://wiki.mozilla.org/JavaScript:TraceMonkey
TraceMonkey adds native code compilation to Mozilla’s JavaScript engine (known as SpiderMonkey).
TraceMonkey는 모질라의 자바스크립트 엔진인 SpiderMonkey에 네이티브 코드 컴파일 기능을 더해준다.
It is based on a technique developed at UC Irvine called"trace trees".
TraceMonkey는 UC Irvine에서 개발된"trace trees"라는 기술에 기반을 두고 있다.
an evolution of Firefox's SpiderMonkey JavaScript engine for Firefox 3.1
that uses a new kind of Just-In-Time (JIT) compiler
to boost JS performance by an order of magnitude or more.
파이어폭스 3.1에 적용될 SpiderMonkey 자바스크립트 엔진은
새로운 종류의 JIT 컴파일러를 사용하여
자바스크립트 성능을 한 단계 향상시킨다.
SpiderMoney - http://www.mozilla.org/js/spidermonkey/
SpiderMonkey is the code-name for the Mozilla's C implementation of JavaScript.
SpiderMonkey 는 C로 구현된 모질라의 자바스크립트 엔진의 코드명이다.

0

0

댓글0

    댓글 더보기

    삭제 하시겠습니까? 취소 삭제

    로그인 하시겠습니까? 확인 취소

    댓글을 삭제 하시겠습니까? 확인 취소