비교적 node.js 및 Deno

앞말


만약 당신이 웹 개발 분야에 관심을 가지고 있다면, 최근에 데노에 대한 많은 정보를 들었을 것이다. 새로운 자바스크립트가 실행될 때, 그것은 아마도 노드로 여겨질 것이다.js의 계승자.그런데 이게 무슨 뜻이야, 우리'다음 Node.js'가 필요해?

데노가 뭐예요?


무슨 일이 일어났는지 알아보려면 먼저 데노가 무엇인지 살펴봐야 한다.앞에서 말했듯이 이것은 새로운 JavaScript가 실행될 때, 즉 JS 코드를 실행해야 하는 환경이다.그것은 처음에 Ryan Dahl이 창조한 것이다. 그는 이전에 우리를 위해 Deno와 Node를 만들었다.js를 비교했습니다.
라이언은 JSConf EU 2018 강연에서'Node.js의 10대 유감'이라는 제목으로 데노를 발표했다.그 메시지에서만 너는 진전 상황을 알 수 있다.Deno는 처음부터 생성되며 현재 Node 쌍입니다.js의 더 좋은 실현.
하지만 노드.js 뭐가 안 좋아요?Deno는 더 성숙한 사촌 형과 어떻게 맞서나요?

노드와.js의 비교


Deno와 Node에도 불구하고.js는 비슷한 조작을 실행하는 유사한 도구이지만, 그것들 사이의 차이는 명칭의 전도만이 아니다.

아키텍처


먼저 Deno의 내부 원리를 알아보겠습니다.노드처럼.js와 마찬가지로, 이것은 Chromium의 V8JavaScript 엔진을 기반으로 하고, 이벤트 드라이브를 사용하며, 비차단 구조를 사용한다.그러나 이들의 주요 편찬 언어는 다르다.Node.js는 주로 C++로 작성되고 libuv는 비동기 I/O 라이브러리로 사용되며 Deno는 Rust를 사용하고 같은 비동기 라이브러리인 Tokio도 Rust로 작성됩니다.
이러한 차이가 어떻게 실제 성능으로 바뀔지 우리는 반드시 지켜봐야 한다.현재로서는 데노의 기준에 따라 둘 사이의 차이는 구분할 수 없거나 적어도 매우 미묘하다.

ES 모듈


