Node.js 不是银弹,但它仍然是颗子弹

简介: 本文的作者 Craig 是一个住在纽约的自由软件开发者,他在最近的看到了一篇名为《如果你正在使用Node.js,你就是误入歧途》的文章,文章对Node.js横加指责,Craig对此表示不满,于是写下了下面的文章: 我真的不知道为什么有人这样的讨厌 Node.js。

本文的作者 Craig 是一个住在纽约的自由软件开发者,他在最近的看到了一篇名为《如果你正在使用Node.js,你就是误入歧途》的文章,文章对Node.js横加指责,Craig对此表示不满,于是写下了下面的文章:

我真的不知道为什么有人这样的讨厌 Node.js。你也看见了网上有大量关于 Node.js 的文章和高调的言论,就好象 Node.js 是解决所有问题的良方。不是的。就像现有的很多其它框架和语言一样,它在某些事情上表现的很优良,而在其它事情上却很差。

Node.js,单从我的理解上讲,它的设计目标是更好的通过网络快速、实时的传输少量字节信息。服务器端事件处理,即时消息应用,实时游戏,以及协作工具,这都是可以使用它的很好的例子。拿Trello做 个例子。Trello 是一个实时协作应用程序,使用 Socket.io 和 Node.js 来实现客户端之间的实时事件传播和状态变换。你可以使用频繁的探询或用ajax长周期探询来完成相同的事情,但这两种方法在服务器端占用了不必要的 worker线程,需要处理额外的请求。Node.js 从某方面讲,本质上正是擅长做这类事情。它的异步事件处理为基础的架构使得接收、处理、发送实时事件消息变得简单,容易,而且非常有速度。

node.js logo

可同时,Node.js 不是、不是特别的擅长做计算。比如,如果你想做一个能返回斐波那契数列(Fibonacci)序列中第n个数的API,用 Node.js 必然不是一个很好的选择,为什么?所有的原因都在于,人们之所以要使用 Node.js 都是为了一个避免去等待什么事情。相比等待一个数据库返回查询结果,Node.js的做法是触发一个查询动作,设置一个回调事件。这样,当查询在执行时, 你的程序可以去做其它事情(比如处理其它请求)。这使得 Node.js 看起来非常的快,通常不需要使用多个CPU。然而,在我们的这个计算斐波那契数列的例子中,程序不需要去等待任何事情。这个API返回结果的速度直接依赖于计算的速度。所以,如果用另外一种计算能力更强的语言,比如Haskell或Scala,更合适。

所有的这些说明了什么观点?观点就是,如果一个框架只是为了解决任务A而设计,而你却抱怨它不能很好的完成任务B,这是愚蠢而荒谬的。Node.js 在它被设计去做的事情上表现的异常优秀——所以,就不要去嚷嚷它不擅长做其它事情了。

[本文英文原文链接:Node.js isn't a silver bullet, but it's still a bullet. ]

目录
相关文章
|
2月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
27 0
|
2月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
77 0
|
3天前
|
JavaScript 前端开发 测试技术
学习JavaScript
【4月更文挑战第23天】学习JavaScript
11 1
|
11天前
|
JavaScript 前端开发 应用服务中间件
node.js之第一天学习
node.js之第一天学习
|
1月前
|
运维 JavaScript 前端开发
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
|
1月前
|
JavaScript
Vue.js学习详细课程系列--共32节(4 / 6)
Vue.js学习详细课程系列--共32节(4 / 6)
35 0
|
1月前
|
前端开发 搜索推荐 JavaScript
编程笔记 html5&css&js 001 学习编程从网页开始
编程笔记 html5&css&js 001 学习编程从网页开始
|
2月前
|
前端开发 JavaScript
从零开始学习前端开发:HTML、CSS、JavaScript入门指南
【2月更文挑战第1天】本文将带领读者从零开始学习前端开发,介绍HTML、CSS和JavaScript的基础知识与应用,帮助读者快速入门前端开发领域。
65 1
|
2月前
|
数据采集 机器学习/深度学习 JavaScript
画【Python折线图】的一百个学习报告(二、pyecharts引入js文件)
画【Python折线图】的一百个学习报告(二、pyecharts引入js文件)
51 0
|
2月前
|
JSON 前端开发 JavaScript
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
35 0
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)