zoukankan      html  css  js  c++  java
  • 一、认识Node.js

    1、什么是Note.js?

    简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个 Javascript 运行环境(runtime)。它让 JavaScript 可以开发后端程序,实现几乎其他后端
    语言实现的所有功能,可以与 PHP、JSP、Python、Ruby 等后端语言平起平坐。 Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。 Node.js是一个事件驱动I
    /O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

    Nodejs 是基于 V8 引擎,V8 是 Google 发布的开源 JavaScript 引擎,本身就是用于 Chrome 浏览器
    的 JS 解释部分,但是 Ryan Dahl 这哥们,鬼才般的,把这个 V8 搬到了服务器上,用于做服务器的软件。
    短短几年的时间,Node 取得了巨大的成功。在企业界,Node 的应用也越来越广泛,2016 年 nodeJS 官
    方的调查报告。2016 年全球有 350 万开发者使用 nodeJS,相比去年保持了 100%的增长率。像 Yahoo、
    Microsoft 这样的大公司,有好多应用已经迁移到 Node 了。国内的阿里巴巴、网易、腾讯、新浪、百度等
    公司的很多线上产品也纷纷改用 Node 开发,并取得了很好的效果。据统计很多 A 轮、 B 轮的创业公司更
    喜欢使用 NodeJs 开发;

    由于 node.js 引擎跨平台特性,理所当然的在嵌入式平台上运行起来,并且提供了事件
    驱动,非阻塞 I/O 模型,轻量,高效,跨平台等优秀特性,适应了新型物联网嵌入式开发的潮
    流。

    2、Note.js可以干什么?

    如果你是一个前端程序员,你不懂得像PHP、Python或Ruby等动态编程语言,然后你想创建自己的服务,那么Node.js是一个非常好的选择。

    Node.js 是运行在服务端的 JavaScript,如果你熟悉Javascript,那么你将会很容易的学会Node.js。

    当然,如果你是后端程序员,想部署一些高性能的服务,那么学习Node.js也是一个非常好的选择。

    在短短几年多的时间里,Node 变得非常热门,使用者也非常多。这些使用者对于 Node 的
    各自倚重点也各部相同,经过整理,主要有下几类
    • 前后端编程语言环境统一。这类倚重点的代表是雅虎。雅虎开放了 Cocktai 框架,利用
    自己深厚的前端沉淀,将 YUI3 这个前端框架的能力借助 Node 延伸到服务器端,使得使用
    者摆脱了日常工作中一边写 JavaScript—边写 PHP 所帯来的上下文交换负担。
    • Node 带来的高性能 I/0 用于实时应用。Voxer 将 Node 应用在实时语音上。国内腾讯的
    朋友网将 Node 应用在长连接中,以提供实时功能,花瓣网、蘑菇街等公司通过 socket.io 实
    现实时通知的功能。
    • 并行 I/0 使得使用者可以更高效地利用分布式环境。阿里巴巴 eBay 是这方面的典型。
    阿里巴巴的 NodeFox 和 eBay 的 ql.io 都是借用 Node 并行 I/O 的能力,更高效地使用已有的
    数据。
    • 并行 I/O •有效利用稳定接口提升 Web 渲染能力。雪球财经和 Linkedln 的移动版网站均
    是这种案例,撇弃 同步等待式的顺序请求,大胆采用并行丨/〇,加速数据的获取进而提升
    Web 的渲染速度。
    • 云计算平台提供 Node 支持。微软将 Node 引入 Azure 的开发中,阿里云、百度均纷纷
    在云服务器上提供 Node 应用托管服务,Joyent 更是云计算中提供 Node 支持的代表。这类
    平台看重 JavaScript 带来的开发上的优势,以及低资源占用、高性能的特点。
    • 游戏开发领域。游戏领域对实时和并发有很高的要求,网易开源了 pomelo 实时框架,
    可以应用在游戏和高实时应用中。
    • 工具类应用。过去依赖 java 或其他语言构建的前端工具类应用,纷纷被一些前端工程
    师用 Node 重写,用前端熟悉的语言为前端构建熟悉的工具。

    3、Node.js的优势

    1.NodeJs 语法完全是 js 语法,只要你懂 JS 基础就可以学会 Nodejs 后端开发。

    Node 打破了过去 JavaScript 只能在浏览器中运行的局面。前后端编程环境统一,可以大大降低开发
    成本

    2.NodeJs 超强的高并发能力。

    Node.js 的首要目标是提供一种简单的、用于创建高性能服务器及可在该服务器中运行的各种应用程
    序的开发工具。
    首先让我们来看一下现在的服务器端语言中存在着什么问题。 在 Java、PHP 或者.net 等服务器端语言
    中,会为每一个客户端连接创建一个新的线程。而每个线程需要耗费大约 2MB 内存。也就是说,理论上,
    一个 8GB 内存的服务器可以同时连接的最大用户数为 4000 个左右。要让 Web 应用程序支持更多的用户,就
    需要增加服务器的数量,而 Web 应用程序的硬件成本当然就上升了。
    Node.js 不为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户连接了,就触发一个
    内部事件,通过非阻塞 I/O、事件驱动机制,让 Node.js 程序宏观上也是并行的。使用 Node.js,一个 8GB
    内存的服务器,可以同时处理超过 4 万用户的连接。

    3.实现高性能服务器

    严格地说,Node.js 是一个用于开发各种 Web 服务器的开发工具。在 Node.js 服务器中,运行的是高性能 V8
    JavaScript 脚本语言,该语言是一种可以运行在服务器端的 JavaScript 脚本语言。
    那么,什么是 V8 JavaScript 脚本语言呢?该语言是一种被 V8 JavaScript 引擎所解析并执行的脚本语言。V8
    JavaScript 引擎是由 Google 公司使用 C++语言开发的一种高性能 JavaScript 引擎,该引擎并不局限于在浏览
    器中运行。Node.js 将其转用在了服务器中,并且为其提供了许多附加的具有各种不同用途的 API。例如,
    在一个服务器中,经常需要处理各种二进制数据。在 JavaScript 脚本语言中,只具有非常有限的对二进制数
    据的处理能力,而 Node.js 所提供的 Buffer 类则提供了丰富的对二进制数据的处理能力。
    另外,在 V8 JavaScript 引擎内部使用一种全新的编译技术。这意味着开发者编写的高端的 JavaScript 脚本代
    码与开发者编写的低端的 C语言具有非常相近的执行效率,这也是 Node.js 服务器可以提供的一个重要特性。

    4.开发周期短、开发成本低、学习成本低。

    Node.js 自身哲学,是花最小的硬件成本,追求更高的并发,更高的处理性能。
    官网:https://nodejs.org/en/
    特点:Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and
    efficient.

     4、Note.js的历史(有兴趣的了解一下)

    众所周知,在Netscape设计出JavaScript后的短短几个月,JavaScript事实上已经是前端开发的唯一标准。

    后来,微软通过IE击败了Netscape后一统桌面,结果几年时间,浏览器毫无进步。(2001年推出的古老的IE 6到今天仍然有人在使用!)

    没有竞争就没有发展。微软认为IE6浏览器已经非常完善,几乎没有可改进之处,然后解散了IE6开发团队!而Google却认为支持现代Web应用的新一代浏览器才刚刚起步,尤其是浏览器负责运行JavaScript的引擎性能还可提升10倍。

    先是Mozilla借助已壮烈牺牲的Netscape遗产在2002年推出了Firefox浏览器,紧接着Apple于2003年在开源的KHTML浏览器的基础上推出了WebKit内核的Safari浏览器,不过仅限于Mac平台。

    随后,Google也开始创建自家的浏览器。他们也看中了WebKit内核,于是基于WebKit内核推出了Chrome浏览器。

    Chrome浏览器是跨Windows和Mac平台的,并且,Google认为要运行现代Web应用,浏览器必须有一个性能非常强劲的JavaScript引擎,于是Google自己开发了一个高性能JavaScript引擎,名字叫V8,以BSD许可证开源。

    现代浏览器大战让微软的IE浏览器远远地落后了,因为他们解散了最有经验、战斗力最强的浏览器团队!回过头再追赶却发现,支持HTML5的WebKit已经成为手机端的标准了,IE浏览器从此与主流移动端设备绝缘。

    浏览器大战和Node有何关系?

    话说有个叫Ryan Dahl的歪果仁,他的工作是用C/C++写高性能Web服务。对于高性能,异步IO、事件驱动是基本原则,但是用C/C++写就太痛苦了。于是这位仁兄开始设想用高级语言开发Web服务。他评估了很多种高级语言,发现很多语言虽然同时提供了同步IO和异步IO,但是开发人员一旦用了同步IO,他们就再也懒得写异步IO了,所以,最终,Ryan瞄向了JavaScript。

    因为JavaScript是单线程执行,根本不能进行同步IO操作,所以,JavaScript的这一“缺陷”导致了它只能使用异步IO。

    选定了开发语言,还要有运行时引擎。这位仁兄曾考虑过自己写一个,不过明智地放弃了,因为V8就是开源的JavaScript引擎。让Google投资去优化V8,咱只负责改造一下拿来用,还不用付钱,这个买卖很划算。

    于是在2009年,Ryan正式推出了基于JavaScript语言和V8引擎的开源Web服务器项目,命名为Node.js。虽然名字很土,但是,Node第一次把JavaScript带入到后端服务器开发,加上世界上已经有无数的JavaScript开发人员,所以Node一下子就火了起来。

    在Node上运行的JavaScript相比其他后端开发语言有何优势?

    最大的优势是借助JavaScript天生的事件驱动机制加V8高性能引擎,使编写高性能Web服务轻而易举。

    其次,JavaScript语言本身是完善的函数式语言,在前端开发时,开发人员往往写得比较随意,让人感觉JavaScript就是个“玩具语言”。但是,在Node环境下,通过模块化的JavaScript代码,加上函数式编程,并且无需考虑浏览器兼容性问题,直接使用最新的ECMAScript 6标准,可以完全满足工程上的需求。

    我还听说过io.js,这又是什么鬼?

    因为Node.js是开源项目,虽然由社区推动,但幕后一直由Joyent公司资助。由于一群开发者对Joyent公司的策略不满,于2014年从Node.js项目fork出了io.js项目,决定单独发展,但两者实际上是兼容的。

    然而中国有句古话,叫做“分久必合,合久必分”。分家后没多久,Joyent公司表示要和解,于是,io.js项目又决定回归Node.js。

    具体做法是将来io.js将首先添加新的特性,如果大家测试用得爽,就把新特性加入Node.js。io.js是“尝鲜版”,而Node.js是线上稳定版,相当于Fedora Linux和RHEL的关系。

    本章教程的所有代码都在Node.js上调试通过。如果你要尝试io.js也是可以的,不过两者如果遇到一些区别请自行查看io.js的文档。

    补充:Note和嵌入式开发

    物联网嵌入式开发现状和困境我们知道,物联网嵌入式开发都是以具体的求功能代码,开发上特点也很鲜明:a、入门门槛较高,知识点非常零散b、平台依赖很强,换平台比较痛苦。c、开发中出现的问题较难定位,往往涉及到多个技术层d、公司多选择闭源,对整体软硬件生态的贡献接近于零e、实践多于理论,此领域的大牛多是不断的编程、验证没有捷径。嵌入式开发的这些特点就注定了它的神秘、难度大拒绝更简单的语言、更友好的封装、更易用的平台的。

    今后的新型物联网嵌入式,开发方式一定是朝着抽象化、简单化、层次化的方向衍变,
    并且可能会派生出更多类似 node.js 的平台,我也相信国内会有更多的开源爱好者加入到新型
    物联网嵌入式的开发潮流,为整体软硬件生态做出更多贡献

  • 相关阅读:
    jmeter学习笔记(二)
    jmeter学习笔记(一)
    让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法
    Fiddler抓包
    76. 最小覆盖子串
    Map中getOrDefault()与数值进行比较
    阻塞非阻塞与同步异步的区别
    81. 搜索旋转排序数组 II
    49. 字母异位词分组
    48. 旋转图像
  • 原文地址:https://www.cnblogs.com/luzhanshi/p/10708670.html
Copyright © 2011-2022 走看看