NODE.JS之我见

先说说为什么有这篇文章,关注NODE.JS 也有一段时间了,不敢说大彻大悟,但是对于NODE.JS能干什么,还是有一定的了解,笔者多年以前就研究过JavaScript引擎V8,可以说是国内最早编译并研究V8代码的人之一,这一点有博客为证。虽然NODE.JS的成功是有目共睹的,在社区的火爆程度也是路人皆知的,但是从笔者的角度来看,NODE.JS并没有给计算机科学带来任何的新东西,对于我来说它也并没有任何的新意,对于这一点,笔者并不愿意挑起任何的争论,但是欢迎讨论,也欢迎不同的意见。虽然NODE.JS可以让前端开发人员可以使用JavaScript写后端的代码,但是这并不能代表什么,也没什么意义。

下面是简单的从网上找到的NODE.JS存在的意义

1. Nodejs基于Javascript语言,不用再单独新学一门陌生的语言,从而减低了学习的门槛。

  我之见:这根本不是理由,每种工具的存在自然有他存在的意义,弹弓是不适合打飞机的, NODE.JS是可以做到这一点,但是他却没有其他的技术成熟,NODE.JS最多也就是做了其他工具早已经可以完成的事情。

2.  Nodejs并没有重新开发运行时环境,而是选择了目前最快的浏览器内核V8做为执行引擎,保证了Nodejs的性能和稳定性。

我之见:V8是c\c++写的,难道c\c++做不到NODE.JS在服务器端可以做到的事情么?

3.Nodejs的开发非常高效,而且代码简单,得益于Nodejs的单线程机制。而Nodejs的另一个特点异步编程,让Nodejs处理IO密集型应用有了明显的优势。用Nodejs比Java做Web开发要高效10倍,比PHP的代码还要简单。

我之见:你是从哪知道效率快10倍的?NODE.JS的这种异步编程模型早就存在了,好多的web服务器早已经将其应用到生产环境中了,C#, JAVA,C++ 也早就存在这方面的支持,从哪来的优越感呢?

4. Nodejs的社区在壮大,不仅包的数量在快速增加,而且包的质量也要明显好于其他语言的。很多明星级的包,都是简单而灵巧的,为了开发者的使用习惯而设计。我最常用到的工具包,如socket.io, moment.js, underscore.js, async.js, express.js, bower.js, grunt.js, forever.js…,确实在改变我以前的编程习惯。

我之见:NODE.JS社区比JAVA社区还大么?框架比JAVA社区还成熟么?不见得吧。

综上来看,笔者认为NODE.JS是个好东西,它里面的好多的理念是好的,确实值得大家去学习一番,但是NODE.JS并没有好多人认为的那么牛,因为这里面对计算机科学来说没有任何的新东西。我认为,对于任何东西大家都不要盲从,不要人云亦云,不传谣,不信谣,真刀真枪的代码才最有说服力。

可能很多人不太了解,因为被吹蒙了,NODE.JS真正强大的是对于网络协议的封装,包括对于http的封装,下面我们简单的看一个例子。

下面的代码用NODE.JS实现了一个简单的http服务器,运行起来会在13333端口监听http请求,当有http请求来的时候会返回Hi There! 仅此而已,就这个功能,随便写几句C++代码也可以完成同样的功能。

var http = require('http');

