可能看这系列的读者会觉得,这主题也太跳了吧~~Deno 不是基於 Typescript 的语言吗? 怎麽一下子是 React,一下又转成 Typescript? 是的, Deno 确实是基於 Typescript,但它还是 Node 之父 Ryan Dahl 的新专案呢~~(好拉~小编我说到底就是想写XD)
NodeJS 目前也算是程序语言中最火的语言之一,但是 NodeJS 的作者 Ryan Dahl 却在 2018 年的 JSConf 上发表了一个关於 NodeJS设计错误的演讲,接着 Deno 问世了,Deno 是一只很可爱的恐龙XD~~好拉,Deno 是来自於 Node 的字母重新排列组合 (Node = no + de),表示要拆了 NodeJS (de = destroy, no = NodeJS)。网路上不少流传 Deno 会取代 NodeJS,Deno 确实有不少优点(待会会介绍),但是 NodeJS 发展到现在,不论是社群的支持、公司专案上的应用都已经是十分蓬勃,短时间内要被取代是不可能的。
Javascript 原生就具有 Callback 这项功能,而 NodeJS 也继承了这样的做法,也因此有了後续着名的 Callback Hell
(回调地狱)这件事,而 Deno 在设计上一开始就支援 Promise 跟 Async/Await
。
一句话就能完成读档的功能啊~~~
const data = await Deno.readFile(“./file.txt”);
console.log(data);
事实上 NodeJS 跟 Deno 都是基於 V8 开发,也就是 Google 的核心套件,浏览器的安全性很高。但是在 NodeJS 的设计里,当我们运行像是 node index.js
,index.js 里又拥有你所有的权限,此时如果刚好遇上 JS 档案是病毒档案(maybe 是脚本不安全),很可能此时就被黑客勒索了,在浏览器的世界中这种安全性问题并不该发生,只是当初 NodeJS 并没有加入这些安全机制。而 Deno 的设计里,当 Deno 编译时,它会自动去下载需要 import 的档案,然後存在缓存内,脚本需要在你允许的状况下才能去跑server起来或是读取你的(特定)档案( —allow-net —allow-write),也称 Deno 这种机制为沙盒机制(SandBox)
。
Chrome V8 在 2008 年问世,当时有一种 GYP (Generate Your Projects),所以当 NodeJS 2009 年问世时自然的就使用了 GYP,但後来 V8 转用了 (Generate Ninja),这时候就剩下 Node 成为唯一用户了,数据上显示 GN 比 GYP 快了将近 20 倍,在 Node 中很多套件底层都需要使用 GYP (因为套件要跨平台所以都会使用到),GYP 主要是用来编译原生 C++ 的模组的,这也可说是 Node 核心最大的问题了。 Deno 在这里就改用正常多了的 FFI (Foreign Function interface)
。
在我们 npm install 後,要引入 Module,通常会使用 request('Module')
的方式,但事实上在於浏览器中 <script>
内的 tag 是不能省略 .js
的,这使得 NodeJS 要多执行几次没必要的档案系统查询功能,才能知道我们要 import 什麽档案,也导致运行变慢的状况发生。
另外一个状况是,就算没有在 package.json 里注名的 dependency,在 Node 里却可以随时随地的引用。
看到这张图,使用 NodeJS 的读者应该很有感,我真正撰写的档案才几 MB,为什麽 node_module 是好几倍Σ( ° △ °|||),到底载了什麽下来啊~~这是因为 Node 里的 Vendored-by-default
机制搞的鬼,当你下载一个 Module 的时候,它会自动的将依赖於那个 Module 的 Module 都下载下来,这也导致处理 node_module 方式变得很麻烦。 而 Deno 方便多了,根本就不用npm
安装了,只要 import url
进来就可以了。
import { serve } from "https://deno.land/[email protected]/http/server.ts";
NPM 安装套件 + NodeJS 的主程序使用 require() 读取 package.json 载入,导致了 npm 的中央集权
,而 npm 仓库里参差不齐的套件,可能引发一连串的灾害,以及 require(‘module') 定义不明确
,导致引入这功能很混乱(不一定是 package.json定义的,可能是私有的模组); 加上 package.json 并没有公认管理档案的标准,因此导致一个资料夹里的可能掺杂了很多奇怪的资讯,像是名称、版本、说明,就像杂物间一样的乱。
因为在 package.json 就可以控制 main 要是哪个档案,因此默认加载 index.js 是没有必要的。
要开始燃烧了~冲刺
<<: [Day30] grid z-index 分层 / order 顺序
Abstract 好的,我们已先行叙述过Flux及Mano两项角色套件,最後,我们开始进行介绍Rea...
其实只是拖延症点到满等的我,说是主角其实只是拖延症发作 我通常都是先撰写前端篇才写後端篇,所以看官们...
今天沙滩车太累ㄌ好想弃赛 透过这八堂课,也算是对分散式系统有一些初步认识, 之後再找时间接着看 M...
小弟大概五年工作经验从修PC玩玩LinkIt开始,模仿过Boss Sensor与Agoda的推荐算法...
延伸介绍昨天的架构: 如果要对Log做视觉化的分析监控,许多人第一个想到的或许就是ELK架构*。这三...