OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

NodeJS会是昙花一现吗?


分享到
分类 我要吐嘈   关键字 瞎扯   发布 ourjs  1415755832751
注意 转载须保留原文链接,译文链接,作者译者等信息。  
在用了一年以后,我感觉node.js有一点不对劲。它很有意思,但是我觉得我应该用另外一个视角去审视它。


网络编程真的可以更容易吗?


node.js无疑有一些设计非常好的地方。前段时间我写了一个性能非常高的Syslog Collector系统,它可以每秒处理25万个日志,可以同时处理数千个TCP并发连接。它还支持UDP,HTTP和SSL.它是C++写的,使用了Boost.Asio  架构。它几乎从来不会崩溃。 很少会内存泄露。但是它花了我5个月的时间去编辑(然后重写),测试还有布署。所以,你要知道,写相似的node程序真的不会让你加快开发进度。

需要一个HTTP服务器?require(导入)http  模块,如果你想要一台socket服务器的话,还需要net模块。node是一个事件驱动的框架。相对于为每个链接创始一个线程模型相比有极大的性能优势,node.js取得了twisted 无法能取得的成功。 (注* twisted 基于python的异步驱动框架)


node.js的问题是什么?


JavaScript


让我们先说JavaScript - 我喜欢用它的闭包,但是这个语言太扯蛋了。甚至是JavaScriptr的铁杆粉丝都知道它有多可笑。JavaScript the Good Parts (JavaScript好的方面) 真的是一本很簿的书,对比一下你会觉得很有趣。



你会发现下面的代码根本不会报错:

undefined=42

然后你输入这个看看?

> [] + []
''

为什么1个空数组加上另外一个空数组会等于空字符串?

然后这个呢?

> [] + [] * 5
'0'

解释JavaScript为什么会这样其实挺困难的。就像为无数个猴子设计的语言。 所以在线编程是非常重要,你得经常打印一下看看到底会输出什么。

调试


我看到的大多数node.js程序员都在用一种非常原始的方式在调试,并不断地对他们用的工具表示失望。跟踪回调里不该抛出的异常,在类似Mocha和Chai的测试框架中,经常会像恶梦一样。时间不断地花在寻找为什么会出错上面。console.log也许是开发者最常使用的调试工具。

回调地狱


大多数程序员,只要在node上面写了36个小时的代码,就会发现callback hell。有些文章 介绍了一些避免的方法。具有讽刺意味的是,这是node的异步和事件驱动所天生的。它带来了很多性能上的优势,但导致了这种难看和不可靠代码的产生。

但是我们有Promises。 是的,我同意。不过如果不是用Bluebird这样的模块,我估计大多数node程序员马上就会放弃。我非常喜欢用Promise模式,它写出的代码非常优美。Promise的链式写法是非常好的实践。但是它让你放弃了彻底修复回调地狱的想法。我严重怀疑这一点会破坏NodeJS在生产环境应用的可能性。

我只会占用一个核,但只能用一个核。

node.js总是运行在一个进程里。这让他进行跨函数和跨模块的调用更加的简单。但这并不意味着是没有代价的,你必须确保你在做出更改的时侯进程不被打断。但是当你使用多核CPU时,你就无法发挥出其它处理器的性能。你就开始骂娘了。当然node里面有集群Cluster  模块,但是它还处在实验阶段,而且用它你还得重写你程序的逻辑。你最初的设计可能很少考虑到需要分布式处理的情况。

那么该怎么办?


写高性能的网络和分布式程序是当代程序员应有的基本素质。框架应该降低内容的切换——像node一样,允许我们创建高性能的服务器。但是还有比node.js更好的框架。

Go 是一个很好的侯选对象。它基于一个健壮的库,为网络编程而设计。而且编写服务器像node一样容易。Goroutines 允许程序员不必担心回调式的书写方式,让程序员以更自然的,线性的思维去思考。而且Goroutines真的非常轻量级而且内容切换比操作系统的线程间切换更轻量,这种系统级的线程操作正是node.js想要避免的。

Go可以最大可能地发挥多核的优势。这是它的基因。我写了很多Go的代码,而且它的体验要比node要好很多。

不要把我的话当回事


我的node和JavaScript经验并不像C/C++或Python那样丰富。但是我的直觉告诉我node.js只是我们朝着向更好的网络编程迈进的一步。它已经解决很多问题了,但是应该还有更好的方法。


注* 相关阅读,其它反方文章

对于现代开发来说,JavaScript就是一种垃圾语言
告别Node.js
为什么我不建议你将JavaScript作为主力语言

原文地址: 点此
社区评论 ( Beta版 )
  • #0 席央以 1415761200134

    121212

  • #1 己删除 1415761248050
  • #2 夏存平 1415802718503

    go的水文呀

  • #3 蒋巾冈 1415849359635

    深表同感。

  • #4 jackong 1415854897659

    死不了 该用node就用node 该用go就用go 哪有死不死的

  • #5 zkwap 1415868120213

    擦,完全是打击我继续使用node的信心,感觉上node是灵活高效很牛逼的敏捷性英雄,但是go像很强壮力量很大力量型

  • #6 李某凯 1415927222140

    Node.js is not a framework, but a platform built on V8 runtime.

  • #7 陶正友 1416008957067

    能先学会了再吐槽么?

  • #8 黎切旬 1417139751162

    瞎扯

  • #9 龙区订 1419171469840

    不报错是因为你没用 ‘use strict’

  • #10 丁手队 1476241471878

    @zkwap #5

    嗯。不错

OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. Nginx的大计划:将原生支持JavaScript
  2. 将GO编绎成JavaScript,用GO语言来写前端代码
  3. 不需要密码的登录
  4. Google收购Firebase,Fire加入谷歌云平台
  5. Go语言实例教程基础语法篇(一)
  6. 理解JavaScript中的事件路由冒泡过程及委托代理机制
  7. SpiderMonkey的JavaScript引擎[Firefox]性能超越V8[Chrome]
  8. Angular.JS出了什么问题?
  9. Redis集群,不再雾里看花
  10. Debug调试Node.JS:我们是如何定位内存泄漏和无限循环的
  11. AirJD-简单好用的免费建站工具

 相关阅读 - 我要吐嘈
  1. 到底开发者需要掌握多少门语言?
  2. Java的痛
  3. 再见了,Heroku
  4. PHP vs Node.js:真正的评测数据
  5. 你已经毁了JavaScript
  6. 不要让 Javascript 的等价表格看上去那么难看
  7. OpenSSL是坑货写的
  8. 为什么猎头招的都是垃圾
  9. 前狼厂悲催码农的呐喊!
  10. 前Google员工们的吐槽:在Google打工所能遇到的最坏事

 关键字 - 瞎扯
  1. 编程是一个没有前途的工作
  2. 你已经毁了JavaScript
  3. 程序员取名:用大数据分析一下宝宝取名时最容易重复的名字
  4. 浦发银行,请给我们一个解释!
  5. 在 2016 年学 JavaScript 是一种什么样的体验?
  6. Java官方安装包捆绑百度卫士杀毒软件
  7. 我们不需要JavaScript框架
  8. NodeJS会是昙花一现吗?
  9. Node程序员的反应:当我们讨论ES6新功能的优点时
  10. 欧洲杯激战正酣,如何用大数据变身专家级球迷

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号