티스토리 뷰
https://www.notion.so/simsimjae/11-V8-JS-a7de64cbdba0434295abe8af6bf89b16
아래 글들은 검색엔진 노출을 위한 글입니다.
노션에서 확인하시면 이미지와 함께 정리된 글을 보실수 있습니다. 궁금하신점은 블로그 댓글이나 노션 코멘트를 이용해주세요(@comment)
제가 직접 만든 프로젝트입니다.
http://pickvs.com : 닥전닥후
크롬의 엔진인 V8에 대해서 살펴보자.
- V8은 구글에서 제공하는 오픈소스 자바스크립트 엔진이다. SpiderMonkey, Rhino, JavaScriptCore등의 다른 엔진들도 있다.
- 이런 엔진은 자바스크립트를 CPU가 해석할 수 있는 기계어로 번역해주는 역할을 한다.
- V8엔진은 C++로 작성됬고 Node.js와 Chrome에서 사용된다.
- C/C++와 같은 언어에 비해 자바스크립트는 더 많이 추상화 되어 있어 두 언어에 비해 속도가 느리다. (추상화가 많이 될수록 기계어가 될 떄 까지 더 많은 과정을 거쳐야 하므로)
- 내가 만든 C++함수를 V8엔진에 추가 하는 일도 충분히 가능하다.
- 이런일들이 가능하기 때문에 내가 엔진에 함수를 추가하게 되면 원래의 자바스크립트를 커스텀하는 일도 가능해진다.
- C++은 기본적으로 JS보다 하드웨어에 더 가깝기 떄문에 더 많은 일을 할 수 있다. 따라서, 이 엔진에 함수를 추가해서 JS를 커스텀 한다는것은 강력한 효과를 낼 수 있다.
- Node.js 자체는 V8엔진이고 C++로 구현되어있다.
- 오픈 소스 이기 때문에 내가 엔진을 커스터마이징해서 JS를 확장시킬 수 있다. (https://github.com/v8/v8/blob/master/samples/shell.cc)
예를들어, JS에는 없는 Print라는 함수를 엔진에 추가해놓고 JS에서 Print()를 호출하면 정상 동작하게 만들 수 있다.
// 자바스크립트에서 'print' 함수가 호출될 때마다, v8엔진에 의해 콜백이 호출됩니다. // C++로 구현된 V8엔진에 Print라는 함수를 추가했고, JS에서 가져다 썼다. void Print(const v8::FunctionCallbackInfo<v8::Value>& args) { bool first = true; for (int i=0; i<args.length(); i++) { v8::HandleScope handle_scope(args.GetIsolate()); if (first) { first = false; } else { print(" "); } v8::String::Utf8Value str(args.GetIsolate(), args[i]); const char* cstr = ToCString(str); printf("%s", cstr); } printf("\\n"); fflush(stdout); }
'Javascript' 카테고리의 다른 글
#13 자바스크립트 DOM 이해하기 (0) | 2019.09.25 |
---|---|
#12 자바스크립트 비트연산 활용하기 (0) | 2019.09.25 |
#10 스케쥴링 : setTimeout과 setInterval의 깊은 이해 (0) | 2019.09.25 |
#9 이벤트 루프 (0) | 2019.09.25 |
Event Emitter를 언제 사용해야 할까? (0) | 2019.09.15 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- react
- Polyfill
- storybook
- type alias
- Action
- async
- reactdom
- reducer
- typescript
- javascript
- props
- hydrate
- es6
- useRef
- react hooks
- computed
- mobx
- useEffect
- webpack
- promise
- return type
- await
- Babel
- Next.js
- server side rendering
- reflow
- rendering scope
- state
- design system
- atomic design
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함