• Node.js实战(一)之概述


    一、Node.js介绍

    Node.js是一个Javascript运行环境(runtime environment),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。Node.js 不是一个 JavaScript 框架,不同于CakePHPDjangoRails。Node.js 更不是浏览器端的库,不能与 jQuery、ExtJS 相提并论。Node.js 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHPPythonPerlRuby 等服务端语言平起平坐的脚本语言 [1] 
    Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。V8引擎执行Javascript的速度非常快,性能非常好。 [2]  Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用(引用百度百科介绍)。
     
    Node.js官网:https://nodejs.org/en/
    Node.js文档地址:https://nodejs.org/en/docs/
     
    通过上面的介绍我们可以将Node.js的特点归纳为这么几个?
     
    (1)它是一个Javascript运行环境;

    (2)依赖于Chrome V8引擎进行代码解释;

    (3)事件驱动;

    (4)非阻塞I/O;

    (5)轻量、可伸缩,适于实时数据交互应用;

    (6)单进程,单线程;

     
    二、安装
     
    安装地址为:https://nodejs.org/en/download/
     
    根据不同系统可以选择对应的版本,如下图所示:

    windows的安装很简单,几乎是一键安装下一步下一步这样的,至于Linux的话,以Ubuntu16.04为例,sudo apt-get install nodejs和 sudo apt-get install nodejs-legacy输入这两条命令即可安装成功。

    三、Node.js的应用场景

    参考该篇博文:https://www.cnblogs.com/gassnake999/p/7044583.html

    应用场景一共15个,如下所示:

    (1) Web开发:Express + EJS + Mongoose/MySQL;

    (2) REST开发:Restify;

    (3)Web聊天室(IM):Express + Socket.io;

    (4) Web爬虫:Cheerio/Request;

    (5)Web博客:Hexo;

    (6)Web论坛: nodeclub;

    (7)Web幻灯片:Cleaver

    (8)前端包管理平台: bower.js

    (9)OAuth认证:Passport

    (10)定时任务工具: later

    (11)浏览器环境工具: browserify;

    (12)命令行编程工具:Commander

    (13) Web控制台工具: tty.js;

    (14)客户端应用工具: node-webkit

    (15)操作系统: node-os

    其实还有更多只不过本文并没有列举出来,总而言之,只有想不到没有做不到。

     
    四、Node.js的优缺点
     
    主要参考:https://www.cnblogs.com/lsgxeva/p/7993271.html

    优点:

    (1)高并发(最重要的优点);

    (2)适合I/O密集型应用;

    缺点:

    (1)不适合CPU密集型应用,CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;

    解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起;

    (2)只支持单核CPU,不能充分利用CPU;

    (3)可靠性低,一旦代码某个环节崩溃,整个系统都崩溃;

    原因:单进程,单线程

    解决方案:

    a.Nnigx反向代理,负载均衡,开多个进程,绑定多个端口;

    b.开多个进程监听同一个端口,使用cluster模块;

    (4)开源组件库质量参差不齐,更新快,向下不兼容;

    (5)Debug不方便,错误没有stack trace;

  • 相关阅读:
    ES6 对Math对象的扩展
    ES6 对Number的扩展
    monolog 应该是世界上最好的日志插件了
    ES6 解构赋值的常见用途,很强大
    ES6 对象的解构赋值
    ES6 数组的解构赋值
    ES6 const
    laravel相关插件
    c++ 库 boost安装
    Eclipse ftp插件
  • 原文地址:https://www.cnblogs.com/youcong/p/10163881.html
Copyright © 2020-2023  润新知