It is just my opinion, so don't you attack me. please!
But if this posting has some incorrect informations, you comment about that
Please!!
Features of Javascript and Node.Js what i think
DOM
· DOM이란 무엇인가?
유효한 그리고 올바른 형식의 HTML, XML 문서를 위한 API (Application Programming Interface).
✔︎ API - 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
✔︎ DOM은 BOM(Browser Object Model)의 하위 모델로 생각할 수 있고, DOM은 tree 구조로 되어 있다.
✔︎doucment.getElementById();
에서Document
는 인터페이스로서 DOM1 Core에서 정의한 첫 번째 인터페이스이고document
는 Document 인터페이스를 구현하는 host 개체입니다.Javascript
· JS는 Client 단에서 돌아가기 때문에 Client 측 컴퓨터 성능에 따라 속도가 결정되고 Web server에 부담을 덜 준다.
· JS는 미리 작성된 코드로 page에 있는 DOM 개체에 접근할 수 있고, 동적으로 DOM을 제어할 수 있다.
· JS는 single thread 기반이다.
· Jquery는 javascript를 편하게 사용하기 위한 일종의 library이다.
· JS는 client browser에서 즉시 실행되므로 악용되어 user system에 영향을 미칠 수 있다.
· JS는 렌더링에 따라 다르게 적용이 될 수 있다. 따라서 범용적이지 못한 단점이 있다.Javascript Engine
출처: https://developer.mozilla.org/ko/docs/Web/JavaScript/EventLoop
·JS Engine
은 위와 같은 메모리 구조를 가지고 있다.
·Stack
과Heap
은 여타 다른 언어들과 마찬가지로 함수와 변수는Stack
에 객체들은Heap
에 저장하는 형태를 갖는다.
· 메모리에Queue
가 있는 것이 신기한 점인데, 이 것은 바로message queue
로서 다음에 실행할message
들이 들어있고, 각message
는 함수와 연관이 되어 있다.
·Stack
이 비어 있으면Queue
에서 하나의 메시지가 꺼내지고 처리 됩니다.Why JS is single-thread?
· JS는single-thread
기반이라고 이야기 한다. 그런데 어떻게Asynchronous communication
을 할 수 있으며setTimeout()
,setInterval()
을 이용하여 마치 multi-thread 환경인 것처럼 보이게 만들 수 있을까?
✔︎ JS를single-thread
라고 하는 이유는JS code
가 실행되는 곳이 무조건같은 thread
이기 때문이다. 즉,JS process
는 하나의thread
를 가지고 있는 것이 아니라는 여러 개의thread
를 가질 수도 있다는 이야기이다.
✔︎ 실행중인JS code
는JS process
가event-loop
(message queue)에서 가장 최근에 POP한 것이거나Stack
에 있던 것일 수 있다. 종합적으로 정리해서 말하자면,JS process
내에event-loop
를 확인하는native code
가 존재하고,JS code
를 실행하는thread
와는 다른another thread
가Stack
이 비엇으면 다음 실행할JS code
또는event
를 결정해주는 것이다.
✔︎ EventListener의 경우에도 마찬가지이다. JS code를 보면서 EventListener가 있으면 해당 event를 queue에 넣는다. 이후 그 event가 발생하면, queue에서 POP을 하여 실행한다. 이로써 multi-thread인 것처럼 보여질 수 있는 것이다.
✔︎ 만약 이벤트를 실행하는데 시간이 오래걸린다면 어떨까? JS code의 실행은 하나의 thread에서 처리하기 때문에, 오래 기다리게 될 것이다. 이벤트의 실행시간이 길어서는 안 된다.
<출처: https://webapplog.com/you-dont-know-node/>Node.Js based on JS Engine
· 일반적인 PHP, JSP, ASP 등의 웹서버는 구동 시, Client의 요청을 대기하는 구조로 되어 있다. Node.Js의 장점은 바로요청과 대기
에서 찾을 수 있다.
· Apache 웹서버는 Client의 요청이 있을 때까지 대기하다가 요청이 들어오면 새로운 thread를 생성하여 분기하는 구조를 가지고 있다. 이는 process 또는 thread 생성에 대한 overhead와 공유자원의 복사에 대한 낭비가 발생될 수 있는 구조이다.
· Node.Js의 경우에는 CPU와는 상관없이, I/O 작업같이 시간이 걸리는 작업들은 eventListener로 처리하기 때문에 흐름이 끊기지 않고 빠르게 응답 할 수 있다. 이러한 이유로 1개의 process로 동일한 작업을 더 빠르게 처리하는 것이 가능하다.
· 단점으로는 순차적으로 실행되는 방식에 비해서 코드를 구현하고 흐름을 이해하는 것이 어렵다는 것이다.