1: 了解Node之前最好的课程是对Javascript有一定的了解!在此基础上学习,你会感觉Node.js对于来说,学习的成本将会变低,当然没有了解,也是可以学习的。很久没看书了。之前买的一本Node.js的书放置了好久,简单的翻了几页,就一直在积灰,今天难得翻出来,所幸就好好的学习一番。
神马是Node.JS?
Node.js :简单点理解,你可以认为是让一个Javascript程序运行在服务器端的平台。它可以像其他语言如PHP,Python,Perl,Ruby一样让语言脱离于浏览器在服务器环境下运行,从而进行服务器端的应用程序开发。
它的诞生有一定的实在意义。是一个为实时Web(Real-time web)应用程序的开发而诞生的平台,它的诞生实在实时响应、超大规模数据响应的要求下对架构的可扩展性要求的历史背景中应运而生。
传统程序的特点在大型应用面前必然出现的高并发的设计,为了解决实时在线多用户操作的应用场景,Node.JS却换了一个思路来实现,单线程、异步I/O操作事件驱动型等方式一定程度上转嫁了对服务端应用程序的并发设计的压力(来自对多线程设计和性能的要求),从而为服务器的架构的性能提升和扩展设计提供了更丰富的思路和框架。这是一种概念上的设计,作为一个初学者,我们无法去实际测量这种思路的表现能力,但是它的诞生,并应多众多程序员(特别是前端开发人员)的喜爱,必然有它存在的道理和设计思路上的不同之处。减少多线程程序设计的复杂性,一定程度上提到了我们的开发效率。
关于Node.js的历史,有兴趣的可以在网络上搜索,好好的用度娘和谷哥,你能对Node有更深层的理解,这里就不再累述,个人能力有限。码字能力和实际能力挂钩,我就此打住。
Node.JS有一个不得不提的让我感到兴奋的是,他跳过了Apache、Nginx、IIS等HTTP服务器向用户提供服务,直接面向前端开发(这或许是前端人员喜欢它的原因)
Node.JS不是JS库,也不是独立的语言。它仅仅是一个让Javascript运行在服务器端的开发平台。当然这里必须要对它和Javascript语言做一定的理解。传统意义上Javascript是在ECMAScript规范的基础上实现了文档对象模型(DOM)和浏览器对象模型(BOM),但是Node.js只是对ECMAScript的标准规范做了大部分的实现(无论何种厂商的实现,都一定有它的利益驱动,所以无论规范如何"规范",厂商们总有自己的"难言之隐",所以有差异性不要感到惊奇。由于Node只需要运行在服务器端,所以当然的DOM和BOM就没必要实现了。)
NodeJS实现了包括:文件系统、模块包(NPM管理的方式有意思)、操作系统API、网络通信等核心接口。
NodeJS的JavaScript引擎来自于V8,相信大家都不会陌生(那不是谷哥兄弟下的chromium项目么)
了解之前先看下Node.JS能做什么?
- 具有复杂逻辑的网站
- 大规模的Web应用
- WebSocket服务器(oh,yes,终于为HTML5的在线应用找到了一个支持很好的服务器)
- TCP/UDP套接字应用程序
- 命令行工具
- 交互式终端程序
- 带有图形用户界面的本地应用程序
- 单元测试工具
- 客户端Javasript的编译器
我目前用的最多的应该是Javascript项目构建和打包程序工具,前端们很乐意开发。当然正式因为用的多,碰到的问题也多,当发现总是需要别人去跟进改进bug时,我慢慢的就产生了要学习这个平台的冲动。(冲动是魔鬼,确保自己有坚持的恒心,不然就先干好当前的事,不然就是浪费时间和金钱买了一本书,结果凉在一边)
(题外话:写到这里我突然想到了AJAX,曾经有人问到了我什么是AJAX,我突然发现虽然我每天都在用在它,但是我却不能解释它。AJAX不是一个缩写词,他可以解释为:Aysnchronous Javascript And XML,它不是一种语言,是一种为了更好的更快的与服务器交互,从而改变无法及时响应用户端的操作,阻塞用户操作进程的一种实现技术。AJAX 在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求),这样就可使网页从服务器请求少量的信息,而不是整个页面。web2.0的出现,AJAX贡献巨大)
为什么要说上面一段无关紧要的话,有些人包括我之前也这样认为,在上文中讲解一门语言或平台的历史背景、带来的改变以及应用场景很啰嗦,没有什么意思,但是我现在可以告诉你,只有了解了一门技术的历史背景和发展以及它的应用场景,你可能才会在一项目中选择更加合适的技术,更加合理的分配你的技术资源和创造力,而不仅仅是知道它怎么用。
好!废话告罄!
学习Node.JS之前对CommonJS需要有所理解commonJS有一个实现本身也是此名。
CommonJS规范包括了
- 模块(modules)
- 包(packages)
- 系统(system)
- 二进制(binary)
- 控制台(console)
- 编码(encoding)
- 文件系统(filesystems)
- 套接字(sockets)
- 单元测试(unit testing)
等部分。其中包和模块是NodeJS重要的组成模块,在后面的学习中,你就明白了.
下一节一起学习快速和安装和我们都知道的"hello Node.js";