最近,Stackoverflow的一篇博客引起了我的兴趣。标题是《Node.js带来的服务器端JavaScript让全栈变得简单》。经常会和朋友讨论为什么要学Node.js,我们借这个机会,看看大神是怎么看待Node.js的。
说到网页应用要选什么语言,什么框架,什么库,什么环境的话,开发者会被成千上万的选项所淹没。有调查显示,光编程语言,就有到个选项。根据StackOverflow开发者调查的结果看,过去9年,最流行的语言是JavaScript。
Node.js项目从年开始启动以后,迅速成为应用开发者最广泛使用的选项。超过一半的开发者现在在使用Node.js,它成为了最流行的非语言,非数据库的开发工具。你可以靠它,在服务器端运行JavaScript,实现JavaScript单语言全栈开发。
Node.js成为了后端解决方案的快速,低成本且高效的方案选项。同时,由于它客户端-服务器的双向通讯渠道,在跨平台开发中,很难被打败。所以,Node.js的流行程度逐渐滚起了雪球,越滚越大。
什么是Node.js?
Node.js是一个免费,开源,事件驱动的JavaScript运行时环境,而不是一个框架,一个库,或是一门语言。基于GoogleChrome的V8JavaScript引擎,Node.js通过异步处理,单线程非阻塞的I/O架构改进了它的效率。
通过把软件分解成同时运行的小碎片,Node.js可以打造出轻量,快速,可扩展的应用。Node.js也可以让开发者使用JavaScript来创建用于服务器脚本的命令行工具。
由于它的速度和多任务能力,Node.js成为了许多大公司和机构的选择。主要的行业领域覆盖教育,医疗,政务和金融。
为什么应该使用Node.js?
已经精通其它编程语言,框架,库或环境的开发者可能会问:我们为什么要花时间学习Node.js?长话短说的话,就是:Node.js能够加快开发速度,改善应用的整体性能。
Node.js易于学习
如果你还没有使用过Node.js,你一定得要投资一点时间来学习一下。应用开发者通常没有很多自由时间,所以如果要让他们想要学习一个新工具,那么这个工具必须要简单易学。而大量的开发者已经熟悉JavaScript了。
由于Node.js在服务器端使用了JavaScript,这就使得前端开发者可以很快地构建服务器端应用,即使他们对于后端编程理论的知识和经验都十分有限。
Node.js也有大量的文档库,可以帮你开发项目的时候,学到更多关于如何使用Node.js的知识。
Node.js很快
说到速度,需要区分应用的开发速度和实际的应用性能。Node.js这两点都不差。
Node.js的速度优势要归功于几个因素。首先,GoogleV8引擎,能够超级快地将JavaScript代码转换为机器码。Google对V8引擎的贡献,确保了开发者会获得频繁的更新,以及持续不断的性能改进。
Node.js应用比其它应用运行快很多。因为Node使用了异步非阻塞编程模型,进程可以并行执行,而不用等待另一个进程运行完毕才执行。结果就是速度和性能的提升。
Node推崇模块的复用,这就减少了开发的时间。况且,社区本身就已经有了大量的模块,开发者可以不用从零开始,就可以获取很多所需要的功能。
Node.js有单模块缓存
Node性能强的另一个原因是,它使用了单模块缓存。模块第一次被请求时,它会在应用的内存中,缓存下来。后续调用这个模块的时候,访问的其实是这个被缓存了的版本,而不是重新编译模块。结果就是,Node.js应用加载更快,响应性更高。
Node.js促进了实时应用的开发
Node的架构让它成为了开发实时应用的理想候选人。Node通过异步操作,促进了服务器和客户端的快速数据传输,确保在用户请求和服务器响应之间,没有延迟。
Node允许多个进程并行运行。所以I/O操作又快,响应性又高。这在配置网页代理或构建同时存在大量用户的应用时,比如聊天和消息应用时,特别有用。
不要忘了V8引擎,它提升了整体的Node.js速度和性能,这是实时应用的另一个保证。
Node.js易于规模化
规模化Node.js很简单。Node.js支持几万到几十万的并发连接。Node.js应用可以轻松地添加新模块来得到扩展。
Node.js依赖集群模块,它是一个负载均衡器,负责在所有可用的CPU内核上,分配进程。这让Node.js应用能够快速高效地处理大量进程。
Node的模块化架构为开发规模化提供了有力支撑。开发能够并行运行的微服务,减少了开发时间,促进了应用功能的模块化添加。
Node.js拥有可行的流处理
Node.js数据处理功能在接收来自客户端网页服务器请求,比如HTTP请求的时候,需要创建数据流。使用流的话,Node.js就可以把模块分割成更小的块,模块能够单独处理数据流,而不用把完整的数据一整个保留在内存中。所以Node.js可以更快更高效地处理更大的文件,这就是为什么它是开发视频或直播会议的首选。
使用流,主要有2个主要的优点。第一,处理大型文件的时候,它可以减少内存的消耗。第二,使用流,可以让数据处理在接收到第一个数据块的时候,立即开始,而不是等整个包传输完毕后,才开始处理。
Node.js的性价比高
如果把Node的每个优点都结合起来的话,就会节省不小的成本:
1、因为Node.js让有JavaScript经验的前端开发者可以进行后端开发,你不再需要前端和后端各有一个完整的团队。
2、使用社区的预构建微服务,能够更快地开发应用。
3、Node对资源的高效使用意味着你可以最小化应用的服务器开销。
4、Node的可扩展性意味着添加功能更简单更快,可以减少行进中开发成本。
Node.js有强大和活跃的社区
因为Node.js持续增长的流行程度,一个大型活跃的社区提供了支持和资源。Node.js的粉丝在响应你提出的问题时,以及开发过程中帮你解决持续出现的问题时,一直都在。许多Node.js开发者很乐于把自己的成果和社区进行分享。
在社区的所有资源当中,最有用的要算Node包管理器(npm)了。npm是一个巨大的在线Node.js项目合集。你可以非常方便地从上面下载安装。有了npm,找到预构建的内容,并将其集成到应用中,就变得轻而易举了。
Node.js可以帮你落实工作
对Node.js开发者的需求和对这个工具的兴趣,都在快速增长。不过对开发者的需求依旧很大。所以把Node.js添加到你的武器库,能够让你在潜在雇主面前,更有吸引力。
什么时候不该使用Node.js?
没有工具是完美的,这一点不足为奇,Node.js也有一些缺点。尽管它有很多优点,不过某些应用,Node.js并不是最好的选择。
如果你的应用基于受CPU限制的进程
重计算应用会严重消耗Node.js的高效和性能。这是因为Node.js会把中计算进程的优先级排得很高,高于其它进程,这会导致进程延迟。
Node.js尝试通过它在年发布得工作者线程这个多线程工具来客服这个问题。不过工作者线程的效率问题仍旧没有落实,Node正在努力改善工具的可用性。
如果你很关心数据的安全性
一些开发者认为Node.js缺乏默认的错误处理,会让它受到攻击时,很脆弱。诚然,Node.js就和其它所有编程语言或开发工具一样,容易受到攻击。不过,这一点有些多虑了。
用上编程和应用开发的最佳实践,同时开发过程中辅以安全性考量,就能将安全的隐患降到最低。当然,鼓励用户打造高效安全的实践,如果能加入到应用功能的话,那肯定会很好,比如多元验证。
如果你害怕回调地狱的话
因为Node.js是异步的,它会产生大量的回调函数。当回调函数嵌套很深时,你就会进入开发者不太喜欢的回调地狱。通常,回调地狱源于糟糕的开发习惯,而不是Node.js的原因,不过你应该要意识到,如果使用Node.js的话,这是可能要面对的问题。
如果你想要稳定的API的话
Node.js的API众所周知,缺乏稳定性。它会经常变更,而且有时编程是无法向后兼容的,比如Node.js8,这会导致开发者的一些额外工作。
试试Node.js吧
基于它持续增加的流行程度,以及对于许多流行的应用,有据可查的速度和性能优势。Node.js对于应用的开发不费吹灰之力。即使最质疑最多的开发者,也应该试一试Node.js,来判断是否值得把它纳入他们的开发资源。
如果喜欢这篇文章的话,麻烦长按点赞,