版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Node.js 开发体验byQLeeluluNode.js is a platform built on Chrome's JavaScript runtime for easily buildingfast, scalable network applications.Node.js uses an event-driven,non-blocking I/O mthat makes itlightweight and efficient, perfectfor data-intensive real-time applications that run across distribu
2、ted devices.node.js单线程非阻塞 IOV8?1.2.3. 4.驱动5.服务器端 JSHelloWorld$ node example.js编程思想的改变/node.jsvar data; fs.readFile('file.txt',function(err, data) data = data;);doSomething(data);/传统代码var file = open('file.txt');var data = file.read(); doSomething(data);异步与回调可读性/传统的代码var user = db.use
3、r.get('name');var post = db.post.get(user.id);var tags = db.tags.get(post.id);/异步回调方式db.user.get('name', function(err, user)if(err) throw err;db.post.get(user.id, function(err, post)if(err) throw err;db.tags.get(post.id, function(err, tags)if(err) throw err;/doWithResults(););););/传统
4、代码var value = Memcache.get('key');if(!value)value = db.get('key'); Memcache.set('key', value);/ 对value进行处理/异步回调方式function doWithValue(value)/ 对value进行处理Memcache.get('key', function(err, value)if(value) doWithValue(value);elsedb.get('key', function(err, value)
5、Memcache.set('key', value); doWithValue(value);););原来流程清晰的代码, 可读性差了,流程看起来也有点乱了解决方案封装代码“ 编译”Jscexstreamline.js辅助函数Async.js Flow-JSEventProxyAsync示例代码async.series(one: function(callback) setTimeout(function()callback(null, 1);, 200);,two: function(callback) setTimeout(function()callback(null,
6、2);, 100);,function(err, results) / results is now equal to: one: 1, two: 2);其实吧,只是权宜之计Flow control / Async goodiesCoroutine( 协程 )?Cooperative threading of any sort is a bad idea.-ryjsconf2010 讨论:并行博客首页:var data = ;/ 获取最新10篇博客文章db.getPosts(10, function(err, posts)data.posts = posts;);/ 获取最新10条评论db.g
7、etComments(10, function(err, comments)ments = comments;);/ 获取Tags列表db.getTags(function(err, tags)data.tags = tags;);/ view.render(data);注: db 的都为异步操作并行获取数据很好很强大,怎么知道全部数据都获取完了呢?function Combo(callback) this.callback = callback; this.items = 0;Ctotype = add: function () this.items+;,finishOne:
8、 function () this.items-;this.check();,check: function()if (this.items = 0) this.callback.apply(this);并行辅助函数改自:var data = ;var combo = new Combo(function() view.render(data);最终回调);/ 获取最新10篇博客文章combo.add();db.getPosts(10, function(err, posts) data.posts = posts;combo.finishOne(););/ 获取最新10条评论combo.ad
9、d();db.getComments(10, function(err, comments) ments = comments; combo.finishOne(););/ .Combo 示例代码?文章那契数这么坑爹?V8与 单线程线程模型红色线代表的异步操作返回时,会发生什么情况 呢? 主线程从左到右同时表示时间线 旁边的箭头代表异步操作 主线的色块代表异步操作返回后,执行代码所需的时间vart;functionloop()t = Date.now();for(var i=0; i<10000*100000;i+)/console.log(i);functionhello()conso
10、le.log(Date.now()-t)+'ms');setTimeout(loop,100);setTimeout(hello, 100);vart;functionloop()t = Date.now();for(var i=0; i<10000*100000;i+)/console.log(i);functionhello()console.log(Date.now()-t)+'ms');setTimeout(loop,100);setTimeout(hello, 100); 主线程代码同步串行执行 同一时间只有一个回调函数在执行 异步回调会放到主线
11、程的执行队列中,如果主线执行其他代码,则等待调度,否则马上执行高并发环境下呢?var http = require('http'); http.createServer(function (req, res) for(var i=0; i < 100*100000; i+) res.writeHead(200); res.end('Hello World');).listen(8080, "");var http = require('http'); http.createServer(function
12、 (req, res) for(var i=0; i < 100*100000; i+) res.writeHead(200); res.end('Hello World');).listen(8080, "");Web Worker ?耗 CPU 的操作放到 worker 中, 不阻塞主进程多 CPU 支持child_process.fork() cluster.fork()异常处理var fs = require('fs');tryfs.readFile('noFile',function(err,
13、 data) if (err) throw err; console.log(data););catch(e) console.log('error');如果异步回调中抛出异常会?异步回调函数外部 ,无法捕获到异步回调函数内部的异常process.on('uncaughtException', fn)可以捕获到任何未捕获的异常保证服务正常,没有了上下文变量process.on('uncaughtException', function (err) log(err););http.createServer(function(req, res)try mvcHandler(req, res);catch(e) res.writeHead(200); res.end('Server Error');).listen(8080, "");在异步回调函数内部, 一定要做好异常处理!调试ECMAScript5ArrayindexOf(),lastIndexOf(),forEach(),map(),reduce(),filter(),every(), some()JSONJSON.parse(),
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《小学生文明就餐》课件
- 熟食门店卤制品保鲜储存合规管理规范
- 市政工程夏季高温施工管控课件
- 2026年秋冬季流感预防:疾控人员假期出行防护学习课件
- 2026年秋冬季流感科学防控之公共场所管理者家校协同防护宣传课件
- 2026年三字话考试试题及答案解析
- 2026年正高面审答辩
- 2026年适航与维修试题及答案
- 学前教育的基本要素
- 工业品营销赢在信任李洪道
- 2026广西壮族自治区交通运输厅直属事业单位重点领域急需紧缺高层次人才招聘39人考试备考题库及答案详解
- 2025-2026 学年七年级上期末语文试卷
- 融资渠道2026年融资咨询服务合同
- 2026成人高考专升本语文模拟测试试题及答案
- 2026秋统编版(新教材)九年级历史上册(全册)每课核心知识点清单梳理
- 2026秋小学统编版道德与法治五年级上册教学计划含进度表
- 工程项目部绩效考核实施细则
- GA/T 1999.3-2025道路交通事故车辆速度鉴定方法第3部分:基于视频图像
- brc内审员考试试题及答案
- 2026年联通考试试题及答案
- 云梯车安全专项施工方案
评论
0/150
提交评论