10 node.js 모범 사례 : 노드 전문가의 깨달음
프로젝트의 초기 단계에서 Process.env.node_env와 같은 환경 변수를 사용하십시오. 이렇게하면 민감한 정보가 누출되지 않고 처음부터 코드를 올바르게 작성합니다.
이벤트 루프와 setimmediate () 또는 settimeout ()을 사용하여 CPU 집약적 작업을 다음 이벤트 루프 사이클에 오프로드하는 방법을 이해합니다.
단순성과 프로토 타입 상속 또는 클래스의 복잡성을 피하기 위해 기능적 상속을 사용하십시오. 이것은 많은 많은 노드 기여자들 사이에서 선호되는 방법입니다.
-
<.> 10 node.js 모범 사례 : 노드 전문가의 깨달음은 게스트 저자 Azat Mardan의 것입니다. Sitepoint 게스트 게시물은 웹 커뮤니티의 저명한 작가와 스피커의 매력적인 콘텐츠를 제공하는 것을 목표로합니다.
2017 년에 더 나은 노드 개발자가되기위한 이전 기사 10 팁에서 오늘 코드에 적용 할 수있는 10 개의 Node.js 팁, 트릭 및 기술을 소개했습니다. 이 게시물은 노드 기술을 다음 단계로 끌어 올리는 데 도움이되는 10 가지 모범 사례를 통해 그 정맥에서 계속됩니다. 이것이 우리가 다룰 것입니다 :
-
이벤트 루프 이해 - setimmediate ()는 즉각적이지 않지만 NextTick ()는 다음에 있지 않습니다. setimmediate () 또는 settimeout ()을 사용하여 CPU 집약적 작업을 다음 이벤트 루프 사이클에 오프로드하십시오. 기능적 상속 사용-가장 많은 노드 기여자들과 마찬가지로 기능적 상속을 사용하여 프로토 타입 상속 또는 클래스를 디버깅하고 이해하는 뇌-배수 트랩을 피하십시오. .
- 를 사용하십시오 캐시 요청 - Nginx 및/또는 Varnish Cache 및 CDN 캐싱과 같은 요청 레벨 캐시와 같은 정적 파일 서버 뒤에 숨겨서 노드 서버에서 최대 주스를 가져옵니다. 그래서 각각을 이등분하고 개별적으로 살펴 보겠습니다. 우리는?
-
NPM 스크립트 사용 빌드, 테스트 용 NPM 스크립트를 만들고 가장 중요한 것은 앱을 시작하는 것이 거의 표준입니다. 이것은 새로운 노드 프로젝트가 발생할 때 가장 먼저 노드 개발자가 보는 첫 번째 장소입니다. 어떤 사람들 (1, 2, 3, 4)은 더 낮은 수준이지만 더 신뢰할 수있는 NPM 스크립트를 위해 Grunt, Gulp 등을 버렸습니다. 나는 그들의 주장을 완전히 이해할 수 있습니다. NPM 스크립트가 사전 및 포스트 후크가 있다는 점을 고려하면 매우 정교한 자동화 수준에 도달 할 수 있습니다. <span>"scripts": { </span> <span>"preinstall": "node prepare.js", </span> <span>"postintall": "node clean.js", </span> <span>"build": "webpack", </span> <span>"postbuild": "node index.js", </span> <span>"postversion": "npm publish" </span><span>} </span>
로그인 후 복사로그인 후 복사종종 프론트 엔드를 개발할 때는 두 개 이상의 시계 프로세스를 실행하여 코드를 재건하려고합니다. 예를 들어, 하나는 Webpack이고 다른 하나는 Nodemon 용입니다. 첫 번째 명령이 프롬프트를 해제하지 않으므로 && 로이 작업을 수행 할 수 있습니다. 그러나 동시에 여러 프로세스를 스폰하여 동시에 실행할 수있는 편리한 모듈이 있습니다. 또한 Webpack, Nodemon, Gulp, Mocha 등과 같은 Dev 명령 줄 도구를 설치하십시오. 예를 들어 ./node_modules/.bin/mocha를 가리키거나 Bash/zsh 프로파일 (Path!) 에이 줄을 추가 할 수 있습니다. env vars 를 사용하십시오프로젝트의 초기 단계에서도 환경 변수를 활용하여 민감한 정보의 누출이 없도록하고 처음부터 코드를 올바르게 구축하기 위해. 또한 일부 라이브러리와 프레임 워크 (Express를 확실히 알고 있음)는 Node_env와 같은 정보를 가져와 동작을 수정합니다. 생산으로 설정하십시오. mongo_uri 및 api_key 값도 설정하십시오. 쉘 파일 (예 : start.sh)을 생성하고 .gitignore에 추가 할 수 있습니다 : NODEMON은 ENV VAR (예)를 넣을 수있는 구성 파일도 있습니다. 이벤트 루프 를 이해하십시오 강력하고 영리한 이벤트 루프는 입력 및 출력 작업이 완료되기를 기다리는 모든 시간을 사용하여 노드를 너무 빠르고 훌륭하게 만드는 것입니다. 따라서 노드는 I/O 바운드 시스템을 최적화하는 데 좋습니다 CPU 집약적 인 것을 수행 해야하는 경우 (예 : 계산, 암호 해싱 또는 압축), 해당 CPU 타스크의 새로운 프로세스를 생성하는 것 외에도 Setimmediate와의 과제를 연기하는 것을 탐색 할 수 있습니다. () 또는 settimeout () - 콜백의 코드는 다음 이벤트 루프 사이클에서 계속됩니다. NextTick ()는 이름과 반대로 같은주기에서 작동합니다. argh! 이벤트 루프에서 작업 한 Bert Belder의 다이어그램이 있습니다. 그는 이벤트 루프가 어떻게 작동하는지 분명히 알고 있습니다! <span>export <span>PATH</span>="./node_modules/.bin:<span>$PATH"</span> </span>
로그인 후 복사기능적 상속을 사용하십시오 javaScript 지원 프로토 타입 상속은 객체가 다른 객체에서 상속 될 때입니다. 클래스 운영자는 ES6을 사용하여 언어에 추가되었습니다. 그러나 기능 상속에 비해 지나치게 복잡합니다. 대부분의 노드 전문가는 후자의 단순성을 선호합니다. 간단한 기능 공장 패턴에 의해 구현되며, 새 또는 새로 사용 할 필요는 없습니다. 기능적 상속에서 각 객체는 자체 메소드 사본을 사용하기 때문에 프로토 타입을 업데이트 할 때 (모든 인스턴스도 변경 될 수 있음) 암시 적 효과가 없습니다. Express, Mocha, Connect, SuperAgent 및 수십 개의 다른 노드 모듈의 배후에있는 TJ Holowaychuk의 코드를 고려하십시오. Express는 기능적 상속 (전체 소스 코드)을 사용합니다 <span>"scripts": { </span> <span>"preinstall": "node prepare.js", </span> <span>"postintall": "node clean.js", </span> <span>"build": "webpack", </span> <span>"postbuild": "node index.js", </span> <span>"postversion": "npm publish" </span><span>} </span>
로그인 후 복사로그인 후 복사객관적으로 핵심 노드 모듈은 프로토 타입 상속을 많이 사용합니다. 그 패턴을 따르는 경우 어떻게 작동하는지 알아야합니다. JavaScript 상속 패턴에 대한 자세한 내용은 여기를 참조하십시오 이름을 적절하게 이름을 지정하십시오 이것은 분명합니다. 좋은 이름은 문서로 사용됩니다. 어느 쪽을 선호 하시겠습니까? 나는 app.use () 만 볼 때 덱스터가 무엇을하고 있는지 전혀 모른다. 더 의미있는 이름은 어떻습니까? 같은 방식으로 파일 이름은 코드의 목적이 무엇인지 올바르게 반영해야합니다. 플랫폼과 함께 모든 코어 모듈이있는 노드 폴더 (Github Link)를 살펴보면 파일/모듈의 명확한 이름 지정이 표시됩니다 ( 코어 모듈) : - 내부 모듈에는 코드의 메소드 및 변수와 마찬가지로 밑줄 (_debugger.js, _http_agent.js, _http_client.js)이 표시됩니다. 이것은 개발자에게 이것이 내부 인터페이스임을 경고하는 데 도움이되며, 사용중인 경우 스스로 자체적으로 사용됩니다. 리팩토링되거나 제거 된 경우 불만을 제기하지 마십시오.
JavaScript를 사용하지 않는 것을 고려하십시오 > 허? 방금 올바르게 읽었습니까? 하지만 도대체? 예. 맞습니다. ES6과 ES2016/ES7에 의해 추가 된 두 가지 기능이 있어도 JavaScript는 여전히 단점이 있습니다. JavaScript 외에 다른 옵션이 있습니다. 귀하 또는 귀하의 팀은 설정이 거의 없습니다. 전문 지식 수준과 앱의 특성에 따라 강력한 타이핑을 제공하는 TypeScript 또는 흐름으로 더 나을 수 있습니다. 스펙트럼의 다른 쪽 끝에는 순전히 기능적인 Elm 또는 Clojurescript가 있습니다. 커피 스크립트는 또 다른 위대하고 전투 테스트를 거친 옵션입니다. 다트 2.0을 살펴볼 수도 있습니다. 필요한 모든 매크로 만 있으면 (매크로가 원하는 언어를 정확히 빌드 할 수 있습니다) 완전히 새로운 언어가 아닌 Sweet.js를 고려하십시오. 코드를 생성하는 코드를 작성합니다 javaScript 경로를 사용하는 경우 일부 개발자는 언어를 제대로 구축 할만 큼 충분히 이해하지 못할 수 있으므로 컴파일 된 코드를 여전히 포함하십시오. 예를 들어, Vs 코드는 가장 큰 TypeScript 프로젝트 중 하나이며, 아마도 각도 2 이후에 Code는 TypeScript를 사용하여 유형을 사용하여 노드의 코어 모듈을 패치합니다. VScode/src/vs/base/node/of vs code repo (link)에서는 crypto, process 등과 같은 친숙한 모듈 이름을 볼 수 있지만 ts 확장 기능이 있습니다. Repo에는 다른 TS 파일이 있습니다. 그러나 기본 JavaScript 코드가 포함 된 VSCODE/빌드도 포함했습니다 는 Express Middleware를 알고 있습니다 Express는 훌륭하고 매우 성숙한 프레임 워크입니다. 무수한 다른 모듈이 동작을 구성 할 수있게하는 것은 광채입니다. 따라서 가장 많이 사용되는 미들웨어를 알아야하며 를 사용하는 방법을 알아야합니다. 그렇다면 내 익스프레스 치트 시트를 잡으십시오. 주요 미들웨어 모듈이 있습니다. 예를 들어, NPM I 압축 -S는 응답을 수축시켜 다운로드 속도를 줄입니다. Logger ( 'tiny') 또는 Logger ( 'common')는 각각 (dev) 또는 그 이상 (prod) 로그를 제공합니다.
스케일 업노드는 비 블로킹 I/O로 인해 비동기가 적합하며 스레드가 하나만 있기 때문에이 비동기 코딩 방식을 간단하게 유지합니다. 이것은 첫 번째 코드 라인에서도 조기에 스케일링을 시작할 수있는 기회입니다. 너무 많은 문제없이 수직으로 확장 할 수있는 핵심 클러스터 모듈이 있습니다. 그러나 더 나은 방법은 PM2 또는 StrongLoop의 클러스터 컨트롤과 같은 도구를 사용하는 것입니다. 예를 들어 이것은 PM2로 시작할 수있는 방법입니다 : 그런 다음 같은 서버의 4 가지 인스턴스를 시작할 수 있습니다. Docker의 경우 PM2 버전 2에는 PM2 Docker가 있습니다. 따라서 Dockerfile은 다음과 같이 보일 수 있습니다
공식 알파인 리눅스 PM2 이미지는 Docker Hub에 있습니다.
캐시 요청이것은 Node 인스턴스에서 더 많은 주스를 얻을 수있는 DevOps 모범 사례입니다 (PM2 등이있는 하나 이상을 얻을 수 있습니다. 위의 참조). 이동 방법은 Node 서버가 요청 작성, 데이터 처리 및 비즈니스 로직 실행과 같은 앱 작업을 수행하고 Apache HTTPD 또는 Nginx와 같은 다른 웹 서버로 트래픽을 오프로드하는 것입니다. 다시, 당신은 아마도 설정을 위해 Docker를 사용해야합니다 :
위 내용은 10 node.js 모범 사례 : 노드 전문가의 깨달음의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

