Menu

메모용 개발 블로그

전체보기 > Develop > JavaScript >

자바스크립트 Native Code, 간단한 속도 비교

2022-02-25 02:29:23

본론

종종 기본 제공 메소드들을 로그 찍어보면 Native Code라는 출력을 볼 수 있다.

> console.log(Promise)
VM130:1 ƒ Promise() { [native code] }

이러한 메소드들은 브라우저 자체에 컴파일되어 있기 때문에 내부 코드를 볼 수 없다.

컴파일된 기본 내장함수들은 C나 C++등으로 개발하여 Js가 실행되는 환경 자체에 탑재되어 있기 때문에 호출 시에 우수한 속도를 보여준다.

번외 1

유명한 자바스크립트 엔진 중에 하나인 v8은 오픈소스이므로 들어가서 작성된 코드를 확인해볼 수도 있다.

https://github.com/v8/v8

번외 2

평소에는 당연한 듯이 사용하는 기능이지만 가끔 동일한 기능에 대해서 네이티브 코드와 Js코드의 속도차이를 볼 만한 상황이 있는데.

대표적으로 Promise가 있다.

Promise는 IE에서 지원하지 않는 대표적인 기능중 하나이나 별도의 문법을 지닌 형태의 기능이 아니다보니 babel으로 변환하거나 혹은 polyfill 코드를 그대로 넣어서 IE에서도 Promise를 사용하기도 한다.

그래서 Promise를 통한 속도 비교를 해보겠다.

실험 환경

let run = function() {
    console.time();
    var promise = new Promise(function(resolve, reject) {
        resolve("Hello");
    });
    promise.then(function(v) {
        console.log(v);
        console.timeEnd();
    });
}

위와 같이 간단한 코드를 사용하였다.

실행환경 : Chrome - 버전 98.0.4758.102(공식 빌드) (arm64)

polyfill 코드

polyfill코드는 https://www.npmjs.com/package/promise-polyfill 해당 링크에서 min으로 압축된 코드를 받아서 마지막단에 무조건 기존의 Promise를 대체하도록만 간단한 수정만 해주었다.

> Promise
ƒ r(e){if(!(this instanceof r))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=undef…
> run();
undefined
(index):15 Hello
(index):16 default: 1.640869140625 ms
> run();
undefined
(index):15 Hello
(index):16 default: 1.29296875 ms
> run();
undefined
(index):15 Hello
(index):16 default: 1.596923828125 ms

Native 코드

> Promise
ƒ Promise() { [native code] }
> run();
(index):14 Hello
(index):15 default: 0.194091796875 ms
undefined
> run();
(index):14 Hello
(index):15 default: 0.218994140625 ms
undefined
> run();
(index):14 Hello
(index):15 default: 0.170166015625 ms
undefined

네이티브 코드가 압도적으로 빠른 결과를 보여주는 모습을 볼 수 있다.