기본 개념
Node.js 또는 Node는 JavaScript 서버 측에서 실행할 수있는 플랫폼입니다. Node.js javascript 의 모듈 식 개발을 개척했다고 말할 수 있습니다. 초기 javascript 요구 사항은 매우 간단했으며 기본적으로 기능으로 작성되었으며 프로세스 지향 작성이 뒤 따릅니다. 나중에, 객체 지향 개발 아이디어가 점차 소개되었고, 그 후 천천히 수업에 기록되었습니다. 마지막으로, Node.js의 출현은 JS 모듈 식 개발의 개념을 갖기 시작하여 명명 충돌 및 기타 개발 문제와 같은 부풀린 js 코드를 제거했습니다.
Node 가장 큰 특징은 비동기 I/O 및 이벤트 중심의 아키텍처 설계의 채택입니다. Node.js 는 JS가 브라우저 밖에서 실행할 수있는 플랫폼입니다. 초기 목표는 이벤트 중심의 비 블로킹 I/O 웹 서버를 구현하는 것입니다.
Node.js 는 JavaScript 실행중인 환경 (또는 라이브러리 세트)으로, 비동기 IO의 기능, 즉 네트워크 및 파일을 읽고 쓰는 표준 js 보충합니다.
라이브러리로서, 그것은 곡 API에 지나지 않습니다. 약간 반 인간 이벤트 콜백 외에도 다른 백엔드 언어 (PHP, Python)와 크게 다르지 않습니다.
Node.js 단일 스레드 모드를 사용합니다. 각 스레드는 함수를 완성합니다. 프로세스에는 여러 스레드가있을 수 있습니다. 모든 I/OS는 비동기 요청 방법에 사용됩니다. 각 비동기 I/O 요청이 완료되면 이벤트 대기열로 푸시되고 프로그램 프로세스가 처리 될 때까지 기다립니다.
요컨대, node 의 핵심 아이디어는 비 블로킹, 단일 스레드 및 이벤트 중심입니다. (동기식은 차단에 해당하고 비동기식은 비 차단에 해당합니다)
Node.JS 아키텍처 다이어그램
단일 스레드
javascript 언어의 실행 환경은 "단일 스레드"입니다.
소위 "단일 스레드"는 하나의 작업을 한 번에만 완료 할 수 있음을 의미합니다. 여러 작업이있는 경우 대기열을 큐를 타거나 이전 작업을 완료하고 다음 작업을 실행하는 등을 수행해야합니다.
이 모델의 장점은 구현이 비교적 간단하고 실행 환경이 비교적 간단하다는 것입니다. 단점은 오랜 시간이 걸리는 작업이있는 한 후속 작업을 대기해야하므로 전체 프로그램의 실행을 지연시킬 것입니다. 공통 브라우저는 특정 Javascript 코드 조각이 오랫동안 실행되기 때문에 (예 : Dead Loop)이 장소에 전체 페이지가 붙어 있고 다른 작업을 실행할 수 없기 때문에 일반 브라우저는 응답하지 않습니다 (가짜 죽음).
대부분의 웹 애플리케이션의 병목 현상은 I/O , 즉 디스크를 읽고 쓰고, 네트워크를 읽고 쓰고, 데이터베이스를 읽고 쓰는 것입니다. 이 기간 동안 기다리는 데 사용하는 전략은 성능 향상의 핵심 요점이되었습니다.
동기 및 비동기
이 문제를 해결하기 위해 Javascript 언어는 작업 모드를 작업 모드를 동기 (동기)와 비동기식 (비동기)의 두 가지 유형으로 나눕니다.
"동기 모드"는 이전 섹션의 모드입니다. 후자의 작업은 이전 작업이 종료 된 다음 실행되기를 기다립니다. 프로그램의 실행 순서는 작업의 배열 순서와 일관되고 동기입니다. "비동기 모드"는 완전히 다릅니다. 각 작업에는 하나 이상의 콜백 기능 ( callback )이 있습니다. 이전 작업이 끝나면 다음 작업이 아니지만 콜백 함수가 실행됩니다. 후자의 작업은 이전 작업이 종료되기를 기다리지 않고 실행되므로 프로그램의 실행 순서는 작업의 배열 순서와 일치하지 않으며 비동기입니다.
"비동기 모드"는 매우 중요합니다. 브라우저 측에서는 브라우저가 응답을 잃지 않도록 장기 작업을 비동기로 실행해야합니다. 가장 좋은 예는 Ajax 작업입니다. 서버 측에서 "비동기 모드"는 유일한 모드입니다. 실행 환경이 단일 스레드이기 때문에 모든 http 요청을 동시에 실행할 수 있으면 서버 성능이 급격히 떨어지고 곧 응답이 손실됩니다.
프로세스 및 스레드
Mac 시스템의 프로세스 및 스레드
그림에서 프로세스에 여러 스레드가 포함될 수 있음을 알 수 있습니다. 프로세스는 프로젝트의 워크샵과 같습니다. 스레드는이 워크숍에서 작업자입니다. 스레드를 소개하는 운영 체제에서는 일반적으로 프로세스를 리소스 할당을위한 기본 장치로 사용하고 스레드는 독립적 인 운영 및 독립적 인 스케줄링을위한 기본 장치로 사용합니다. 스레드는 프로세스보다 작고 기본적으로 시스템 리소스를 소유하지 않기 때문에 스케줄링의 오버 헤드는 훨씬 작아서 시스템의 여러 프로그램 간의 동시 실행 정도를보다 효율적으로 향상시킬 수 있습니다.
차이
스레드와 프로세스의 차이점은 자식 프로세스와 상위 프로세스에 코드와 데이터 공간이 다르고 여러 스레드는 데이터 공간을 공유하고 각 스레드에는 실행 컨텍스트에 대한 자체 실행 스택 및 프로그램 카운터가 있습니다. 멀티 스레딩은 주로 CPU 시간을 절약하고 특정 상황에 따라 사용하는 데 사용됩니다. 컴퓨터의 메모리 리소스와 CPU는 스레드를 실행하는 동안 사용해야합니다.
모듈 및 패키지 모듈
모듈 : 모듈 식 프로그래밍을 구현하기 위해 특정 특정 기능을 구현하는 파일. 요구 사항 (모듈 이름)을 통해 모듈을 소개합니다.
- 변수 (변수, 함수 등)의 함수는 속성을 exports 개체에 할당하여 발신자에게 제공합니다.
모듈을 사용하는 방법?
노드에서 모듈을 사용하는 것이 매우 편리합니다. JavaScript 코드에서는 모듈을로드하기 위해 Global Function require() 직접 사용할 수 있습니다. 예를 들어, require("http") 사용하여 node 와 함께 제공되는 HTTP 서버 모듈을로드 할 수 있습니다.
가방
패키지 : 패키지는 릴리스, 업데이트, 종속성 관리 및 버전 제어를 위해 모듈을 캡슐화하는 폴더입니다. Package.json을 통해 패키지 정보를 설명하십시오. 항목 파일, 종속성 외부 패키지 등. npm install 명령을 통해 패키지를 설치하고 require 통해 패키지를 사용하십시오.
비동기 I/O 및 이벤트 중심
Node.js 의 비동기 메커니즘은 이벤트 기반입니다. 각 I/O 는 요청입니다. 모든 디스크 I/O , 네트워크 통신 및 데이터베이스 쿼리는 블로킹하지 않은 방식으로 요청됩니다. 반환 된 결과는 이벤트 루프에 의해 처리됩니다. 아래 그림과 같이 :
Node.js 프로세스는 동시에 하나의 이벤트 만 처리하고 즉시 이벤트 루프를 입력하여 완료 후 후속 이벤트를 확인하고 처리합니다. 이것의 장점은 CPU와 메모리가 동시에 존재하는 동시에 하나의 것을 중앙 집중화하면서 시간이 많이 걸리는 I/O 작업을 가능한 한 병렬로 실행할 수 있다는 것입니다.
노드 프로그래밍을 시작하십시오
여기에서는 node.js 개발에 webstorm 사용하는 것이 좋습니다. 편리하고 빠르며 Mac의 CMD 또는 터미널보다 사용하기가 훨씬 쉽습니다.
노드 설치는 스스로 바이두를 부탁드립니다. 나는 여기에서 자세히 설명하지 않을 것입니다. webstorm 의 노드 프로그래밍 인터페이스를 살펴 보겠습니다.
서면 노드 코드 인터페이스를 마우스 오른쪽 버튼으로 클릭하고 실행을 클릭하면 편리하고 빠릅니다.
다음은 노드의 출력 인터페이스입니다.
Mac 시스템에서는 Coda2, Webstorm 및 Sublime Text3의 세 가지 도구를 권장합니다. 이것들은 내가 지금까지 가지고있는 최고의 개발 도구입니다. 당신은 당신의 취향에 더 일치하는 것을 시도 할 수도 있습니다.
webstorm 의 노드 개발의 경우 먼저 특정 파일을 구성해야합니다. 모든 사람은 바이두를 사용하여 그것을해야합니다. 내 webstorm 구성되었으므로 스크린 샷을 찍어 단계를 보여줄 수 없습니다. 일반적인 단계는 다음과 같습니다. Mac 시스템에서 먼저 상단 막대에서 webstorm 클릭 한 다음 perference 클릭 한 다음 Node.js and NPM 클릭 한 다음 오른쪽에서 구성을 클릭하면 다음과 같습니다.
windows 시스템 하의 프로세스 단계는이 프로세스와 거의 유사합니다. 내가 사용하는 버전은 8.0.4입니다.
글로벌 변수
JS 프로그래밍에서는 글로벌 네임 스페이스 오염을 피하고 코드 커플 링 위험을 증가시키지 않도록 각 변수에 VAR 키워드를 추가하는 것이 가장 좋습니다.
콘솔
console 표준 출력 standout (STDOUT) 및 표준 오류 스트림 (STDERR)에 문자를 출력하는 데 사용됩니다.
console.log() printf() 출력 스트림에 문자를 인쇄하고 Newline으로 끝납니다.
console.log(__dirname)输出文件目录코드 실행 시간을 계산합니다
console.time(label) console.timeEnd(label)우리는 단지 시작과 끝에서 동일한 레이블을 제공하고 실행 시간을 중간에 계산하려는 코드를 넣어야합니다.
__filename 및 __dirname
console.log(__filename);// /Users/hwax/Desktop/My Project/avalon/hello.js console.log(__dirname);// /Users/hwax/Desktop/My Project/avalon