- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
我为什么向后端工程师推荐Node.js.pdf
页码,1/6
为什么向后端工程师推荐Node.js
作者 李穆 发布于 2011年8月12 日
科普文一则,说说我对Node.js 的一些认识,以及我作为前端工程师为什么会向后端工程师推荐Node.js 。
“Node.j s 是服务器端的 JavaScript 运行环境,它具有无阻塞(non-blocking)和事件驱动(event-
driven)等的特色,Node.j s 采用V8 引擎,同样,Node.js 实现了类似 Apache 和 nginx 的web服
务,让你可以通过它来搭建基于 JavaScript 的Web App 。”
我想不仅仅是Node.js ,当我们要引入任何一种新技术前都必 要搞清楚几个问题:
1. 我们遇到了什么问题?
2. 这项新技术解决什么问题,是否契合我们遇到的问题?
3. 我们遇到问题的多种解决方案中,当前这项新技术的优势体现在哪儿?
4. 使用新技术,带来哪些新问题,严重么,我们能否解决掉?
我们的问题:Server端阻塞
Node.js 被设计用来解决服务端阻塞问题.下面通过一段简单的代码解释何为阻塞:
Js代码:
//根据ID,在数据库中Persons表中查出Name
var name = db.query(select name from persons where id=1);
//进程等待数据查询完毕,然后使用查询结果。
output(name)
这段代码的问题是在上面两个语句之间,在整个数据查询的过程中,当前程序进程往往只是在等待结果的
返回.这就造成了进程的阻塞.对于高并发,I/O密集行的网络应用中,一方面进程很长时间处于等待状态,
另一方面为了应付新的请求不断的增加新的进程.这样的浪费会导致系统支持QPS远远小于后端数据服务能
够支撑的QPS ,成为了系统的瓶颈.而且这样的系统也特别容易被慢链接攻击(客户端故意不接收或减缓接收
数据,加长进程等待时间) 。
如何解决阻塞问题
可以引入事件处理机制解决这个问题。在查询请求发起之前注册数据加载事件的响应函数,请求发出之后
立即将进程交出,而当数据返回后再触发这个事件并在预定好的事件响应函数中继续处理数据:
Js代码:
//定义如何后续数据处理函数
function onDataLoad(name){
output(name);
}
//发起数据请求,同时指定数据返回后的回调函数
db.query(select name from persons where id=1,onDataLoad);
我们看到若按照这个思路解决阻塞问题,首先我们要提供一套高效的异步事件调度机制.而主要用于处理浏
览器端的各种交互事件的JavaScript 。相对于其他语言,至少有两个关键点特别适合完成这个任务。
页码,2/6
为什么JS适合解决阻塞问题
首先JavaScript是一种函数式编程语言,函数编程语言最重要的数学基础是 演算(lambda calculus) -- 即函数
对象可以作为其他函数对象的 入(参数)和 出(返回值) 。
这个特性使得为事件指定回调函数变得很容易。特别是JavaScript还支持匿名函数。通过匿名函数的辅助,
之前的代码可以进行简写如下:
Js代码:
db.query(select name from persons where id=1,function(name){
output(name);
});
还有另一个关键问题是,异步回调的运行上下文保持(本文暂称其为状态保持)。我们先来看一段代码来说
明何为状态保持:
Js代码:
//传统同步写法:将查询和结果打印抽象为一个方法
function main(){
var id = 1;
var name = db.query(select name from persons where id= + id);
output(person id: + id + , name: + name);
}
main();
前面的写法在传统的阻塞是编程中非常常见,但接下来进行异步改写时会遇到一些困扰:
Js代码:
//异步写法:
function main(){
var i
您可能关注的文档
最近下载
- 华为战略神器“五看三定”模型究竟是什么.doc VIP
- 【PPT课件】2018版安徽省建设工程计价依据宣贯(房建、装饰工程宣贯课件).docx
- 人教版英语八年级下册 Unit 9 Have you ever been to a museum 单元整体教学设计.docx VIP
- 表9.1.7 OPGW光缆安装检验批质量验收记录表.docx VIP
- 尊师惠师工作的创新策略与实施方案.docx
- 《旅游景区服务与管理》教案 第1课 认识旅游景区.pdf VIP
- 2025年宁夏中考语文试题及答案(word版).doc VIP
- 表9.1.3 导线、地线耐张管施工检验批质量验收记录表.docx VIP
- 麻醉术后苏醒延迟病例分析与管理.pptx VIP
- 2025至2030中国儿童口腔护理行业发展趋势与未来销售规模研究报告.docx VIP
文档评论(0)