각각의 엔진의 구현 원리 및 최적화 전략이 다르기 때문에 JavaScript 엔진은 JavaScript 코드를 구문 분석하고 실행할 때 다른 영향을 미칩니다. 1. 어휘 분석 : 소스 코드를 어휘 단위로 변환합니다. 2. 문법 분석 : 추상 구문 트리를 생성합니다. 3. 최적화 및 컴파일 : JIT 컴파일러를 통해 기계 코드를 생성합니다. 4. 실행 : 기계 코드를 실행하십시오. V8 엔진은 즉각적인 컴파일 및 숨겨진 클래스를 통해 최적화하여 Spidermonkey는 유형 추론 시스템을 사용하여 동일한 코드에서 성능이 다른 성능을 제공합니다.

Python은 부드러운 학습 곡선과 간결한 구문으로 초보자에게 더 적합합니다. JavaScript는 가파른 학습 곡선과 유연한 구문으로 프론트 엔드 개발에 적합합니다. 1. Python Syntax는 직관적이며 데이터 과학 및 백엔드 개발에 적합합니다. 2. JavaScript는 유연하며 프론트 엔드 및 서버 측 프로그래밍에서 널리 사용됩니다.

C/C에서 JavaScript로 전환하려면 동적 타이핑, 쓰레기 수집 및 비동기 프로그래밍으로 적응해야합니다. 1) C/C는 수동 메모리 관리가 필요한 정적으로 입력 한 언어이며 JavaScript는 동적으로 입력하고 쓰레기 수집이 자동으로 처리됩니다. 2) C/C를 기계 코드로 컴파일 해야하는 반면 JavaScript는 해석 된 언어입니다. 3) JavaScript는 폐쇄, 프로토 타입 체인 및 약속과 같은 개념을 소개하여 유연성과 비동기 프로그래밍 기능을 향상시킵니다.

