谨以此篇纪念开始接触 nodeJs 的自己,希望未来乘风破浪、披荆斩棘。
Nodejs 框架是基于 V8 的引擎,是目前速度最快的 Javascript 引擎。chrome 浏览器就基于V8,同时打开 20-30 个网页都很流畅。Nodejs 标准的 web 开发框架 Express,可以帮助我们迅速建立 web 站点,比起 PHP 的开发效率更高,而且学习曲线更低。非常适合小型网站、个性化网站建设。
Nodejs 的介绍
Node.js 的是建立在 Chrome 的 JavaScript 的运行时,可方便地构建快速,可扩展的网络应用程序的平台。Node.js 使用事件驱动,非阻塞 I/O 模型,轻量、高效,可以完美地处理实时数据,运行在不同的设备上。
为什么要用 Nodejs?
从我使用体会来说,NodeJS 有 4 大优势:
- Nodejs 基于 Javascript 语言,不用再单独新学一门陌生的语言,从而减低了学习的门槛。同时,Javascript 语言在 Web 前端开发中至关重要,特别 HTML5 的应用必须要使用,所以前后台统一语言,不仅可以实现程序员的全栈开发,还可以统一公共类库,代码标准化。单凭这一 点,Nodejs 就已经赢得市场的青睐了。
- Nodejs 并没有重新开发运行环境,而是选择了目前最快的浏览器内核 V8 做为执行引擎,保证了 Nodejs 的性能和稳定性。
- Nodejs 的开发非常高效,而且代码简单,得意于 Nodejs 的单线程机制。而 Nodejs 的另一个特点异步编程,让 Nodejs 处理 IO 密集型应用有了明显的优势。个人感觉,用 Nodejs 比 Java做 Web 开发要高效 10 倍,比 PHP 的代码还要简单。
- Nodejs 的社区在壮大,不仅包的数量在快速增加,而且包的质量也要明显好于其他语言的。很多明星级的包,都是简单而灵巧的,为了开发者的使用习惯而设计。我最常用到的工具包,如 socket.io、moment.js、underscore.js、async.js、express.js、bower.js、grunt.js、forever.js…确实在改变我以前的编程习惯。
当然,除了我使用Nodejs的理由,很多公司也都有自己的使用理由。
ebay选择Nodejs的理由,可以归纳为以下4点: - 动态语言:开发效率非常高,并有能力构建复杂系统,如ql.io。
- 性能和 I/O 负载:Nodejs 非常好的解决了 IO 密集的问题,通过异步 IO 来实现。
- 连接的内存开销:每个 Node.js 进程可以支持超过 12 万活跃的连接,每个连接消耗大约 2K 的内存。
- 操作性:实现了 Nodejs 对于内存堆栈的监控系统。
Nodejs不适合的领域
每一种语言或平台都有不擅长领域,对于Nodejs来说最不擅长的领域在于CPU
和内存
的编程操作。
- 计算密集型应用,让 Javascript 和 C 去拼计算性能,估计是不可能赢的。
- 内存控制,让 Javascript 和 Java 比较复杂数据类型定义,也是很困难的。因为 Javascript 的面向对象是基于 JSON 的,而 Java 是直接使用内存结构。所以,通过 JSON 序列化和反序列的过程控制内存,Javascript 就已经输了。
- 大内存的应用,由于 V8 引擎有内存设计的限制,32 位环境中最大堆是 1G,64 位环境中最大堆也不到 2G,如果要一次读入 10G 数据,对于 Nodejs 来说也无法实现。
- 静态服务器,虽然 Nodejs 的优势在 IO 密集集应用,但是和 Nginx 的处理静态资源还是有很大的差距。
- 不需要异步的应用:比如系统管理,自行化脚本等,还是 Python 更顺手,Nodejs 的异步调用可能会给编程带来一些麻烦。
Node.js学习路线
我们看到Node.js已经被广发地应用在各种的场景了,针对Node.js的应用场景,我们应该如何学习Node.js呢?
大家可按以下所列路线进行学习:
- 项目管理:npm、grunt、bower、yeoman
- Web开发:express、ejs、hexo、socket.io、restify、cleaver、stylus、browserify、cheerio
- 工具包:underscore、moment、connet、later、log4js、passport、passport(oAuth)、domain、require、reap、commander、retry
- 数据库:mysql、mongoose、reids
- 异步:async、wind
- 部署:forever、pm2
- 测试:jasmine、karma
- 跨平台:rio、tty
- 内核:cluster、http、request
- 算法:ape-algorithm(快速排序)、ape-algorithm(桶排序)
从零开始nodejs系列文章
本文参考链接:
http://blog.fens.me/series-nodejs/
https://www.cnblogs.com/agileai/p/5159485.html