Node.js는 프로그래머가 확장 가능한 응용 프로그램을 신속하게 구축 할 수 있도록 설계된 신흥 백엔드 언어입니다. Node.js에는 많은 매력적인 기능이 있으며 이에 대한 수많은 보고서가 있습니다. 이 기사는 이벤트 미터, 스트림, 코딩 스타일, 라인, 코딩 스타일 및 기타의 기능을 분석하고 논의하여 사용자가 node.js를 더 깊이 이해할 수 있도록 도와줍니다.
Chrome JavaScript 런타임을 기반으로 구축 된 플랫폼으로서 JavaScript에 대한 우리의 관련 이해는 노드 응용 프로그램에 적용 할 수있는 것으로 보입니다. 추가 언어 확장 또는 수정이 없으면 프론트 엔드 프로그래밍 경험을 백엔드 프로그래밍에 적용 할 수 있습니다.
이벤트 미터 (이벤트 발신자)
우선, 이벤트 미터 모델을 이해해야합니다. 소비자에게 관심을 줄 이벤트뿐만 아니라 이벤트를 보낼 수 있습니다. 우리는 그것을 콜백 패스 패턴을 비동기 기능으로 확장 한 것으로 생각할 수 있습니다. 특히, 이벤트 미터는 여러 콜백이 필요할 때 더 이점이 있습니다.
예를 들어, 발신자는 "목록 파일"요청을 원격 서버로 보냅니다. 반환 된 결과를 그룹화하고 각 그룹에 대한 콜백을 수행 할 수 있습니다. Eventemitter 모델을 사용하면 각 그룹에서 "파일"콜백을 보내고 모든 작업이 완료되면 "END"처리를 수행 할 수 있습니다.
Eventemitter를 사용할 때는 관련 이벤트 및 매개 변수를 설정하십시오.
코드 사본은 다음과 같습니다.
var eventimitter = require ( 'events'). Eventemitter;
var util = 요구 ( 'util');
function myclass () {
if (! (이 인스턴스)) new myclass ()를 반환합니다.
이벤트 미터 .call (this);
var self = 이것;
settimeout (function timeoutcb () {
self.emit ( 'Myevent', 'Hello World', 42);
}, 1000);
}
util.inherits (myclass, eventemitter);
MyClass 생성자는 1S의 트리거 지연과 MyEvent의 트리거 이벤트로 타임 트리거를 만듭니다. 관련 이벤트를 사용하려면 ON () 메소드를 실행해야합니다.
코드 사본은 다음과 같습니다.
var myobj = new myclass ();
var start = date.now ();
myobj.on ( 'myevent', function myeventcb (str, num) {
console.log ( 'myevent triggered', str, num, date.now () - 시작);
});
구독 이벤트 이벤트는 비동기 이벤트이지만 시간이 트리거되면 청취자의 동작이 동기화됩니다. 따라서 위의 Myevent 이벤트에 10 명의 청취자가있는 경우 이벤트 루프를 기다리지 않고 모든 청취자가 호출됩니다.
Eventemitter의 서브 클래스가 Emit ( 'Error') 이벤트를 생성하지만 청취자가 구독하지 않으면 Eventemitter Base 클래스는 예외를 던져서 프로세스 객체가 실행될 때 uncaughtexception 이벤트가 트리거됩니다.
버러
Verror는 기본 클래스 오류의 확장으로 Printf 문자 형식을 사용하여 출력 메시지를 정의 할 수 있습니다.
스트림
처리 해야하는 매우 큰 파일이있는 경우 이상적인 방법은 부품을 읽고 부품을 쓰는 것입니다. 파일이 아무리 큰지에 관계없이 시간이 허용하는 한 항상 처리됩니다. 이를 위해서는 스트리밍 개념이 필요합니다. Streams는 노드에서 Eventemitter의 구현 인 노드에서 널리 사용되는 또 다른 모델입니다. 읽기 쉬운, 쓰기 가능 또는 전체 이중적인 인터페이스를 제공합니다. 추상 인터페이스이며, 규칙적인 운영 이벤트에는 읽기 가능, 쓰기 가능, 배수구, 데이터, 끝 및 닫기가 포함됩니다. 파이프 라인을 사용하여 이러한 이벤트를 효과적으로 통합 할 수 있다면보다 강력한 상호 작용이 달성 될 것입니다.
.pipe ()를 사용하면 Note는 파이프 라인을 통해 역압과 통신 할 수 있습니다. 배경 압력은 다음을 의미합니다. 작성할 수있는 것만 또는 읽을 수있는 것만 의미합니다.
예를 들어, 이제 stdin에서 로컬 파일 및 원격 서버로 데이터를 보냅니다.
코드 사본은 다음과 같습니다.
var fs = 요구 ( 'fs');
var net = 요구 사항 ( 'net');
var localfile = fs.createwritestream ( 'localfile.tmp');
net.connect ( '255.255.255.255', 12345, function (client) {
process.stdin.pipe (클라이언트);
process.stdin.pipe (localfile);
});
또한 데이터를 로컬 파일로 보내고 Gunzip을 사용 하여이 스트림을 압축하려면 다음을 수행 할 수 있습니다.
코드 사본은 다음과 같습니다.
var fs = 요구 ( 'fs');
var zlib = 요구 ( 'zlib');
process.stdin.pipe (zlib.creategunzip ()). 파이프 (fs.createwritestream ( 'localfile.tar'));
Stream에 대해 자세히 알고 싶다면 여기를 클릭하십시오.
제어 흐름 (프로세스 제어)
JS에는 일류 개체, 클로저 등과 같은 기능적 개념이 있으므로 콜백 권한을 쉽게 정의 할 수 있습니다. 이것은 프로토 타이핑 할 때 매우 편리하며 주문시 논리적 권한을 통합 할 수 있습니다. 그러나 Clumsy 내장 기능을 사용하기 쉽습니다.
예를 들어, 순서대로 일련의 파일을 읽고 작업을 수행하려고합니다.
코드 사본은 다음과 같습니다.
fs.ReadFile ( 'FirstFile', 'utf8', function firstCB (err, firstFile) {
복용량 (FirstFile);
fs.ReadFile ( 'SecondFile', 'utf8', function secondcb (err, secondFile) {
복용량 (2 차);
fs.ReadFile ( 'ThirdFile', 'utf8', function ThirdCB (err, thirdfile) {
복용량 (ThirdFile);
});
});
});
이 패턴의 문제는 다음과 같습니다.
1.이 코드의 논리는 매우 흩어져 있고 무질서하며 관련 운영 프로세스는 이해하기 어렵습니다.
2. 오류 나 예외가 처리되지 않습니다.
3. JS의 클로저 메모리 누출은 매우 일반적이며 진단 및 감지하기가 어렵습니다.
입력 세트에서 일련의 비동기 작업을 수행하려면 프로세스 제어 라이브러리를 사용하는 것이 더 현명한 선택입니다. Vasync는 여기에 사용됩니다.
Vasync는 비동기 작업에서 아이디어를 얻는 프로세스 제어 라이브러리입니다. 특별한 점은 소비자가 특정 작업 프로세스를보고 관찰 할 수 있다는 것입니다. 이 정보는 특정 오류의 과정을 연구하는 데 매우 유용합니다.
코딩 스타일 (프로그래밍 스타일)
프로그래밍 스타일은 종종 캐주얼하기 때문에 가장 논란의 여지가있는 주제입니다. 누구나 자신의 선호도가 있습니다. 개인과 팀에 적합한 스타일을 찾는 것이 중요합니다. 일부 전통적인 유산은 노드 개발 여행을 더 나은 곳으로 만들 수 있습니다.
1. 함수의 이름을 지정하십시오
2. 모든 기능의 이름을 지정하십시오.
3. 폐쇄를 피하십시오
4. 특정 함수에서 다른 기능을 정의하지 마십시오. 이것은 많은 예상치 못한 폐쇄 메모리 누출 사고를 줄입니다.
5. 점점 더 작은 기능
V8 JIT는 강력한 엔진이지만 더 작고 얇은 기능은 V8과 더 잘 결합됩니다. 또한, 우리의 기능이 모두 작고 절묘한 경우 (약 100 줄), 우리는 그들 자신을 읽고 유지할 때도 감사 할 것입니다.
프로그래밍 방식으로 스타일 확인 : 스타일 일관성을 유지하고 확인 도구를 사용하여이를 향상시킵니다. 우리는 jsstyle을 사용하고 있습니다.
줄기 (코드 점검)
보풀 도구는 실행하지 않고 코드의 정적 분석을 수행 할 수 있으며 케이스 스위치의 중단 명세서 누락과 같은 잠재적 오류 및 위험을 확인할 수 있습니다. Lint는 단순히 스타일 점검과 동일하지 않으며 주관적인 스타일 선택보다는 객관적인 위험 분석을 목표로합니다. 풍부한 수표 항목이있는 javaScriptLint를 사용합니다.
로깅 (로깅)
우리가 프로그래밍 및 코딩 할 때는 장기적인 비전이 필요합니다. 특히 디버깅에 사용할 도구를 고려하십시오. 우수한 첫 단계는 효과적인 로깅을하는 것입니다. 우리는 정보를 식별하고 디버깅 중에 특별한주의를 기울여야 할 사항과 런타임에 분석 및 연구에 사용되는 내용을 확인해야합니다. Direct Node.js 로깅 라이브러리 인 Bunyan을 사용하는 것이 좋습니다. 데이터 출력 형식은 JSON입니다. 자세한 내용은 여기를 클릭하십시오.
클라이언트 서버
애플리케이션에 처리 기능이 배포 된 경우 시장에서 더 매력적입니다. 유사한 인터페이스는 HTTP RESTFUL API 또는 원래 TCP JSON을 사용하여 설명 할 수 있습니다. 이를 통해 개발자는 노드에서의 경험을 비동기 네트워크 환경과 결합 할 수있을뿐만 아니라 분산 및 확장 가능한 시스템과 함께 스트림 사용을 결합 할 수 있습니다.
일반적인 도구 :
1. Restify
간단히 말해서, 이것은 휴식 서비스를 구축하기위한 도구입니다. Bunyan 및 Dtrace를 지원하면서보기 및 디버깅 지원을 제공합니다.
2. 빠른
Fast는 TCP를 사용하여 JSON 메시지를 처리하는 가벼운 도구입니다. DTRACE 지원이 제공되므로 서버 클라이언트의 성능 특성을 신속하게 식별 할 수 있습니다.
3. 워크 플로
워크 플로는 Restify를 기반으로 구축되며 일련의 원격 서비스 및 API에 대한 비즈니스 프로세스를 정의 할 수 있습니다. 예 : 오류 상태, 시간 초과, 재 연결, 혼잡 처리 등.