웹 개발에서 JavaScript의 주요 용도에는 클라이언트 상호 작용, 양식 검증 및 비동기 통신이 포함됩니다. 1) DOM 운영을 통한 동적 컨텐츠 업데이트 및 사용자 상호 작용; 2) 사용자가 사용자 경험을 향상시키기 위해 데이터를 제출하기 전에 클라이언트 확인이 수행됩니다. 3) 서버와의 진실한 통신은 Ajax 기술을 통해 달성됩니다.

실제 세계에서 JavaScript의 응용 프로그램에는 프론트 엔드 및 백엔드 개발이 포함됩니다. 1) DOM 운영 및 이벤트 처리와 관련된 TODO 목록 응용 프로그램을 구축하여 프론트 엔드 애플리케이션을 표시합니다. 2) Node.js를 통해 RESTFULAPI를 구축하고 Express를 통해 백엔드 응용 프로그램을 시연하십시오.

보다 효율적인 코드를 작성하고 성능 병목 현상 및 최적화 전략을 이해하는 데 도움이되기 때문에 JavaScript 엔진이 내부적으로 작동하는 방식을 이해하는 것은 개발자에게 중요합니다. 1) 엔진의 워크 플로에는 구문 분석, 컴파일 및 실행; 2) 실행 프로세스 중에 엔진은 인라인 캐시 및 숨겨진 클래스와 같은 동적 최적화를 수행합니다. 3) 모범 사례에는 글로벌 변수를 피하고 루프 최적화, Const 및 Lets 사용 및 과도한 폐쇄 사용을 피하는 것이 포함됩니다.

