为什么会有NodeJS之一

CentOS安装NodeJS 如何在CentOS上安装NodeJS 阅读详情

更多内容参考我基于NodeJS搭建的新博客:http://ramonblog.cloudfoundry.com/


其实这个问题是最为复杂最为不容易回答的。最开始都只是学习Hello World,然后觉得入门了,开始熟悉了,会用了。但是始终不明白为什么NodeJS会产生,什么时候用NodeJS,用它有什么利弊?尤其是在这个已经各种技术蜂涌而且成熟的时候。经过一段时间的学习,开始反思这些问题。

为什么会有NodeJS

比较笼统的回答是:

  1. NodeJS可以让Javascript提供服务器端的功能,从而使得客户端和服务器端的开发都统一在Javascript之下。明显的就是,对于一个对象,如Person Profile的验证不需要客户端和服务器端实现两套。如Java环境下,服务器端用Java实现验证,在客户端用Javascript实现验证。

  2. NodeJS是基于事件的,不像已有的Web服务器,是基于线程的,即每个请求Request都有一个独立的线程为之服务,这样的情况下一旦同时请求很多,则线程很多,每个线程都需要有各种开销,如内存,CPU等。由于每个请求主要消耗的时间都在访问数据库、文件之类的IO操作,这些操作都是同步的,线程都得等。再则线程之间的切换也是需要时间。总之这种线程模型会导致服务器会变慢。而NodeJS则是事件驱动(event driven),只有一个主进程接收各种请求,每个请求只是简单分配,这个很快,当处理耗时的IO操作时,NodeJS采用异步的方式,也就是说主进程不会等IO操作完成,而是直接返回继续进行请求分配,等IO操作完成的时候再通知主进程进行处理。

对于上面的解释并不能让人信服:

  1. 语言统一有很大的吸引力吗?这么多年下来,服务器端的技术已经相当成熟,譬如Java,很多人已经在各种非常优秀地IDE下非常熟练、高效地使用。而且Java和Javascript都是很容易学习的,尤其时对于优秀的程序员来说,这更加不是问题。即便这个是理由,也有很多其他的方法来解决。譬如用GWS。

  2. 最大的疑问是所谓的事件驱动是如何实现的?对于像Swing之类的UI框架来说,一个事件分发线程负责处理事件分发和画图,还有就是用于处理复杂耗时任务的工作线程,这些线程都是在事件分发线程中新建的,目的是避免事件分发线程消耗太多时间在跟图形界面更新无关的任务处理上,那样会导致界面假死。而对于Swing的事件处理机制,我的感觉是这样的,有一个统一的EventQueue用来存储各种事件,然后事件分发线程只负责分发这些事件以及更新图形界面,但是每个事件对应可能要处理耗时的任务则是新开线程来处理。这么说来线程的总数应该是1+n。对于NodeJS的事件驱动,如果也是用这种方法来实现,那么意味着每个request还是有可能对应一个或者多个线程的。这么看来并不见的比多线程模型要来得效率高。


    有一篇不错的文章http://andrewbrobinson.com/2012/01/27/why-are-event-driven-servers-so-great/对比了基于线程和基于事件模型的Web服务器,但是还是不够深入。至于在Youku上搜到国内关于NodeJS的讨论更加只是泛泛而谈。

也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离) 随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本。为了提升开发效率,前后端分离的需求越来越被重视,后端负责业务/数据接口,前端负责展现/交互逻辑,同一份数据接口,我们可以定制开发多个版本。 这个话题最近被讨论得比较多,阿里有些BU也在进行一些尝试。讨论了很久之后,我们团队决定探 阅读详情

相关推荐

高分辨率航拍图像的目标检测切图优化策略

本文深入探讨了高分辨率航拍图像目标检测中的切图优化策略。针对大尺寸图像直接缩放导致小目标信息丢失的问题,文章详细阐述了基于重叠切割的核心方法,包括如何根据目标尺寸确定切图尺寸与重叠率,并提供了从切图到坐标还原的完整代码实现与避坑指南,有效提升检测精度与效率。

