本站提供互联网编程技术交流分享,部分技术教程不断更新中,请随时关注或联系我寻求帮助 ,同时也欢迎有兴趣的朋友进行投稿。

Nodejs创世纪 (Node Web开发系列文章之一)

前端 熊哥club 5952℃ 0评论

Nodejs创世纪 (Node Web开发系列文章之一)

创世纪

上帝说要有光,然后有就了光。
但是人类不是上帝,并不能要什么有什么。
人类的只能一步一步的不断的累积,才能达成最终的可能目标。
人类世界的创新创造都是前人累积的结果。
所以对于Nodejs来说,也是这样的情况。

历史背景

Nodejs之前的互联网有PHP,Java,C#,Python,Ruby等主流的互联网开发语言,所以Nodejs出现通常是需要有其特殊性的。
对于创造Nodejs之前的互联网来说,有几个主要的问题是需要解决的。

  1. 由于Ajax的兴起与无刷新页面的流行,对于服务器端的推送能力越来越受到关注。很多相应的语言都有相应的服务器推送的解决方案,并将这类方案统称为comet。
    称为comet的原因大概是彗星有一个长长的尾巴,跟HTTP的长连接很像。HTTP的长连接也是将连接尽量的拖长,从而达到服务器推送的效果。但是这样的长连接其实交互性并不好。
  2. 服务器的并发量问题一直困扰着各大互联网公司,对于网络IO模型的效率的研究也从Windows渗透到了Linux,并最终形成了IOCP,epoll, kqueue等多种异步网络IO模型的形成。这些IO模型的典型特点都是并发量特别大,效率特别高,支持单线程或者线程池处理IO的请求。但是管理线程与请求的成本其实也是很高的。
  3. 随着Web业务的不断飞速发展,原来的JS引擎的速度越来越无法满足新的技术与业务的需求。这个时候Google推出了他自己的浏览器Chrome,虽然Chrome占用的内存大,但是确实大家都惊奇的发现,速度好像真的快了很多。最后在Google的解释下,大家才明白了Google造了一个新的轮子叫V8。它是一个全新的浏览器引擎,速度比现有的很多浏览器都快了很多。也就是说在V8下面执行的javascript的性能高过大部分的脚本语言,包括前面讲到的PHP,Python, Ruby。

Nodejs带来的光

所以基于这三个前提条件,我们就不难想象Nodejs的出现。
Nodejs将包含了对这三个问题的最佳解决方案:

  1. 基于异步,效率的网络IO
  2. 基于V8的高效JS
  3. 对TCP的方便支持与对HTTP长连接的方便保持。

所以Nodejs的创生是有其必然性的。

Nodejs的创生

英雄倚时势,时势促英雄。英雄与时势就象鱼水一样,相辅相依。
而这个创造Nodejs的英雄就是Ryan Dahl。
最初想法来自于改善一个上传插件的进度问题。
2009年11月8日,他在欧洲的JSConf大会上简单的演示了这个项目,当时只是将V8的JS引擎、Event-Loop和底层网络IO整合到一起。没想竟意外的让Nodejs走红。
以后的故事大概所有人都比较清楚了。
2011年引入npm成为Nodejs发展的翅膀,促进了Nodejs的飞速发展。
之后又出现了express这样的Web框架,让Nodejs在web开发领域迅速的占有了一席之地,并不断的壮大。
之后各种技术与工具不断的涌现,极大的促进了Nodejs的发展,并迅速统治了前端工具链与前端开发。
并自然的促进了前后端同构理念与框架的出现,从而进一步的促成了Web全栈开发的理念。

Nodejs的架构与优势

从上面的分析我们可以看出来:

  1. Nodejs天然的集成了V8这个高速JS引擎,让Javascript性能不再慢。
  2. 基于Event Loop的事件理念,让网络IO的处理更加的高效。
  3. 引入高性能的IO模型,满足了互联网大并发的需求。

所以对于Nodejs开发者来说,了解这三项是非常必须的。在接下来的文章里,作者将会继续介绍这些基本的组件在Nodejs的运作。
Nodejs并不是传统意义上的开发语言或者语言环境,更像是一个受限的语言开发环境。它可以通过C/C++去扩展能力,但是他的核心则是为Web或者网络服务的。
所以得益于npm机制,Nodejs的能力可以得到无限的扩展,但是对于了解Nodejs本身,我们还是需要从网络服务器入手,去了解Nodejs的核心。