알 수도 있어, Node.js의 현재 모듈 시스템은 소위CommonJS(require ()가 있는 것)입니다. 비록 ESM(ECMAScript 모듈(import와 export가 있는 모듈)이 JS의 공식 표준이 된 지 상당히 오래되었지만 2015년에 출시된 ES6로 거슬러 올라갈 수 있습니다.그럼요, Node.js는 확실히 ESM을 지원하지만, 이 기능은 현재 ([v14.xx) 실험적으로 표시되어 JS 커뮤니티에서 CommonJS 모듈 시스템이나 다른 패키지를 사용하도록 합니다.
이것이 바로 Deno가 내놓을 물건입니다. 이것은 ESM 모듈만 지원합니다. 진정한 모듈 시스템입니다!

의존 관리


하지만 Deno는 ESM 외에도 Node입니다.js가 가져온 의존성 관리는 더 많은 변화를 가져왔다.
수백만 개의 가방을 가진 npmregistry와 유사한 블랙홀을 기반으로 하는node_모듈 디렉터리에서 얻은 경험에 따르면 Deno는 완전히 다른 의존 관계 방법을 채택했다.Deno는 npm과 같은 registry와 패키지 관리자가 필요 없고 URL에서 직접 가져오고 의존 항목을 사용합니다.

import { serve } from "https://deno.land/[email protected]/http/server.ts";
const s = serve({ port: 8000 });
console.log("http://localhost:8000/");
for await (const req of s) {
    req.respond({ body: "Hello World
" }); }
그리고 다운로드한 모듈을 컴퓨터의 어느 위치에 보이지 않게 저장합니다.예, 이것은 더 이상 node_modules!
근데 잠깐만!더 많이...아니면 나는 말을 적게 해야 한다. 왜냐하면 데노는 현재 만들어진 만능 패키지에서 벗어났기 때문이다.json 파일.deps 말고.ts 파일 외에 다른 대체 옵션이 없습니다. 모든 외부 모듈의 정렬 파일과 같은 역할을 합니다.

export { assert } from "https://deno.land/[email protected]/testing/asserts.ts";
export { green, bold } from "https://deno.land/[email protected]/fmt/colors.ts";
NPM registry의 경우 Deno가 URL에서 종속 항목을 로드할 수 있으므로 Node와 같습니다.js의 요구는 다르다.하지만 이 옵션에 관심이 있다면 데노는 자신의 패키지 위탁 관리를 제공할 것입니다.

TypeScript 및 기타 기능


네, 보셨습니다. 자바스크립트는 Deno를 사용하는 주요 언어입니다. 그리고 TypeScript도 지원합니다.이 지원은 내장되어 있으며,customregisters와 같은 물건이나 복잡한 설정이 필요하지 않습니다.
하지만 Deno에는 TS 지원 외에도 유용한 도구가 많이 내장되어 있습니다.그들 중 대부분은 명령 형식으로 나타나는데, 예를 들어 fmt,bundle 또는doc는 각각 코드 포맷, 패키지 및 문서 생성 등의 기능을 제공한다.

API


API에 대해 Deno는 분명 자신의 것입니다.모든 것이 TypeScript로 작성되었으며 비동기식 API는 Promise 기반으로만 제공됩니다.핵심 기능은 최소한으로 제한되고, 다른 모든 기능은 표준 라이브러리에서 찾을 수 있다.
그래서 겉으로 보기에는 이 모든 것이 좋아 보이고 장래성이 있어 보이지만, 모든 API를 바꾸는 것은 Node를 바꾸는 것을 의미한다.js 코드 라이브러리가 Deno로 바뀌는 것이 더 어려울 때, 이런 즐거운 마음은 즉시 사라졌다.슬프게도 모든 새것과 더 좋은 것은 반드시 대가를 치러야 한다. 그렇지?

안전


마지막으로 보안은 Deno의 가장 중요한 요소 중 하나입니다.노드와.js에 비해 샌드박스로 실행되는 코드는 시스템의 선택 부분에만 접근할 수 있습니다.이것은 적당한 표지를 전달함으로써 디스크, 네트워크, 하위 프로세스 등 내용에 대한 접근을 쉽게 제한할 수 있다는 것을 의미한다.

그럼, 이것은 무엇을 의미합니까?


그래서 나는 방금 매우 간단한 방식으로 너에게 모든 내용의 요점을 파악할 수 있도록 데노의 일부 기능을 소개했다.너는 필요에 따라 더욱 깊이 있는 연구를 진행할 수 있다.
우리 고개를 돌려 이 블로그 문장의 주요 문제를 토론합시다. 이것은 무엇을 의미합니까?알겠습니다. 주로 데노 v1이 2020년 5월 13일에 발표되었기 때문입니다.현재 모든 사람들이 이것이'다음 큰 사건'이 될 것인지, 아니면 노드를 완전히 대체할 것인지를 묻고 있다.js.
개인적으로 말하자면, 나는 지금 이런 것들을 토론하는 것은 아직 시기상조라고 생각한다.프로젝트의 규모와 지역사회의 기대를 감안하여 이 프로젝트는 이미 v1판이지만 실행 가능한 Node가 되어야 한다.js 대체자는 아직 갈 길이 멀다.이 기술들은 (모든 차이가 있더라도) 여전히 같은 일을 해야 하며, 동시에 반드시 서로 경쟁해야 한다는 것을 명심하세요.그리고 노드.js의 개발도 시대에 뒤떨어지지 않을 것이다. (예를 들어 Promise 기반의 FS API 변체나 ESM 실험적 지원) 이것은 우리가 두 개의 자바스크립트가 실행될 때 존재하는 세계에서 오랫동안 생활할 가능성이 높다는 것을 의미한다.그리고 나는 심지어 방대한 NPMregistry와 생태계를 언급하지 않았다. 비록 그것들은 어쨌든 완벽하지는 않지만, 여전히 Node이다.js는 많은 가치를 더했다. 이것은 데노가 아직 갖추지 못한 장점이다.

밑줄


요컨대 Node.js는 어디에도 나타나지 않을 것입니다. 그리고 만약에 생산에 사용할 엄숙한 프로젝트를 시작하려면 적어도 현재로서는 Node를 사용하는 것이 가장 좋습니다.js.그렇긴 하지만 아무도 (물론 나는 아니지만) 데노를 사용하는 것을 막을 수 없고, 심지어는 데노를 엄숙한 프로젝트에 사용할 수도 없다.보아하니 그것은 확실히 미래인 것 같지만, 우리는 전혀 도착하지 않았다.
이상은 비교적 node입니다.js와 Deno의 상세한 내용, 더 많은 node.js와 Deno의 자료는 저희의 다른 관련 문장을 주목하세요!

좋은 웹페이지 즐겨찾기