xk7n92h3p5m的博客 1113

Node.js的诞生

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境。JavaScript语言以前在浏览器端被解释并运行,而。由此带动大批前端开发人员投入到后端开发中来,转为全栈工程师。

JL_L666的博客 576

SPSS因子分析实战:从数据清洗到结果解读的完整流程

本文提供了一份详尽的SPSS因子分析实战指南,涵盖从数据清洗、适用性检验(KMO与巴特利特检验)、公因子提取、因子旋转到结果解读与报告撰写的完整流程。通过具体案例,手把手教你如何利用SPSS进行探索性因子分析,实现数据降维并提炼核心公共因子,适用于市场研究、心理学等多变量数据分析场景。

weixin_29055699的博客 329

为什么要使用 Node.js

这是一个移动端工程师涉足前端和后端开发的学习笔记,如有错误或理解不到位的地方,万望指正。 Node.js 是什么 传统意义上的 JavaScript 运行在浏览器上,这是因为浏览器内核实际上分为两个部分:渲染引擎和 JavaScript 引擎。前者负责渲染 HTML + CSS,后者则负责运行 JavaScript。Chrome 使用的 JavaScript 引擎是 V8,它的速度非常快。 ...

weixin_34174422的博客 756

C300 | 5680t | 新格林| AN5516 | 远程ONU升级指导

ONU的远程管理升级 1、ZTE C300 OLT : 1.1 环境拓扑: PC1(filezilla server)------(uplink_default-vlanID)OLT---------ONU | | mng1 1.2 配置部署: 1):PC1(filezilla server): IP:192.168.88.252 255.255.255.0 配置FTP-Server的用户名:gp...

Shelly的博客 3770

波束管理 Beam Management

Beam Management in 5G NR   波束管理,是5G NR中基于信道质量来动态选择每个UE和gNB之间以什么方向和频率的波束beam来进行通信。   背景   5G NR(New Radio)支持非常高的数据速率和更低的延迟。5G NR支持FR1和FR2频段,FR1为亚6 GHz(450至6000 MHz);FR2为毫米波段(24.25 GHz至52.6 GHz)。   由于毫米波频带使用非常高的频率,因此会导致传播损耗和其他损耗。为了补偿损失,在这种频率下定向通信是必不可少的。

最忆是江南的博客 5826

node.js的前世今生 (诞生记)

任何技术的诞生都不会凭空出现,都是有相应的历史起源发展 和经历 下面我们先来看下这位老哥 Node.js 之父 Ryan Dahl Ryan Dahl 现在是 Google Brain 的一个软件工程师。他是 Node.js 之父现在他从事深度学习研究项目,工作重点是彩色化和超分辨率等图像转换工作。他曾经贡献过几个开源项目,包括 HTTP Parse、libuv node的诞...

qq_24884955的博客 2902

银河麒麟arm64 V10 SP1桌面系统高效部署onnxruntime推理环境实战

本文详细介绍了在银河麒麟arm64 V10 SP1桌面系统上高效部署onnxruntime推理环境的完整实战流程。从系统环境准备、关键依赖安装,到onnxruntime的安装验证,并以YOLOv5模型部署为例进行性能对比分析,提供了在国产化飞腾D2000平台上进行AI边缘推理的实用指南和避坑技巧。

ss78901的博客 636

84、nodejs

1、nodejs产生的原因 在nodejs出现之前,javascript主要应用于浏览器端; Node第一次把JavaScript带入到后端服务器开发,它还提供了运行引擎与相关API,所以nodejs是javascript开发本地应用、服务器应用的一个开发套件; 注意了,因为nodejs采用了javascript的语法,所以nodejs不是一种开发语言。 2、浏览器端JS和Node端JS的区别 (1)相同点:就是都使用了Javascript这门语言来开发。 (2)不同点: 浏览器端的JS,受制于

