기본 작동원리
- 브라우저의 내장 엔진이 스크립트를 읽는다. (parsing)
- 파싱 한 스크립트를 기계어로 전환한다. (compiling)
- 기계어로 전환된 코드가 실행.
엔진은 상기 프로세스 각 단계마다 최적화를 진행. 더나아가 컴파일이 끝나고 실행 중인 코드를 감시하면서, 이 코드로 흘러가는 데이터를 분석하고, 분석 결과를 토대로 기계어로 전환된 코드를 다시 최적화하는 작업도 진행. -> 실행 속도 증가.
Browser로 할 수 있는 것.
- 페이지에 새로운 HTML을 추가, 기존 HTML, CSS 수정하기
- 클릭, 포인터 움직임, 키보드 등 EVENT에 반응하기
- 네트워크를 통해 원격 서버에 요청을 보내거나, 파일 다운로드/업로드 하기(AJAX, COMET)
- 쿠키를 가져오거나 설정, 사용자와 인터렉션 추가
- 클라이언트에 데이터 저장하기(쿠키, 세션)
Browser로 할 수 없는 것
- 스크립트는 디스크 내 파일 CRUD가 제약됨.
- 기본적으로 브라우저 내 탭과 창은 동일출처정책(SOP)에 의거하여 서로의 정보를 알 수 없음.
- 기본적으로 타 사이트나 도메인에서 데이터를 받아오는 것은 불가.(CORS)
JS만의 강점
- HTML, CSS 완전히 통합 가능
- 모든 주요 브라우저에서 지원
- 간단한 일은 간단하게 처리할 수 있게 해줌.
JS 기반 transpile 언어들
browser에서 실행되기 전에 JS로 트랜스파일 할 수 있는 새로운 언어들이 많이 등장.
- CoffeeScript: 짧은 문법을 도입하여 명료하고 이해하기 쉬운 코드로 작성. 자바스크립트를 위한 'syntactic sugar’
- TypeScript: 'strict data typing'에 집중해 만든 언어
- Flow: TS와 마찬가지로 자료형 강제에 목적을 둔 언어
- Dart: 모바일 앱과 같이 브라우저가 아닌 환경에서 동작하는 고유의 엔진을 가진 독자적 언어