node.js

首先要了解Node.js,我们可以先要了解什么是v8引擎,可以说Node.js的诞生很大程度上归功于v8引擎的出现。
我们都知道计算机处理器智能识别机器语言,而JavaScript是一门高级语言,计算机并不能直接读懂。所以我们需要所谓的引擎来将其转化成计算机所能理解的语言。v8引擎是由Google推出的,为其浏览器Chrome所设计的开源JavaScript引擎。得益于JIT,编译模式的改变与编译阶段的优化,JavaScript的性能得到了一个飞跃。其源代码是用c++写的,感兴趣的可以点GitHub - v8/v8: The official mirror of the V8 git repository
除了对JavaScript性能的大幅提升,v8引擎也提供了“嵌入”的功能,使得开发者也可以在自己的c++程序中使用“嵌入”的v8引擎,从而高效地编译JavaScript,并加入c++的feature。要知道,作为一个底层得多的语言,c++可以实现的feature可要比JavaScript多得多。举例说明,JavaScript本身并没有read这么一个function。然而通过v8,我们可以将其绑定到一个用c++写的read callback上,从而通过JavaScript我们也可以直接加载文件了。

于是,借助于v8种种便利的功能,Node.js诞生了。

Node.js是一项服务器技术。我们都知道客户端提出服务请求,而服务器端负责处理请求并提供服务。而对于互联网来说,在Node.js之前JavaScript是一项完全的客户端技术,被用于浏览器中实现各种动画,对DOM的操作等等。而后端,即服务端则是由PHP、Python、Ruby、Java等等语言来实现。Node.js的出现,使得前后端使用同一种语言,统一模型的梦想得以实现。

所以Node.js到底解决了JavaScript的什么痛点和问题?

  1. 更好的组织代码,提升复用性。当然在ES6中这一点也得到了很大的提升。
  2. 处理文件与数据库。
  3. 与互联网进行沟通,以标准化的格式处理请求并发送回答。
  4. 快速地解决如上问题。

同时,Node.js还带来了许多别的后端技术所不具备,或是不完善的优点,如其他人回答中的事件驱动,异步编程,非阻塞式io等等。JavaScript本身语言的特性,以及其的流行程度与社区活跃度给Node.js带来了各种意义上的优势。

另外可以通过下面的一个小文章更通俗的理解一下:

阅读本帖需要先复习小学语文课文,华罗庚的《统筹方法》。

比如,想泡壶茶喝。当时的情况是:开水没有;水壶要洗,茶壶茶杯要洗;火生了,茶叶也有了。怎么办?
办法甲:洗好水壶,灌上凉水,放在火上;在等待水开的时间里,洗茶壶、洗茶杯、拿茶叶;等水开了,泡茶喝。
办法乙:先做好一些准备工作,洗水壶,洗茶壶茶杯,拿茶叶;一切就绪,灌水烧水;坐待水开了泡茶喝。
办法丙:洗净水壶,灌上凉水,放在火上,坐待水开;水开了之后,急急忙忙找茶叶,洗茶壶茶杯,泡茶喝。
哪一种办法省时间?我们能一眼看出第一种办法好,后两种办法都窝了工。
...
从这个图上可以一眼看出,办法甲总共要16分钟(而办法乙、丙需要20分钟)。
...
看来这是“小题大做”,但在工作环节太多的时候,这样做就非常有必要了。
...
来源: 华罗庚 统筹方法_百度文库

Node.js就是跟华罗庚一伙的,帮助我们更快地沏茶,而且更快地给一帮人沏茶。

我们在用浏览器访问服务器的时候,就好像去茶叶铺买茶喝。我们可以买回来自己沏,也可以在店里自带的茶座儿坐下来喝现成的。

如果我们买回来喝,参考华老师的课文,他自己都说了这是「小题大作」,因为16分钟和20分钟差不了太多,就我们自己和家人,慢生活4分钟也没什么毛病。

但是如果我们在店里喝,那可不是咱一家儿等着。比起16分钟的最少等候时间,第一桌多等4分钟,第二桌要同时来的话得多等24分钟,第三桌站起来走了,20多张桌子都闲着。忙活了半天,茶客不耐烦,茶铺不赚钱。

所以,茶叶铺一定要学好小学课文,不仅对于同一桌的不同请求要统筹安排,别认死理一件事不干完绝不开始下一件,甚至对于不同桌的不同请求也要尽量并行处理,比如等开水时可以帮好几桌点单、拿茶叶、洗茶杯茶壶,水开之前别闲着,水一开就给各桌上茶,让每桌客人都感觉嗖快嗖快的。

在这个故事里,茶叶铺就是网络服务器。我们自己就是浏览器。

我们要是不想浏览器事必躬亲,那就把活扔给服务器干;当服务器一下子服务很多浏览器时就不能认死理非要串行操作要灵活统筹,同时开始几件事,哪件完事关闭哪件。

这三个特征用江湖切口说就叫:

  • 服务器端JavaScript处理:server-side JavaScript execution
  • 非阻断/异步I/O:non-blocking or asynchronous I/O
  • 事件驱动:Event-driven

Node.js就是这样一个服务器端的、非阻断式I/O的、事件驱动的JavaScript运行环境。

所以说,Node.js是华罗庚的路数,帮茶叶铺更快更多地伺候茶客。

这麻利的店小二谁家养的?大家。

因为Node.js是开源的。

node.js就是一个前端觉得写个功能还要等后端捣鼓半天,然后干脆就自己用javascript把后端搞定的一个东西。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值