sunnnnh的博客 242

博途S7-1500T 使用工艺对象驱动液压轴(含SimaHydTO库)

利用工艺对象控制液压轴位置含PLC控制和仿真程序文档资料下载地址如下:液压比例伺服阀的相关应用知识请参看下面的博客文章:液压位置闭环控制(比例伺服阀应用)_RXXW_Dor的博客-优快云博客。

RXXW_Dor的博客 2896

Linux驱动学习--HCI框架及源码分析

目录 一、引言 二、HCI框架 三、pcm_read简要分析 一、引言 最近一直在分析蓝牙驱动,发现在底层驱动与上层协议栈间还有一层HCI,主机控制层,两者之间通过HCI协议通讯 而Linux也将HCI协议抽象层了一个框架。 为上层提供一个统一的接口,让上层协议不依赖于具体硬件的实现。HCI在硬件中的固件与HCI在主机端的驱动通信方式有多种,比如像 UART、USB和PC Card等等。hci_core.c相当于一个框架,用于把各种具体通信方式绞合起来,并提供一些公共函数的实现。 今天就来简单的分析一下 二

文艺小少年的博客 2002

Node.js的解释

Node.js 是一个基于 JavaScript 的开源服务器端运行时环境,允许开发者用 JavaScript 编写服务器端代码。与传统的前端 JavaScript 主要运行在浏览器端不同,Node.js 通过提供一个非阻塞的异步模型,允许开发者在服务器端创建高性能的网络应用程序。想象你把 JavaScript 看作是一个厨师,传统的 JavaScript 是只在“厨房”(浏览器)里工作的,而 Node.js 则是让这个厨师可以走出厨房,在餐馆的大厅、后台和仓库(服务器)中工作,从而大大提高工作效率。

HYP_Coder的博客 2647

化工过程控制软件:Siemens PCS 7二次开发_(8).过程控制算法

在化工过程控制中,过程控制算法是实现自动化控制的关键技术之一。Siemens PCS 7 提供了丰富的控制算法库,但为了满足特定的工艺需求,往往需要进行二次开发。本节将详细介绍如何在 Siemens PCS 7 中进行过程控制算法的二次开发,包括常见的控制算法原理、实现方法和具体示例。

kkchenjj的博客 502

Nodejs安装及配置

Nodejs的安装及配置详细教程 本文更新于2020-12-2,如果时间太久已失效,请留言 本教程使用虚拟机全新环境进行演示,如未安装过Nodejs几乎100%安装配置成功,如未成功,请洗脸重试~ 下载Nodejs 进入Nodejs官网https://nodejs.org/zh-cn/ 选择下载最新版,也可以选择稳定的版本,个人喜欢用新的 安装Nodejs 双击下载的安装包 点击Next,开始进入安装 勾选 I accept the terms in the License

3万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

为什么是NodeJs?Why NodeJs?

——《深入浅出NodeJs》第一二章解读 现在在中后台,越来越多的公司选择使用NodeJs,Why NodeJs? 从我看来,第一点是NodeJs使用JavaScript编写,对于熟悉JS的前端工程师极其友好。第二点,NodeJs依托于Google的V8引擎,相比于Python,PHP等后端常用语言,NodeJs的算力速度远快于它们。第三点,NodeJs拥有libuv线程池,专门用于异步处理I/O...

Chic_Chen的博客 649

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

为什么要使用NodeJS

科普文一则,说说我对NodeJS(一种服务端JavaScript实现)的一些认识,以及我为什么会向后端工程师推荐NodeJS.          "Node.js 是服务器端的 JavaScript 运行环境,它具有无阻塞(non-blocking)和事件驱动(event-driven)等的特色,Node.js 采用 V8 引擎,同样,Node.js 实现了类似 Apache 和 ngi

