过年7天乐,学nodejs 也快乐

自从上次接触nodejs 已经好长时间了,可是年末公司太忙了 ,没时间看,html

上次文章在ubuntu上安装nodejs[开启实时web时代] http://www.cnblogs.com/qqloving/p/3286001.html 2013-08-27node

过年回家,家里没网,做为一个战斗型屌丝,天然不能错过如此学习机会,因而买了两本书 一本《深刻浅出nodejs》一本《写给你们看的c++》c++

看完nodejs 有点感受,是移动互联网时代不错的技术选型,相信,5年后nodejs在中国必定会火起来,就像10年前c#刚出来,标榜为net 而生同样。程序员

 

1 首次在底层将性能的核心由单台服务器提高到服务器节点组合

传统上大部分程序设计性能优化和核心都是在提高单台服务器的性能,而对服务器节点组合性能提高缺少考虑。web

一方面是,在独立软件服务提供商时代,过去80%的程序都运行在单台服务器上正则表达式

另外一方面是,在计算机结构上,cpu最快,内存次之,硬盘最次,网络io性能最烂,因此传统计算机都围绕这cpu 、内存、硬盘进行设计。这能够理解为时代局限性。编程

前几年,ruby 再次在单台服务器的性能上要求下滑一下,从而使开发效率在提升一次,但这几年发现ruby风彷佛小了,为啥呢?ubuntu

我的认为开发效率乃是微软的绝杀领域,ruby想要依靠开发效率在编程世界混一席之地,谈何容易,加之开源世界不是很重视开发效率,而重视可阅读,可扩展,可维护,促使ruby风刮的快,走的也快,并且高开发效率很容易出现零和游戏【1我的埋BUG,1我的改bug,一我的排期,看着每一个人都很辛苦,都很努力,都应该加工资,可是从老板角度,结果维持为0】c#

nodejs的出现,完全把性能分为cpu性能和io性能,而在io性能上采起异步回调机制,完全消灭了计算机之间通讯形成的等待堆积,形成的性能问题,后端

并发量大时候,大量的等待压垮 服务器在传统服务器和应用上彷佛是屡见不鲜,这可能要和nodejs说 拜拜了

传统web服务器应对海量并发 nodejs 服务器因对海量并发
微博桌面截图_20140208200906

传统的web服务器由于单台服务器能够承受的连接数有限,因此就弄一大堆海量服务器来分担负载,

可是单台服务器的业务逻辑依然很复杂,软件开发的复杂度总体上依然没有下降,不信,你看看你的各类性能调优和可维护行的知识,是否是围绕单台服务器的.例如高性能的***

标志

不多写一个循环里面掉接口




微博桌面截图_20140208201239
node js由于单一线程就能够处理很高的并发,因此每台服务器只须处理一点点业务逻辑,由一个队列上的其余服务器处理其余逻辑,这样,单台服务器的复杂度就极大的下降,我认为复杂度是性能的天敌,只有消灭复杂度,才能有可靠的性能



标志
一个循环里面掉接口很正常

2 nodejs自身及服务器和单线程的脆弱性

我也不知道nodejs是否是史上第一次自身就是服务器的编程工具,我资历太浅,才work4年,nodejs是我见到的第一个自身就是服务器的编程工具.

nodejs 是单线程,遇到未知错误就自动退出了 。

为何说nodejs脆弱呢,我是这么推理的以.NET和iis为例子

1 .NET APP 普通异常 黄页                                                     普通

2 .NET APP的 iis程序池异常 程序退出                          严重

3 .NET iis 异常 这台服务器上的全部iis托管的程序异常        超级严重

你们平时写程序 黄页彷佛是加长便饭,即便是程序上线了,该黄页的时候,仍是黄页,可是程序总体是没问题的

iis程序池没法启动和iis异常就不多见了能够忽略了

可是在nodejs中,就彻底不同 ,1和2放在一块儿了,由于nodejs 自身就成程序池,并且是单线程,只要出现一次异常,该线程就 退出了

这就好像之前你们只犯错误1 犯错1000次才可能遇到1次错误2,在nodejs中犯一次错误就直接是错误2

在nodejs 风挂起来后,国外紧跟着的就是js的测试驱动的不少讨论和实践,框架出了一个又一个,为啥呢?nodejs有需求呗

3 v8内存限制和cpu、io压力分散、事件循环问题

node 的v8 内存限制 一个线程的内存在32位和64位下都默认没有突破2g内存,传统的web服务器,压力一上来,内存很快就上去了,更不用说内存比较大的操做了

node 经过异步机制增强了对cpu 和io的利用,形成了设计程序时候要先预判,我这个程序是cpu 密集呢仍是io密集呢?

说实话 2013年, 经过不少事件 我才意识到 原来IO 是个很深的领域,好久之前一直认为io没啥简单的和1同样。。。。。

node 总体上是依靠事件循环机制驱动,像递归程序很是消耗node的事件循环,极可能就形成堆栈溢出 程序退出 ,因此通常循环递归用c++写插件

这几个因素和到一块儿,就形成node 设计程序模块时候 要更细致,技术粒度更细

就像一个普通的站点 用.NET 开发什么都干了 可是node 可能就不是这么回事了,例如 文件上传、验证码生成 ,检索服务,正则表达式服务等等,基本上看上去 高cpu 和高内存的模块 都要剥离出来

4先后端模型风格一致和c++

为啥nodejs 出现后全堆栈开发就屡屡上头条呢?,NET 程序员写js的时候怎么没人说全堆栈开发呢?

为啥呢?由于,有人绝望了,再加上移动互联网的普及的加速,在服务器端生成html后到客户端渲染已经OUT了

[ps:seo也out了,由于移动端连接不存在了]

so 一群被压抑好久的身怀js绝技的人,拿着nodejs神器,在短短4年时间,几乎攻下了web开发的各个角落,从未有一门语言在4年时间内取得如此成绩.c#用了10年 才勉强取代了本身的大哥asp的市场份额,可见nodejs是多nb

[ps:随着我国人口老龄化,新生人口减小,用人成本提升,不一样分工的沟通成本将会年年上升]

全堆栈的nodejs 和宇宙效率最高的.NET 技术股票值得长期持有,尤为是要创业的各位伙伴们

微博桌面截图_20140208211801

一直都想看看c++ 可是,NET这个大而全的平台上通常遇不到啥问题须要用c++解决,

最起码nodejs 递归程序得用c++写

nodejs 就不同,有一堆问题须要,因此过年就顺便看看了c++,总体感受c++没有刚上大学时候在图书馆里面看的那么难了微笑.

感受c++理论上也入门了 就剩下写nodejs 时候谢谢c++练手了微笑

这也说明学习.NET 是快速进步的途径,想学啥就学啥,我效率高,我怕啥,

5如何学习nodejs web开发?

根据我多年学习经验

快速学习web开发的渠道 最快的是

抓取数据->整理数据->展现数据->程序优化 

题目选好了说不定还能挂点广告把服务器钱挣回来呢

so lets go O(∩_∩)O~

                                                                                                               我实践mvc TDD的项目  http://www.unknownerror.org/ 

                                                                                                                有时间 再弄个nodejs版本的

相关文章
相关标签/搜索