现在,请大家想象一下:现在是晚上 11 点,我喝着一杯既冰冷又滚烫的咖啡(这是我掌握的一项独特技能),然后我陷入了JavaScript 运行时的兔子洞中。
是的,我知道,星期五晚上很疯狂,对吧?但是,嘿,当你是一名软件工程师时,你对“乐趣”的想法有时包括比较 Deno 和 Node.js,而你的猫则在房间的另一边评判你。
关于这个概念,我多年来一直在研究Node.js。
它就像你衣柜里那些破旧的衣服,你似乎无法扔掉,因为它们仍然处于工作(质量)状态。它很舒服,但有时,你会想买一些市场上流行的类似流行款式——你知道的,有改进版和新款。
回到正题,进入Deno.js,每个人都在热议的现代竞争对手。多年来,我已经习惯了 Node.js,对我来说,深入探索这个元素并亲自检查它是否值得大肆宣传,或者它是否具有同等甚至更好的运行时间,这只是一种自然的本能。那么,我们应该把它分解一下,以便更好地掌握它吗?
const fs = require('fs');
fs.writeFileSync('./hello.txt', 'Hello, World!');
console.log('File written successfully!');
但是如果你尝试在没有权限的情况下运行该 Deno 代码,
const encoder = new TextEncoder();
await Deno.writeFile('hello.txt', encoder.encode('Hello, World!'));
console.log('File written successfully!');
你会收到一条很大的错误消息:PermissionDenied:需要 对“hello.txt”具有写访问权限 。
PermissionDenied: Requires write access to "hello.txt".
是的,Deno 不会乱来。你需要像--allow-write运行脚本时一样明确传递标志。这有点烦人吗?当然。但它能避免你意外引发混乱吗?当然。
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello from Node.js!');
});
server.listen(3000, () => console.log('Node server running on port 3000'));
import { serve } from "https://deno.land/std/http/server.ts";
const server = serve({ port: 3000 });
console.log("Deno server running on port 3000");
for await (const req of server) {
req.respond({ body: "Hello from Deno!" });
}
结果如何?Deno 在处理请求方面稍快一些,但我们这里说的是毫秒级的差异。
对于大多数实际应用程序来说,这种差异不会改变游戏规则——除非你试图构建下一个 Twitter(或 X?我们现在是这样称呼它的吗?)。
import * as _ from "https://deno.land/x/lodash/mod.ts";
console.log(_.chunk([1, 2, 3, 4], 2));
一开始,我心想:“等等,什么?”但后来我意识到它有多酷。
我不再有臃肿的 node_modules 文件夹!不再担心软件包版本不匹配!只需干净、直接地导入就可以。
不过,我承认:我很怀念 npm 的便利性和它提供的软件包的多样性,真是旧习难改。
const fs = require('fs');
const data = fs.readFileSync('./file.txt', 'utf8');
console.log(data);
Deno.js:
const data = await Deno.readTextFile('./file.txt');
console.log(data);
作者:场长
参考:
https://github.com/errilaz/awesome-js-runtimes
本文为 @ 场长 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。