>  기사  >  웹 프론트엔드  >  초보자를 위한 Node.js 튜토리얼(1)

초보자를 위한 Node.js 튜토리얼(1)

php中世界最好的语言
php中世界最好的语言원래의
2018-03-12 17:17:001793검색

이번에는 Node.js 초보자 튜토리얼을 가져왔습니다. Node.js 사용 시 주의사항은 무엇인가요? 다음은 실제 사례입니다.

주요 스레드: Node.js란 무엇입니까?--> Node.js의 특징--> 핵심 모듈--> 모듈 --> 패키지--> 비차단, 단일 스레드, 이벤트 기반-->

노드란 무엇인가요? 먼저 Node.js라는 이름을 보면, 얼핏 보면 jQuery와 같은 라이브러리나 프레임워크인 줄 알겠지만, 실제로는 그렇지 않습니다. , 또는 Node.js는 브라우저가 아닌 환경에서 JavaScript를 실행할 수 있게 해주는 도구입니다. Node.js는 세계에서 가장 빠른 Chrome v8 엔진으로 알려진 것을 사용하며 Core JavaScript와 Node로 구성됩니다. 표준 라이브러리인 Core JavaScript는 실제로 ECMAScript를 참조합니다. 즉, 문서 개체 모델인 DOM과 브라우저 개체 모델을 제외하고 브라우저 측 js 스크립트에만 ECMAScript가 포함되어 있음을 의미합니다. 해당 노드에 호환성 문제가 있나요? Node에는 호환성 문제가 없습니다. 왜냐하면 우리는 클라이언트 브라우저의 js 스크립트를 배웠고 우리가 자주 이야기하는 js 호환성 문제는 실제로 DOM 및 BOM의 호환성 문제를 의미한다는 것을 이해해야 하기 때문입니다. Node 표준 라이브러리란 무엇입니까? , 이는 C 표준 라이브러리 또는 C++ 표준 확장 라이브러리와 유사합니다. Node.js의 특징은 비차단 비동기 이벤트 중심입니다. Node.js를 사용하면 JavaScript가 스크립팅 세계에 포함될 수 있습니다. 먼저 첫 번째 예제인 helloworld를 살펴보세요. 이 helloworld는 다른 언어보다 더 복잡해 보이죠? 하지만 이 6줄의 코드로 구현된 기능을 살펴보면 간단한 서버를 구현합니다. Node.js의 핵심 중 하나가 모듈이므로 가장 먼저 배워야 할 것은 모듈입니다. 모듈? 모듈은 실제로 js 파일입니다. 클라이언트 브라우저에서 CSS 파일을 포함하고 다른 CSS 파일을 도입하려면 @import 지시문을 사용할 수 있지만 js에서는 다른 CSS 파일 js를 도입하려는 경우 물론 이것이 달성될 수 없다는 의미는 아닙니다. createElement를 통해 스크립트 태그를 생성한 다음 이를 달성하기 위해 html에 Child를 추가할 수 있습니다. 예, 우리 노드는 이 문제를 해결했습니다. 우리 노드에서는 js 파일이 직접 모듈입니다. 두 개의 js 파일을 생성했는데 어떻게 다른 js 파일을 하나의 js 파일에 도입할 수 있습니까? require라는 함수를 통해 이를 도입할 수 있습니다. 각 모듈은 결국 일부 속성과 메서드를 노출하거나 노출된 속성과 메서드가 있는 모듈을 통해 이를 수행합니다. 하나는 핵심 모듈로, 공통 핵심 모듈로는 운영체제 관련 모듈인 os 모듈, 작업을 처리하고 파일화하는 파일 시스템 모듈인 fs 모듈이 있다. , 유틸리티 모듈 도구, 그리고 다른 하나는 로컬 모듈입니다. 모듈에 비해 더 큰 단위는 패키지입니다. 우리는 그것에 대해 생각할 수 있고, 모듈을 파일 중 하나로 생각할 수 있으며, 패키지를 폴더로 생각할 수 있습니다. 즉, 폴더를 사용하여 비슷한 기능을 가진 여러 파일을 모아서 패키징할 수 있다는 의미입니다. 패키지에 관해서는 우리가 직접 만든 패키지 외에도 더 중요한 것은 일부 타사 패키지입니다. npm.org 웹사이트에는 수십 개가 구현된 수많은 타사 패키지가 있습니다. 수천명이 사용하고 싶은데요, 구체적으로 어떻게 사용하나요?타사 패키지를 더 쉽게 사용할 수 있도록 Node에서는 npm이라는 패키지 관리 도구라는 도구를 개발했습니다. 이 도구를 사용하는 방법에는 두 가지가 있습니다. 하나는 전역 설치이고 다른 하나는 로컬 설치입니다. 예를 들어 Python 및 Ruby와 같이 전역으로 설치된 패키지는 일반적으로 명령줄 작업에 적합합니다. 우리 lessc, 또 다른 로컬 패키지는 일반적으로 우리가 현재 작업 중인 일부 프로젝트에서 사용됩니다. 물론 이러한 것만 있으면 Node.js에는 큰 기능이 없습니다. 왜냐하면 이러한 것들은 실제로 다른 언어에서 사용할 수 있기 때문입니다. Node.js의 가장 큰 특징은 실제로 비동기 비차단 및 이벤트 프로그래밍 모듈입니다. 이는 다른 언어와는 매우 다른 완전히 파괴적인 디자인이어야 합니다. 우리가 구현하는 것이 동기식 IO이고 쿼리하려는 것이 SQL 문이라고 가정하면 모두가 이 예제를 이해할 수 있기를 바랍니다. 모두 이 형식으로, 즉 먼저 db.query를 사용한 다음 SQL 쿼리는 데이터베이스가 결과를 반환하고 이를 res 변수에 저장하기를 차단하고 기다립니다. 그러나 다음은 Node를 작성하는 실제 방법입니다. 실제로 이 문은 SQL 쿼리를 생성하고 두 번째 매개변수에 함수를 넣는다는 것을 알 수 있습니다. 명령문이 실행되면 직접 실행되지 않습니다. res.auto, 내부 내용은 언제 실행됩니까? 내 데이터베이스가 메시지를 반환할 때까지 기다린 후 이벤트 루프를 통해 콜백 함수를 입력한 다음 쿼리 결과를 출력합니다. 이것이 비동기식 IO 모드이며, 그러면 무엇이 비동기식인지 설명하고 프로그램이 실행됩니다. IO 작업은 수십만 또는 수억 개의 명령 주기로 지속될 수 있는 오랜 시간이 걸릴 수 있지만 JavaScript 문을 실행하는 데는 수백 또는 수천 개의 명령 주기만 필요할 수 있습니다. 물론 최적화될 수도 있습니다. 어쩌면 수십 개가 필요할 수도 있으므로 IO가 발생한 후 시간 낭비입니다. 운영 체제와 CPU는 인터럽트를 통해 비동기 스케줄링 방법을 구현합니다. 즉, 프로세스가 IO 요청을 시작하면 운영 체제가 중단됩니다. 그런 다음 IO가 완료되면 운영 체제는 원래 프로세스를 재개하고 동시에 실행을 계속할 수 있습니다. 이 요청은 바로 지금입니다. 메소드는 동기식 IO 또는 차단 IO이지만 Node의 IO 모드에서는 비동기식 IO 또는 비차단 IO를 사용합니다. 이는 프로세스가 IO 요청을 시작한 후 즉시 반환하고 다른 작업을 계속 실행함을 의미합니다. 작업 지시를 수행하고 다른 수단을 사용하여 IO 작업이 완료되었음을 알리고 IO 작업이 완료된 후 논리 코드를 처리합니다. 그런 다음 비 차단 IO가 시작되면 프로세스가 차단 상태로 들어가지 않습니다. 다른 부분은 계속해서 이벤트를 실행하고 다른 이벤트를 처리하기 위해 이벤트 루프에 들어갑니다. 여기서는 이벤트 및 이벤트 루프의 개념을 언급합니다. 전체 프로그램은 이벤트 루프이고 이벤트 루프는 계속해서 이벤트 큐라는 것을 처리합니다. 즉, 처음에 이벤트가 있고 실행 프로세스 중에 IO 요청과 같은 일부 요청이 시작될 수 있습니다. IO 요청이 완료되면 이벤트 큐가 이벤트 큐에 추가됩니다. 처리하기 전에 프로세스가 이벤트 루프에 들어갈 때까지 기다립니다. 이는 이벤트 루프를 기반으로 하는 처리 모드입니다. 예를 들어, 마우스 클릭도 이벤트이고 이벤트에는 콜백 함수가 필요합니다. 그렇다면 Node는 왜 이 모호한 프로그래밍 모델을 사용하는 걸까요?사실 이것은 Node의 또 다른 매우 특별한 전략입니다. 단일 스레드 모드를 사용합니다. 먼저 차단 모드의 동시성 모델에 대해 이야기하겠습니다. 예를 들어 웹 서버를 개발하려면 동시성 요구 사항이 있어야 합니다. 동시에 여러 사용자의 액세스를 허용할 수 있습니다. 이는 한 사용자의 요청을 처리한 다음 두 번째 사용자의 요청을 처리한다는 의미는 아닙니다. 이 경우 사용자가 많아지면 처리 속도가 매우 느려집니다. 사용자가 매우 느리고 연결이 끊어지지 않으면 다른 사용자가 계속 기다리게 되며 이는 불합리합니다. 차단 모드에서 동시성을 달성하려면 다중 스레드를 사용해야 합니다. 즉, 개선하려는 경우 하나의 프로세스가 하나의 작업만 처리할 수 있습니다. CPU의 처리량, CPU 코어 수보다 훨씬 더 많은 스레드를 사용해야 합니다. 예를 들어, 우리 논리 중 하나는 일부를 계산해야 합니다. 먼저 파일 읽기, 파일 쓰기 또는 네트워크 요청 시작과 같은 IO 요청을 시작한 다음 두 번째 계산 부분을 입력하여 동시성을 달성하기 위해 멀티스레딩 모드를 사용할 수 있으며 실행은 하나일 수 있습니다. 예를 들어 단일 CPU가 있다고 가정하면 먼저 첫 번째 스레드가 계산을 위해 CPU를 점유한 다음 IO 요청 단계에 도달하여 차단됩니다. 이때 CPU 제어권이 이전됩니다. time 두 번째 스레드가 CPU를 점유한 다음 IO에 진입하고 다시 차단된 다음 CPU, 스레드 3, 스레드 4, 스레드 5 등의 제어를 해제하고 중간에 유휴 시간이 있을 수 있습니다. 그런 다음 스레드 1을 기다립니다. IO가 끝나고 CPU가 점유되지 않은 것을 발견하면 CPU를 사용하여 계산을 입력합니다. 예를 들어 계산 및 IO를 기반으로 한 동시 선점 모드는 비차단 모델에 따릅니다. , 해당 모델은 다음과 같습니다. 단일 스레드 계산 1은 비동기 IO 요청을 시작하고 다른 사용자가 시작한 계산 1일 수 있는 다른 계산 1을 직접 입력한 다음 두 번째 요청을 시작합니다. 그런 다음 5명의 사용자를 기다립니다. 초기화가 완료된 후 첫 번째 사용자의 계산이 종료되고, 이론상으로 우리의 이벤트 루프는 첫 번째 사용자가 시작한 IO 요청을 실행하는 단일 스레드입니다. 비차단 모드에서 프로세스의 CPU 사용률은 100%입니다. 이는 단일 스레드가 여러 스레드 없이 최대 처리량을 달성할 수 있는 경우입니다. 예를 들어 코어가 2개라면 2개의 스레드를 열게 됩니다. 그러면 블로킹에 비해 비블로킹의 장점은 무엇입니까? 멀티스레딩은 빠른 것처럼 보이지만 실제로는 그렇게 빠르지는 않습니다. 스위칭으로 인해 타임 슬라이스 분할이 매우 작습니다. 20ms마다 스테이션을 스위칭하는 것은 CPU 캐시 활용 측면에서 매우 비효율적이며 비차단 기능도 그리 크지 않습니다. 네, 쉽게 콜백이 발생합니다. 첫 번째 파일을 먼저 읽은 다음 두 번째 파일을 읽으세요. 여기서는 Node의 기본에 대해서만 소개했습니다. Node에 대해 오랫동안 이야기했는데 Node의 응용은 무엇일까요? 우선 Node에는 많은 타사 모듈이 있습니다. 예를 들어 웹 사이트를 만들려면 Express 프레임워크를 사용하고 Jade라는 템플릿 엔진을 사용하여 HTML을 생성할 수 있습니다. CSS를 생성하고 uglify가 있고, websocket을 사용하면 소켓.io가 있고, SQL 데이터베이스에는 ORM, oAuth, 데몬 프로세스, 명령줄 구문 분석, Node.js가 있지만 구문 분석이 있습니다. 실제로 파일 업로드, 구문 강조, 마크다운 구문 분석, 인코딩 변환 이미지 처리, 경량 스레드 및 코루틴, 커피 스크립트 및 브라우저 측의 일부 정적 분석을 처리할 수 있습니다. 오늘은 Node.js에 대한 소개입니다.

이 기사의 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 도서:

Node.js 코드의 실행 원리

Angularjs에서 $apply() 사용에 대한 자세한 설명

위 내용은 초보자를 위한 Node.js 튜토리얼(1)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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