wangqz1027的专栏 772

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

NodeJS系列之一:NodeJS入门介绍

一:什么是NodeJS 1.官方解释:Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 2.自我理解:     NodeJS是使用C++开发的,它是JS运行平台(运行环境)它采用的语法是JavaScript语法。JS是一种脚本语言,那么就需要一个解析器去解析运行,对于在浏览器网页中的JS,浏览器充当了解析器角色...

卜小娴的博客 567

我们为什么要使用NodeJS

文章出处https://www.cnblogs.com/xcsn/p/4390333.html科普文一则,说说我对NodeJS(一种服务端JavaScript实现)的一些认识,以及我为什么会向后端工程师推荐NodeJS.         "Node.js 是服务器端的 JavaScript 运行环境,它具有无阻塞(non-blocking)和事件驱动(event-driven)等的特色,Nod...

Martin的专栏 4094

NodeJS什么都能做,为什么还要JAVA?

这张图看起来简单而且很好理解,但没尝试过,会有很多疑问。   SPA模式中,后端已供了所需的数据接口,view前端已经可以控制,为什么要多加NodeJS这一层?   多加一层,性能怎么样?   多加一层,前端的工作量是不是增加了?   多加一层就多一层风险,怎么破?   NodeJS什么都能做,为什么还要JAVA?   这些问题要说清楚不容易,下面说下我的认识过程。   3.2为什么...

weixin_30566111的博客 1125

【NodeJS】认识NodeJS

认识NodeJS 零. 学习NodeJS的意义 了解客户端游览器和服务端后台的交互过程。 一. 什么是NodeJS NodeJS官网: https://nodejs.org/en / http://nodejs.cn 一个基于Chrome v8引擎的一个JavaScript运行环境。作用是让JS有开发服务端的功能 Node使用事件驱动、非阻塞IO模型(异步读写)使其非常轻量和高效 Node中绝大数API都是异步 NPM是世界上最大的开源库生态系统(类似于GitHub) 二. NodeJS的环境

Calaxh的博客 824

Pipeline工程配置NodeJS环境

参考Jenkins Starting with Pipeline doing a Node.js test,配置NodeJS开发环境 插件 首先下载NodeJS插件,进入Manage Jenkins -> Manage Plugins -> Available,搜索NodeJS插件并安装 配置 插件安装完成后,进入Manage Jenkins -> Global Tool Configuration,会出现NodeJS的配置选项 点击NodeJS Insllation,设置Name属性

西西工作室 2744

NodeJS入门(一)---nodejs详细安装步骤

参考文章:http://www.lvtao.net/content/book/node.js.htm#1.5

u010255310的博客 12万+

NodeJS的模块系统

A、CommonJS是一套代码规范,目的是为了构建JavaScript在浏览器之外的生态系统(服务器端,桌面端)B、CommonJS的主要内容a、模块必须通过module.exports导出对外的变量或接口b、通过require()来导入其他模块的输出到当前模块作用域中(模块一般在文件的顶部导入)。...

Yannick_H的博客 1217

把你的NodeJS程序给没有NodeJS的人运行

编者按:本文作者刘观宇,360 奇舞团高级前端工程师、技术经理,W3C CSS 工作组成员。标题很绕口,不过确实是一个很常见的需求。众所周知,NodeJS程序开发简便且容...

奇舞周刊 748

NodeJS后台

NodeJS后台 后台: 1.PHP 2.Java 3.Python 优势 1.性能 2.跟前台JS配合方便 3.NodeJS便于前端学习 https://nodejs.org/en/ 1.切换盘符 e: 2.改变目录 cd 目录名 3.执行程序 node xxx.js const http = require('http'); http.createServer(function(req...

程序员哆啦A梦,蓝胖子 3244
上一篇: 定时发送发送邮件
下一篇: NSURLConnection异步请求
llmlx
博客等级 码龄23年 15粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值