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

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

过年回家,家里没网,作为一个战斗型屌丝,自然不能错过如此学习机会,于是买了两本书 一本《深入浅出nodejs》一本《写给大家看的c++》

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

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

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

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

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

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

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

nodejs的出现,彻底把性能分为cpu性能和io性能,而在io性能上采取异步回调机制,彻底消灭了计算机之间通信造成的等待堆积,造成的性能问题,

并发量大时候,大量的等待压垮 服务器在传统服务器和应用上似乎是家常便饭,这可能要和nodejs说 拜拜了

传统web服务器应对海量并发 nodejs 服务器因对海量并发

传统的web服务器因为单台服务器可以承受的链接数有限,所以就弄一大堆海量服务器来分担负载,

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

标志

很少写一个循环里面掉接口


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 技术股票值得长期持有,尤其是要创业的各位伙伴们

一直都想看看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版本的

过年7天乐,学nodejs 也快乐的更多相关文章

  1. nodejs 视频教程《一起学nodejs》

    一起学nodejs 讲师:   matthew vscode+nodejs4.6 http://list.youku.com/albumlist/show/id_27966955.html?spm=a ...

  2. 开始学nodejs —— 调试篇

    新学习一种技术,肯定会遇到很多坑,我们需要找到这些坑,弄清楚这些坑出现的原因和其中的原理.这种操作就叫做调试. 程序调试的方法和工具多种多样,在这里我总结一下我在学习nodejs的过程中,学到的和用到 ...

  3. 开始学nodejs——net模块

    net模块的组成部分 详见 http://nodejs.cn/api/net.html 下面整理出了整个net模块的知识结构,和各个事件.方法.属性的用法 net.Server类 net.Socket ...

  4. 边走边学Nodejs (基础入门篇)

    1.什么是Node.js Nodejs ,或者node, 是一个基于ChromeJavaScript执行时建立的平台.用于方便地搭建响应速度快.易于扩展的网络应用.Node.js 使用事件驱动, 非堵 ...

  5. 我们是怎么管理QQ群的

    文章背景:腾讯平台上的qq群数以千万百万计,但99%的在吹水扯蛋,从早上的问好开始,到晚上的晚安,无一不浪费青春之时间,看之痛心,无力改变,只好自己建了一个,希望能以此来改变群内交流的氛围或环境. 以 ...

  6. github上最全的资源教程-前端涉及的所有知识体系

    前面分享了前端入门资源汇总,今天分享下前端所有的知识体系. 个人站长对个人综合素质要求还是比较高的,要想打造多拉斯自媒体网站,不花点心血是很难成功的,学习前端是必不可少的一个环节, 当然你不一定要成为 ...

  7. 前端资料QQ群交流

    转:https://github.com/jsfront/src/blob/master/qq.md 这本来是我QQ群内部的一份公共约定的日常交流规则,后来得到大伙的一致认可,并用实际行动来捍卫它,使 ...

  8. 【JavaScript&jQuery】前端资源大全

    综合类 综合类 地址 前端知识体系 http://www.cnblogs.com/sb19871023/p/3894452.html 前端知识结构 https://github.com/Jackson ...

  9. JavaScript资源分享

    一. 资源教程: 综合类 前端知识体系 前端知识结构 Web前端开发大系概览 Web前端开发大系概览-中文版 Web Front-end Stack v2.2 En类资源汇总 免费的编程中文书籍索引 ...

随机推荐

  1. 在CHROME里安装 VIMIUM 插件, 方便操作

    VIMIUM 插件使用方法 VIMIUM 命令列表 网页导航 j, :向下滚动网页 k, :向上滚动网页 h : 向左滚动 l : 向右滚动 gg : 滚动到网页头部 G : 滚动到网页底部 :向上翻 ...

  2. [NHibernate]利用LINQPad查看NHibernate生成SQL语句

    上篇文章中我们提到可以通过重写NHibernate的 EmptyInterceptor 拦截器来监控NHibernate发送给数据库的SQL脚本,今天看到有朋友用LINQPad工具来进行NHibern ...

  3. Beta工作比例(Transcend)

    Beta工作比例 成员 工作 黄志明 10% 洪志兴 10% 李佳恺 17 % 巫振格 17 % 肖承志 10 % 李严 16 % 牛妍辉 stripes 20%

  4. 机器学习之K-近邻算法

    机器学习可分为监督学习和无监督学习.有监督学习就是有具体的分类信息,比如用来判定输入的是输入[a,b,c]中的一类:无监督学习就是不清楚最后的分类情况,也不会给目标值. K-近邻算法属于一种监督学习分 ...

  5. Gym 100646 F Tanks a Lot RMQ

    Problem F: Tanks a Lot Imagine you have a car with a very large gas tank - large enough to hold what ...

  6. Java基础加强之集合篇(模块记忆、精要分析)

    千里之行,始于足下.把别人的变成自己,再把自己的分享给别人,这也是一次提升的过程.本文的目的是以一篇文章从整体把握集合体系又不失一些细节上的实现,高手路过. 集合的作用与特点 Java是一门面向对象语 ...

  7. Jekyll 安装权限问题 ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/jekyll

    OS X El Capitan 新特性(System Integrity Protection or SIP)中加强了权限,但是可以对这里进行操作 /usr/local/bin 可以尝试使用以下指令进 ...

  8. 关于XML中:XmlNode和XmlElement的涵义及不同之处

    今天学习XML,遇到XmlNode和XmlElement俩个类,故有了下文的所述: 今天在做ASP.NET操作XML文档的过程中,发现了两个类:XmlNode和XmlElement.这两个类的功能极其 ...

  9. 利用 HashSet 去过滤元素是否重复

    HashSet<Integer> hashSet = new HashSet<Integer>(); for (int i = resultDoctorDetails.size ...

  10. Asia Hong Kong Regional Contest 2016

    A. Colourful Graph 可以在$2n$步之内实现交换任意两个点的颜色,然后就可以构造出方案. #include <bits/stdc++.h> using namespace ...