>  기사  >  웹 프론트엔드  >  Node.js 개발자가 알아야 할 4가지 JS 필수 사항_node.js

Node.js 개발자가 알아야 할 4가지 JS 필수 사항_node.js

WBOY
WBOY원래의
2016-05-16 15:14:27898검색

이 글에는 개발자를 위한 Node.js 핵심 사항 4가지가 요약되어 있습니다.

1. 비차단 또는 비동기 I/O

Node.js는 서버측 프레임워크이므로 주요 작업 중 하나는 브라우저 요청을 처리하는 것입니다. 기존 I/O 시스템에서는 이전 요청이 도착한 후에 각 요청이 발행됩니다. 그래서 이것을 I/O 차단이라고 합니다. 서버는 현재 요청을 처리하기 위해 다른 요청을 차단하므로 브라우저가 기다리게 됩니다.

Node.js는 이런 방식으로 I/O를 처리하지 않습니다. 요청을 처리하는 데 오랜 시간이 걸리면 Node.js는 요청을 이벤트 루프로 보내고 호출 스택의 다음 요청을 계속 처리합니다. 지연된 요청이 처리되면 Node.js에 알리고 브라우저가 응답합니다.

다음은 예시를 사용하여 설명합니다.

I/O 차단

// take order for table 1 and wait...
var order1 = orderBlocking(['Coke', 'Iced Tea']);
// once order is ready, take order back to table.
serveOrder(order1);
// once order is delivered, move on to another table.
// take order for table 2 and wait...
var order2 = orderBlocking(['Coke', 'Water']);
// once order is ready, take order back to table.
serveOrder(order2);
// once order is delivered, move on to another table.
// take order for table 3 and wait...
var order3 = orderBlocking(['Iced Tea', 'Water']);
// once order is ready, take order back to table.
serveOrder(order3);
// once order is delivered, move on to another table.

이 레스토랑의 예에서는 웨이터가 메뉴 안내를 받고, 식사가 처리될 때까지 기다린 후, 식사가 처리된 후 테이블로 음식을 가져옵니다. 웨이터는 자신의 식사가 처리되기를 기다리는 동안 다른 고객의 메뉴 주문을 거부했습니다.

비차단 I/O

// take order for table 1 and move on...
orderNonBlocking(['Coke', 'Iced Tea'], function(drinks){
 return serveOrder(drinks);
});
// take order for table 2 and move on...
orderNonBlocking(['Beer', 'Whiskey'], function(drinks){
 return serveOrder(drinks);
});
// take order for table 3 and move on...
orderNonBlocking(['Hamburger', 'Pizza'], function(food){
 return serveOrder(food);
});

논 블로킹 모드에서 웨이터는 자신이 받은 메뉴 지침을 셰프에게 알리고, 다음 테이블에 대한 지침을 받습니다. 첫 번째 테이블의 음식이 조리되면 그는 그 테이블에 음식을 제공하고 계속해서 다른 손님들로부터 지시를 받습니다. 이런 식으로 웨이터는 지시를 방해하여 시간을 낭비하지 않습니다.

2. 프로토타입

JS에서 프로토타입은 복잡한 개념입니다. Java나 C와 같은 일반적인 상속 메커니즘 언어에서는 코드 재사용을 위해서는 먼저 클래스를 만든 다음 이를 통해 객체를 생성하거나 클래스 확장을 통해 객체를 생성해야 합니다. 하지만 JS에는 비슷한 클래스 개념이 없습니다. JS에서 객체를 생성한 후에는 객체를 확장하거나 이를 통해 새로운 객체를 생성해야 합니다. 이를 프로토타입 상속이라고 합니다.

