Node.js在淘寶的應(yīng)用實(shí)踐_第1頁(yè)
Node.js在淘寶的應(yīng)用實(shí)踐_第2頁(yè)
Node.js在淘寶的應(yīng)用實(shí)踐_第3頁(yè)
Node.js在淘寶的應(yīng)用實(shí)踐_第4頁(yè)
Node.js在淘寶的應(yīng)用實(shí)踐_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Node在淘寶的應(yīng)用實(shí)踐這些年,我們一起開(kāi)發(fā)過(guò)的Node.jsBy@樸靈1關(guān)于我CNode社區(qū)前端atSAPforMobileWeb前端at淘寶數(shù)據(jù)產(chǎn)品部連IE6都能兼容的男人2議程我為什么要做Node開(kāi)發(fā)準(zhǔn)備工作與作品Node.js帶來(lái)的新問(wèn)題與如何逆襲異步編程緩存與內(nèi)存BufferNode.js在淘寶產(chǎn)品中的一點(diǎn)實(shí)踐3長(zhǎng)達(dá)半天的歡樂(lè)4前端屌絲的坎坷路iconspoweredbymorchadesignNode與前端的親緣5Node與前端的親緣6左手HTML5右手Node.js熟知的JavaScript執(zhí)行原理/事件循環(huán)熟悉的API、事件、單線程、回調(diào)Ajax/異步相比HTML5,Node將開(kāi)啟更多的可能性7好奇心&滿(mǎn)足感HTTP協(xié)議棧:深入后端,反哺前端StatuscodeCookie&SessionRequest&ResponseWebFramework高性能JavaScript平臺(tái)拓寬視野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堆棧的產(chǎn)品WebGhostShouldWebGhostMongoSkinITierRedis&MRedisConnect11前端工程師到Web工程師12結(jié)果重了10斤如何擺脫前端屌絲的身份讓女神青睞$.get("template",function(template){//something$.get("data",function(data){//something$.get("l10n",function(l10n){//somethingrender(template,data);});});});問(wèn)題:異步協(xié)作嵌套還是并行?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);});問(wèn)題:異步還是同步復(fù)雜的異步編程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問(wèn)題:緩存的使用varmap={};varget=function(key){returnmap[key];};varset=function(key,value){map[key]=value;};//檢查緩存if(!get(key)){//從數(shù)據(jù)庫(kù)或別的地方獲取了對(duì)象后,放進(jìn)緩存中set(key,value);}varLimitableMap=require('limitablemap');varmap=newLimitableMap(1000);map.set("key1","key1");map.get("key1");15問(wèn)題:SessionV8內(nèi)存堆棧限制分布式中,Session需要共享(Redis)重啟應(yīng)用不丟失session多點(diǎn)Redis,備份容災(zāi)16問(wèn)題:Buffer對(duì)象vardata="";res.on('data',function(chunk){//chunk是一個(gè)Buffer對(duì)象data+=chunk;//隱藏的toString()}).on("end",function(){//對(duì)data轉(zhuǎn)碼});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;}});//簡(jiǎn)單且正確的方法varbufferHelper=newBufferHelper();req.on("data",function(chunk){bufferHelper.concat(chunk);}).on('end',function(){varhtml=bufferHelper.toBuffer().toString();});問(wèn)題:String傳輸?shù)男阅?k大小的靜態(tài)文件,需做替換String?Buffer緩存Buffer,4倍性能提升18問(wèn)題:多核CPU的利用單線程與多核CPU單線程因?yàn)楫惓M顺??仿若熟悉的WebWorker:child_process進(jìn)程與消息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負(fù)載均衡多核利用提升穩(wěn)定小結(jié)異步編程問(wèn)題?EventProxy、JScex等內(nèi)存限制問(wèn)題?第三方存儲(chǔ)RedisCPU消耗問(wèn)題?緩存中間結(jié)果單線程CPU利用不足問(wèn)題?多進(jìn)程單線程穩(wěn)定性問(wèn)題?Node-Cluster20實(shí)踐:運(yùn)維異常日志監(jiān)控部署備份容災(zāi)21//異步方法中trycatch是不靠譜滴//異步方法的異常async(function(err,data){if(err){logger.error(err);return;//TODO}//TODO});進(jìn)程數(shù)量CPU內(nèi)存Load磁盤(pán)IO流量雙機(jī)房雙RedisMRedis模塊雙MongoDBMongoSkin數(shù)據(jù)源集群實(shí)踐:測(cè)試測(cè)試單元測(cè)試自動(dòng)化測(cè)試性能測(cè)試持續(xù)集成WebGhostShould.js22實(shí)踐:Common

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論