Nodejs的应用场景

  1. 网络优先
    基于以上的分析我们可以看出,Nodejs的应用场景首先还是Web或者网络开发。
    网络开发特别是高性能Web开发是Nodejs的重点解决的方向,是这个语言发展的主要切入点。
  2. 游戏也不错
    同时由于Nodejs编写TCP服务的程序与编写Web差不多,所以未来在游戏领域将会有极大的应用前景。
  3. 桌面已跟进
    随着electron与node-webkit的不断发展,Nodejs的桌面开发已经渐入佳境。
  4. 移动大发展
    在混合应用与桥接原生应用技术的引领下,以cordova和react native为代表的技术将Nodejs引入到了移动开发的领域,并且得到了极大的发展。
  5. 前端大暴发
    除了Web服务器这个自留地外,Nodejs的另一个暴发场景就是前端的开发场景。目前基于上所有的前端工具都是基于Nodejs开发的。之前的很多的基于java开发的工具已经不使用,Nodejs全面接替了所有之前的语言编写的前端工具,并且极大的推进了前端技术的飞速发展。

除了上述的领域外,Nodejs也在物联网(IOT)和Unix运维领域也都开始占据越来越重要的位置,所以未来会在更多的领域里看到Nodejs的身影,你还有什么理由不学习Nodejs呢?

Nodejs引入的问题与解决

Nodejs的出现对于后端开发的冲击也是非常大的。

  1. 回调函数过多
    由于后端的开发人员大多是传统的高级语言的开发者,而在传统的高级语言的开发者的大脑里,指令的执行都是顺序的,除了函数指针的调用外,无法理解一个函数执行每次都要传入回调函数,并且代码的执行还与代码的编写次序无关。这种特征极大的挑战了传统的开发者,也引来了很多传统开发者的吐槽。同时这个问题对于原来的JS语言开发者来说也是一个问题。因为每次调用都需要回调,模块化与函数的组成就会很困难,也很自然的形成了回调函数过多的问题。从而被称为回调地狱(Callback Hell)。
  2. Javascript并非面向对象的语言
    Javascript语言本身并不是面向对象的,而是基于prototype原型的一种语言。所以刚开始使用Javascript的传统开发者很难掌握在Nodejs/Javascript里使用this。同时也没有现成的面向对象机制让代码可以象Java里写类那样方便,所以在JS代码的对象化的过程中存在着有很多的障碍。
  3. 从Promise到async/await
    回调过多的问题一直是Javascript发展之路上的重要障碍与研究重点,但是一个好消息时,时至今日,这个问题已经有比较终极的解决方案。一方面是返回的Promise化,另一方面是调用的async/await化。当然也有中间态的generator可以供选择,但是相比于Promise与async/await,个人倾向于忽略generator,也许未来的Nodejs会最终废弃generator也是有可能的。
  4. ES6+与ES20xx
    由于JS的地位的越来越重要,JS的语言的发展也显得非常急迫。ECMA组织决定将ES的规范提升至每年一变。同时不再按之前的版本号来规范版本了,而是按年来定义当年的新版本,从而促进JS语言的快速迭代。这样可以及时的响应新的需求,同时也可以快速修复或者删除一些不好特性。

总结

通过本文我们了解到Nodejs是一个以网络服务器核心的Javascript运行环境,但是他通过NPM可以很好的扩展到其它的领域。虽然Nodejs作为一个Web服务器环境已经不那么新鲜了,但是作为发展速度最快的开发环境之一,以及具有的极大的提升潜力而言,值得任何一个开发者的关注,未来几年的世界里Nodejs将会占据越来越重要的位置。不考虑一下一起加入Nodejs的怀抱吗?

 

本文地址: https://www.xiongge.club/biancheng/web/649.html

转载请注明:熊哥clubNodejs创世纪 (Node Web开发系列文章之一)

©熊哥club,本站推荐使用的主机:阿里云,CDN建议使用七牛云


关注微信公众号『熊哥club』

免费提供IT技术指导交流
  关注博主不迷路~

喜欢 (0)
[您的支持是我最大的动力]
分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