각 JS 객체는 프로토타입 객체에 연결되어 해당 객체의 속성을 상속합니다. 각 객체는 사전 정의된 JS Object.prototype과 연관되어 있습니다. obj.propName 또는 obj['propName'>를 통해 객체 속성을 검색했지만 검색에 실패하면 obj.hasOwnProperty('propName')를 통해 검색을 시도할 수 있습니다. JS 런타임은 프로토타입에서 속성을 검색합니다. 물체. 프로토타입 체인에 속성이 없으면 정의되지 않은 값이 반환됩니다.

다음 예를 들어 설명하겠습니다.

if (typeof Object.create !== 'function') {
  Object.create = function (o) {
    var F = function () {};
    F.prototype = o;
    return new F();
  };
var otherPerson = Object.create(person);

새 객체를 생성할 때 프로토타입 기반 객체를 선택해야 합니다. 여기서는 객체 함수에 create 메소드를 추가했습니다. create 메소드는 다른 객체를 기반으로 객체를 생성하고 이를 매개변수로 전달합니다.

새 개체를 변경해도 해당 개체의 프로토타입은 변경되지 않은 상태로 유지됩니다. 그러나 프로토타입 객체를 변경하면 변경 사항은 해당 프로토타입을 기반으로 하는 모든 객체에 영향을 미칩니다.

3. 모듈

Java 패키지를 사용해 본 적이 있다면 Node.js 구성 요소는 비슷합니다. 그렇지 않더라도 걱정하지 마세요. 구성 요소는 실제로 특정 기능을 구현하는 데 사용되는 간단한 JS 파일입니다. 컴포넌트 패턴의 목적은 작업을 더 쉽게 만드는 것입니다. 컴포넌트를 사용하려면 JAVA에서 패키지를 가져오는 것처럼 JS 파일을 가져와야 합니다. Node.js에는 두 가지 유형의 구성 요소가 있습니다

핵심 모듈 - 핵심 모듈은 Node.js 라이브러리와 함께 사전 컴파일됩니다. 그 목적은 프로그래머가 자주 사용하는 기능을 공개하고 작업의 중복을 방지하는 것입니다. 공통 핵심 구성 요소에는 HTTP, URL, 이벤트, 파일 시스템 등이 포함됩니다.

사용자 정의 모듈 - 사용자 정의 모듈은 사용자가 특정 기능을 구현하기 위해 제공하는 구성 요소입니다. 핵심 구성 요소가 프로그래머의 요구 사항을 충족하기에 충분하지 않은 경우 사용자 정의 구성 요소가 유용할 수 있습니다.

require 함수를 통해 구성요소가 추출됩니다. 이것이 핵심 구성요소인 경우 매개변수는 구성요소 이름입니다. 사용자 정의 구성요소인 경우 매개변수는 파일 시스템의 구성요소 경로입니다. 예:

// extract a core module like this
var http = require('http);
// extract a user defined module like this
var something = require('./folder1/folder2/folder3/something.js');

4. 回调(Callbacks)

在JS中,函数是第一类对象。也就是说你可以像对常规对象那样对函数进行所有操作。例如指派函数到一个变量,把这些作为参数传给方法,把它们声明为对象的属性,甚至是把它们从函数里返回。

回调在JS中是异步函数,可以作为参数传递给其它函数或从其它函数里执行或返回而后再执行。这是回调的基本概念。

当我们把一个回调函数作为参数传递给另外的函数时,我们传递的仅仅是函数的定义;换言之,我们不会知道回调函数的执行时间。这完全依赖于回调函数机制。它会在稍后某个时间点进行回调调用。这是Node.js的非阻塞或异步行为的基本概念,可用下例进行说明:

setTimeout(function() {
  console.log("world");
}, 2000)
console.log("hello");

这是一个最简单的调用。我们把一个匿名函数作为参数进行传递,作用是为setTimeout函数进行控制台的输出记录登记。因为这仅仅是个函数定义,我们不知道函数何时会被执行。这取决于setTimeout函数的second参数,即2S后。

首先,second记录语句记录了对控制台的输出,2S后,在回调函数中的记录语句记录了输出的内容。

// output
hello
world

写在最后

以上4点对Node.js开发者来说是要彻底理解和掌握的,建议多动手来好好体会这4个要点的含义。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.