Node.js在淘宝的应用实践_第1页
Node.js在淘宝的应用实践_第2页
Node.js在淘宝的应用实践_第3页
Node.js在淘宝的应用实践_第4页
Node.js在淘宝的应用实践_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

Node在淘宝的应用实践这些年,我们一起开发过的Node.jsBy@朴灵1关于我CNode社区前端atSAPforMobileWeb前端at淘宝数据产品部连IE6都能兼容的男人2议程我为什么要做Node开发准备工作与作品Node.js带来的新问题与如何逆袭异步编程缓存与内存BufferNode.js在淘宝产品中的一点实践3长达半天的欢乐4前端屌丝的坎坷路iconspoweredbymorchadesignNode与前端的亲缘5Node与前端的亲缘6左手HTML5右手Node.js熟知的JavaScript执行原理/事件循环熟悉的API、事件、单线程、回调Ajax/异步相比HTML5,Node将开启更多的可能性7好奇心&满足感HTTP协议栈:深入后端,反哺前端StatuscodeCookie&SessionRequest&ResponseWebFramework高性能JavaScript平台拓宽视野8Go,go,go!!!9varhttp=require('http');http.createServer(function(req,res){res.writeHead(200,{'Content-Type':'text/plain'});res.end('HelloWorld\n');}).listen(1337,'');console.log('Serverrunningat:1337/');%nodeexample.jsServerrunningat:1337/作品10全JavaScript堆栈的产品WebGhostShouldWebGhostMongoSkinITierRedis&MRedisConnect11前端工程师到Web工程师12结果重了10斤如何摆脱前端屌丝的身份让女神青睐$.get("template",function(template){//something$.get("data",function(data){//something$.get("l10n",function(l10n){//somethingrender(template,data);});});});问题:异步协作嵌套还是并行?13varproxy=newEventProxy();proxy.all("template","data","l10n",render);$.get("template",function(template){//somethingproxy.trigger("template",template);});$.get("data",function(data){//somethingproxy.trigger("data",data);});$.get("l10n",function(l10n){//somethingproxy.trigger("l10n",l10n);});问题:异步还是同步复杂的异步编程varproxy=newEventProxy();varstatus="ready";var_getFile=function(callback){proxy.once("template",callback);if(status==="ready"){fs.readFile("views/index.html",function(err,file){status="pending";proxy.fire("template",err,file);});}};var_template;vargetTemplate=function(callback){if(_template){callback(null,_template);}else{_getFile(function(err,file){if(!err&&!_template){_template=file.toString();}callback(null,_template);});}};同步+缓存,妥妥滴varview=fs.readFileSync("../views/index.html","utf8");14问题:缓存的使用varmap={};varget=function(key){returnmap[key];};varset=function(key,value){map[key]=value;};//检查缓存if(!get(key)){//从数据库或别的地方获取了对象后,放进缓存中set(key,value);}varLimitableMap=require('limitablemap');varmap=newLimitableMap(1000);map.set("key1","key1");map.get("key1");15问题:SessionV8内存堆栈限制分布式中,Session需要共享(Redis)重启应用不丢失session多点Redis,备份容灾16问题:Buffer对象vardata="";res.on('data',function(chunk){//chunk是一个Buffer对象data+=chunk;//隐藏的toString()}).on("end",function(){//对data转码});17//正确的方法varchunks=[];varsize=0;res.on('data',function(chunk){chunks.push(chunk);size+=chunk.length;});res.on('end',function(){vardata=null;switch(chunks.length){case0:data=newBuffer(0);break;case1:data=chunks[0];break;default:data=newBuffer(size);for(vari=0,pos=0,l=chunks.length;i<l;i++){varchunk=chunks[i];chunk.copy(data,pos);pos+=chunk.length;}break;}});//简单且正确的方法varbufferHelper=newBufferHelper();req.on("data",function(chunk){bufferHelper.concat(chunk);}).on('end',function(){varhtml=bufferHelper.toBuffer().toString();});问题:String传输的性能7k大小的静态文件,需做替换String➛Buffer缓存Buffer,4倍性能提升18问题:多核CPU的利用单线程与多核CPU单线程因为异常退出?仿若熟悉的WebWorker:child_process进程与消息varcluster=require('node-cluster');varmaster=newcluster.Master();master.register(8080,'app.js');master.dispatch();varhttp=require('http');varcluster=require('node-cluster');varworker=newcluster.Worker();varserver=http.createServer(function(req,res){//server});worker.ready(function(socket){server.emit('connection',socket);});19负载均衡多核利用提升稳定小结异步编程问题?EventProxy、JScex等内存限制问题?第三方存储RedisCPU消耗问题?缓存中间结果单线程CPU利用不足问题?多进程单线程稳定性问题?Node-Cluster20实践:运维异常日志监控部署备份容灾21//异步方法中trycatch是不靠谱滴//异步方法的异常async(function(err,data){if(err){logger.error(err);return;//TODO}//TODO});进程数量CPU内存Load磁盘IO流量双机房双RedisMRedis模块双MongoDBMongoSkin数据源集群实践:测试测试单元测试自动化测试性能测试持续集成WebGhostShould.js22实践:Common

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论