Python과 JavaScript는 커뮤니티, 라이브러리 및 리소스 측면에서 고유 한 장점과 단점이 있습니다. 1) Python 커뮤니티는 친절하고 초보자에게 적합하지만 프론트 엔드 개발 리소스는 JavaScript만큼 풍부하지 않습니다. 2) Python은 데이터 과학 및 기계 학습 라이브러리에서 강력하며 JavaScript는 프론트 엔드 개발 라이브러리 및 프레임 워크에서 더 좋습니다. 3) 둘 다 풍부한 학습 리소스를 가지고 있지만 Python은 공식 문서로 시작하는 데 적합하지만 JavaScript는 MDNWebDocs에서 더 좋습니다. 선택은 프로젝트 요구와 개인적인 이익을 기반으로해야합니다.

개발 환경에서 Python과 JavaScript의 선택이 모두 중요합니다. 1) Python의 개발 환경에는 Pycharm, Jupyternotebook 및 Anaconda가 포함되어 있으며 데이터 과학 및 빠른 프로토 타이핑에 적합합니다. 2) JavaScript의 개발 환경에는 Node.js, VScode 및 Webpack이 포함되어 있으며 프론트 엔드 및 백엔드 개발에 적합합니다. 프로젝트 요구에 따라 올바른 도구를 선택하면 개발 효율성과 프로젝트 성공률이 향상 될 수 있습니다.
