学习路线二java开发node体验_第1页
学习路线二java开发node体验_第2页
学习路线二java开发node体验_第3页
学习路线二java开发node体验_第4页
学习路线二java开发node体验_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论