Nodejs的优缺点,这里面讲的比较详细。有时间可以多看看别人的分析。

https://www.zhihu.com/question/19653241

Node.js 的架构与 Django, Rails 等传统的 Framework 不同,不需要放在 Nginx / Apache 后,利用 WSGI, CGI 之类的接口一板一眼的 [接受Request] -> [运行程序逻辑] -> [生成并返回Response]。这是一个巨大的变化,之前一些无法想象的功能都有可能实现了。比如 https://github.com/Miserlou/DirtyShare 可以用浏览器实现 P2P 的文件传输。正因为 Node.js 可以更精细的控制 Request 和 Response 的时间和内容,websocket 似乎天生就是为 Node.js 而生的,而配合 http://socket.io 这个神奇的库之后,在 realtime webapp 这个领域,Node.js 已经没有对手了。
Node.js 的包管理器 npm 设计得比 python 和 ruby 好很多。有很多的 module 开发者。
当然也有一些缺点
Debug 很困难。没有 stack trace,出了问题很难查找问题的原因。
如果设计不好,很容易让代码充满 callback 。实在受不了的可以考虑一下 https://github.com/laverdet/node-fibers/ 这个项目。不过 Node.js 的核心团队并不推荐使用。
我们在用 Node.js 处理知乎主站的 web 实时推送。你现在看到的 Feed 、消息的实时更新,背后就是几个 node 进程扛起来的。

优点:

1. 处理高并发场景性能更高

在用 http://socket.io 之前,推送服务是用 ajax polling 做的。我们用 Tornado 和 Node.js 做过两个版本的推送服务。在当时的测试环境下,Node.js 的 CPU 时间是 Tornado 的三分之一,内存使用是 Tornado 的一半,代码行数只有 Tornado 的三分之一(Node.js 版是用 coffee 写的)。后来我们使用了 http://socket.io,CPU 开销进一步降低。

2. 函数式编程非常适合写异步回调链

用 Node.js 配合 CoffeeScript 写异步操作链非常便利,相比之下 Tornado 无论是写命名函数的回调,还是 yield 一个 Task 都没那么自然。

缺点:

1. 大量匿名函数使异常栈变得不好看。
2. 无法以 request 为单位 catch 异常,必须确保不要在不 catch 异常的第三方库的回调里的抛异常,这在一个异步操作链条里是一件比较麻烦的事。解决方法之一是对那些不 catch 异常的第三方库做一些封装,把所有的异常变成事件,改成 on('error') 形式的 API。

【转载】【Todo】Nodejs的优缺点的更多相关文章

  1. NodeJS的优缺点

    我们知道NodeJS是2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装.Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好,解 ...

  2. [转载]用NodeJS打造你的静态文件服务器

    http://www.open-open.com/bbs/view/1321344823593 本文是我对V5Node项目的总结,该项目的特性包括: 项目大多数的文件都是属于静态文件,只有数据部分存在 ...

  3. 【转载】nodejs,npm,express分别什么?

    很多刚刚接触nodejs的初学者,都会经历一个很繁冗的环境安装过程. 一般主要要安装nodejs,npm和express三样东西.那么这三样东西分别是干什么的呢? 本篇文章就大致介绍一下这三样东西分别 ...

  4. 【转载】NodeJS、NPM安装配置步骤(windows版本)

    1.windows下的NodeJS安装是比较方便的(v0.6.0版本之后,支持windows native),只需要登陆官网(http://nodejs.org/),便可以看到首页的“INSTALL” ...

  5. [Todo] Nodejs学习及Spider实验(包括php入门学习、React入门学习)

    /Users/baidu/Documents/Data/Interview/Web-Server开发 深入浅出Node.js-f46c http://blog.csdn.net/u012273376/ ...

  6. [转载]NodeJS优缺点及适用场景讨论

    http://www.xprogrammer.com/159.html 概述:NodeJS宣称其目标是“旨在提供一种简单的构建可伸缩网络程序的方法”,那么它的出现是为了解决什么问题呢,它有什么优缺点以 ...

  7. NodeJS优缺点及适用场景讨论

    概述:NodeJS宣称其目标是“旨在提供一种简单的构建可伸缩网络程序的方法”,那么它的出现是为了解决什么问题呢,它有什么优缺点以及它适用于什么场景呢? 本文就个人使用经验对这些问题进行探讨. 一. N ...

  8. [NodeJS] 优缺点及适用场景讨论

    概述: NodeJS宣称其目标是“旨在提供一种简单的构建可伸缩网络程序的方法”,那么它的出现是为了解决什么问题呢,它有什么优缺点以及它适用于什么场景呢? 本文就个人使用经验对这些问题进行探讨. 一. ...

  9. 关于NODEJS性能测试和优缺点总结

    最近公司开发了一套新产品,采用nodejs前端+Java后端框架,为完全的前后端分离结构,以下为相关信息. 软件及功能: 软件 功能 Nginx 负责反向代理和负载均衡 Nodejs 前端代码 JDK ...

随机推荐

  1. webstorm es6 语法报错

    设置settings javascript language version后 <script>标签加个 type <script type="text/ecmascrip ...

  2. 关于Javascript 闭包的理解

    一.什么是闭包? 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述的太学术.其实这句话 ...

  3. 【转】java中的集合和数组

    转载自:http://www.cnblogs.com/summers/p/4094260.html 数组Array和集合的区别: (1)数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型 ...

  4. 《锋利的JQuery》读书要点笔记2——DOM操作

    第三章 jQuery中的DOM操作 3.1 DOM(Document Object Model)操作的分类 1. DOM Core    例如:document.getElementsByTagNam ...

  5. Jquery实现全选和取消全选的方法

    <input type="checkbox" id="all" />全选<br /> <input type="chec ...

  6. [linux]多线程下载

    axel -n 10 -o /tmp/ http://soft.vpser.net/lnmp/lnmp0.7-full.tar.gz # 10是线程数

  7. POJ 1094 Sorting It All Out【拓扑排序 / 比较字母大小】

    Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 38100 Accepted: 13453 ...

  8. Lock wait timeout exceeded数据库死锁问题

    环境 MySQL5.5 现象 A.数据更新或新增后数据经常自动回滚. B.表操作总报 Lock wait timeout exceeded 并长时间无反应 解决方法 A.应急方法:show proce ...

  9. Windows 10 作为无线显示器无法被搜索到

    症状描述: Windows 10 的投影到此电脑功能失效,但是其它功能正常.同一网络,室友的电脑正常. 解决办法: 设备管理器启用“Microsoft Wi-Fi Direct Virtual Ada ...

  10. intellij idea 为JavaEE项目建立Servlet

    建立Servlet的方法 顶部菜单栏 View > Tool Windows > Web. 然后互相web窗口 右键Web>new>Servlet 弹出窗口