http.createServer(function (req, res) {

  res.writeHead(200, {'Content-Type': 'text/plain'});

  res.end(Hi There!\n');

}).listen(13333, '127.0.0.1');

console.log('Server running at http://127.0.0.1: 13333/');

再来看一个例子,这个例子在13334端口监听TCP请求,来什么返回什么,仅此而已,同样也就是几行C++代码的事。

var net = require('net');

 

var server = net.createServer(function (socket) {

  socket.write('Echo server\r\n');

  socket.pipe(socket);

});

 

server.listen(13334, '127.0.0.1');

总结

本人无意和大家就NODE.JS进行任何的争论,但是欢迎正面的讨论,共同进步,NODE.JS本身是个好东西,但是大家不要将其神化,认为所有的现有技术都一无是处了,JavaScript统一全栈恐怕只能是一个笑话。

NODE.JS之我见的更多相关文章

  1. NODE.JS学习的常见误区及四大名著

    NODE.JS学习的常见误区及四大名著 前段时间由于不满于社区里很多人对于NODE.JS的种种误解而写了一篇文章名为: NODE.JS之我见:http://www.cnblogs.com/pugang ...

  2. 在Window IIS中安装运行node.js应用—你疯了吗

    [原文发表地址]Installing and Running node.js applications within IIS on Windows - Are you mad? [原文发表时间]201 ...

  3. 关于 Node.js 的认证方面的教程(很可能)是有误的

    原文地址:Your Node.js authentication tutorial is (probably) wrong 我搜索了大量关于 Node.js/Express.js 认证的教程.所有这些 ...

  4. Node.js 数据存储方式的选择

    如何为你的 Node.js 应用挑选数据库 Node.js 应用一般有三种方式保存数据. 不使用任何数据库管理系统(DBMS),把数据保存在内存里或直接使用文件系统. 使用关系数据库.例如 MySQL ...

  5. node.js+react全栈实践

    利用业余时间写了个简单的项目,使用react+node.js做的一个全栈实践项目,前端参考了[React-Admin-Starter](https://github.com/veryStarters/ ...

  6. Node.js定时邮件的那些事儿

    近开发一个项目,需要在Node.js程序里实现定期给管理员发邮件的功能. 笔者平时只会在Web界面收发邮件.对邮件的原理完全不懂(可能大学教过,然而全忘了),直到要解决这个问题.请教了几个业务的同事, ...

  7. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  8. 利用Node.js的Net模块实现一个命令行多人聊天室

    1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ...

  9. Node.js:进程、子进程与cluster多核处理模块

    1.process对象 process对象就是处理与进程相关信息的全局对象,不需要require引用,且是EventEmitter的实例. 获取进程信息 process对象提供了很多的API来获取当前 ...

随机推荐

  1. Python 深入理解yield

    只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子: for 取出alist的每一项,然后把i + 1塞进去.然后通过调用取出每一项: = [1, 2, 3, 4]for x in ...

  2. Android性能优化典范第二季

      Google前几天刚发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitma ...

  3. Redis 队列操作

    class Program { //版本2:使用Redis的客户端管理器(对象池) public static IRedisClientsManager redisClientManager = ne ...

  4. 深入理解CSS弹性盒模型flex

    × 目录 [1]版本更迭 [2]display [3]基本概念[4]伸缩容器[5]伸缩项目 前面的话 CSS3引入了一种新的布局模型——flex布局.flex是flexible box的缩写,一般称之 ...

  5. 使用ASP.NET Web API 2创建OData v4 终结点

    开放数据协议(Open Data Protocol[简称OData])是用于Web的数据访问协议.OData提供了一种对数据集进行CRUD操作(Create,Read,Update,Delete)的统 ...

  6. javascript 设计模式-----观察者模式

    观察者模式在设计模式中被重点提到,因为它应用的场景非常多,而且在模块化设计当中扮演着非常重要的角色.MVC模式中最底层的就是观察者模式,当下流行的javascript框架backbone就是很好地运用 ...

  7. Wix 安装部署教程(十四) -- 多语言安装包之用户许可协议

    在上一篇中,留下了许可协议的问题,目前已经解决.感谢网友武全的指点! 问题 一般我们是用WixVariable 来设定许可协议.如下所示: <WixVariable Id="WixUI ...

  8. 【网站国际化必备】Asp.Net MVC 集成Paypal(贝宝)快速结账 支付接口 ,附源码demo

    开篇先给大家讲段历史故事,博主是湖北襄阳人.襄阳物华天宝,人杰地灵,曾用名襄樊.在2800多年的历史文化中出现了一代名相诸葛亮(卧龙),三国名士庞统(凤雏),魏晋隐士司马徽(水镜先生),唐代大诗人孟浩 ...

  9. 继续SecureString

    上回写了关于SecureString的特征和为什么我们要使用它,这篇继续研究研究这个SecureString. **主要内容:** - SecureString与String之间的转换 - Secur ...

  10. 使用 PowerShell 自动登录Azure

    PowerShell 是管理 Azure 的最好方式之一,通过使用 PowerShell 脚本可以把很多的工作自动化.比如对于 Azure 上的虚拟机,可以设置定时关机操作,并在适当的时间把它开机,这 ...