SlideShare uma empresa Scribd logo
1 de 50
Baixar para ler offline
Server-Side JavaScript
                Developement
                      Node.JS Quick Tour

               数据平台与产品 - 清笃 <qingdu@taobao.com>
                    from http://cnodejs.org/




11年4月2日星期六
传统观念


             JavaScript = 浏览器客户端




11年4月2日星期六
Server-Side JavaScript

11年4月2日星期六
先驱


             Aptana Jaxer




               Helma


11年4月2日星期六
Jaxer

             • Apache Httpd
             • Mozilla SeaMonkey
             • “世界第一”
             • 前后端js代码的统一与互相调用
             • 传统的服务器端脚本

11年4月2日星期六
适用场景


             • web前端系统
             • 对不支持js的浏览器提供js支持


11年4月2日星期六
Helma

             • RingoJS
             • “12 years”
             • Java
             • MVC
             • 应用服务器

11年4月2日星期六
问题
             •   no more servers

             •   do more things

             •   统一标准

             •   技术生态圈




11年4月2日星期六
Revelutions in 2009
         •   CommonJS

         •   JSConf

         •   Node

11年4月2日星期六
Node's goal is to provide an easy
             way to build scalable network
             programs

                                -- nodejs.org



11年4月2日星期六
发展历史

             • 1/5/2009 Ryah Dahl 提出项目构想
             • 2/15/2009 项目启动
             • 5/31/2009 发布初始版本
             • ......
             • 3/2/2011 v0.4.4 发布

11年4月2日星期六
社区与生态圈

             • 目前在官方wiki上有近700个module
             • 超过20位活跃的开发者
             • 每天都在进步


11年4月2日星期六
基础库

             • libev (event loop)
             • libeio (nonblocked posix, thread pool)
             • v8 (javascript engine by google)


11年4月2日星期六
核心思想

             • 非阻塞
             • 单线程
             • 事件驱动


11年4月2日星期六
阻塞模式




11年4月2日星期六
非阻塞模式




11年4月2日星期六
单线程 - 优势

             • 程序逻辑简单
             • 系统资源占用低
             • 无通信与锁开销带来高性能


11年4月2日星期六
单线程 - 劣势

             • 一个程序仅能在一个cpu上运行

             • 一旦程序异常将导致整个进程崩溃


11年4月2日星期六
解决方案 - Web Worker
11年4月2日星期六
性能
             • AMD Opteron 2200 单核, 4G RAM
             • socket client 20,000+ qps
             • socket server 17,000 qps
             • http server 4,400 qps
             • 内存消耗 30~40m
             • see more. <http://cnodejs.org/blog/?p=8>
11年4月2日星期六
一些限制

             • SSL支持不够成熟
             • Windows下还存在很多问题
             • 1G heap限制(by v8)


11年4月2日星期六
适用场景

             • Web Socket & Web Comet
             • 大并发负载中间层服务
             • 简单的Spider


11年4月2日星期六
Dig into the node
11年4月2日星期六
安装




11年4月2日星期六
Hello World!




             Familiar & Simple


11年4月2日星期六
HTTP服务




11年4月2日星期六
String vs Buffer
             String带来的问题

             • 转码开销
             • 内存开销
             • memcopy
             • 垃圾回收

11年4月2日星期六
Node Buffer

                     Buffer
                     Codes


                      Node
                 Buffer
                          30     V8
                Memory         Engine




11年4月2日星期六
String vs Buffer




                 With String
11年4月2日星期六
String vs Buffer




                 With Buffer
11年4月2日星期六
带来的性能改进




               With String
11年4月2日星期六
带来的性能改进




               With Buffer
11年4月2日星期六
Debug




11年4月2日星期六
Debug in eclipse

             • Eclipse debugger plugin for V8:
              http://code.google.com/p/chromedevtools/
             • http://bit.ly/eQl7iI


11年4月2日星期六
UnitTest

             • Expresso
              https://github.com/visionmedia/expresso
             • Nodeunit
              https://github.com/caolan/nodeunit




11年4月2日星期六
UnitTest




11年4月2日星期六
UnitTest




11年4月2日星期六
包管理

             • PHP: pear
             • Python: PyPI, setuptools
             • Ruby: Gems

             • Node:

11年4月2日星期六
安装与使用




11年4月2日星期六
Links

             • http://www.commonjs.org/
             • http://nodejs.org/
             • http://howtonode.org/
             • https://github.com/joyent/node/wiki
             • https://npmjs.org/

11年4月2日星期六
11年4月2日星期六
nodejs-kissy




11年4月2日星期六
nodejs-kissy

             • kissy框架的node移植版
             • one for all
             • https://github.com/kissyteam/nodejs-kissy


11年4月2日星期六
node-myfox

             • mysql分布式集群的查询系统
             • 对客户端透明
             • 支持http/socket协议
             • deamon-worker
             • unix-socket

11年4月2日星期六
node-myfox

                                                Master
                      Sql
                               http / socket
                     Query




                             !"#$%&"#%         $"'(         !"#$%&"#%
                                                      $")


                      Router                   Worker
                                   $"'(                     Shard 1
                       Route                    Shard       Shard 2
             Route      Info         $")         Info
             Data                                           Shard N




11年4月2日星期六
CNodeJS.ORG为淘宝的工程师志愿发起的
             Node.JS原创技术社区,致力于Node.JS的
             技术研究和技术推广。




11年4月2日星期六
CNodeJS

             • blog
              • http://cnodejs.org/blog/
             • ask
              • http://cnodejs.org/ask/

11年4月2日星期六
CNodeJS北京聚会
               邀请你参加
11年4月2日星期六
时间: 2011.4.16(周六)下午

               地点: 北京betacafe



11年4月2日星期六
11年4月2日星期六

Mais conteúdo relacionado

Mais procurados

Rails 新人起步走
Rails 新人起步走Rails 新人起步走
Rails 新人起步走jimmy lin
 
Sdnds tw-meetup-1
Sdnds tw-meetup-1Sdnds tw-meetup-1
Sdnds tw-meetup-1Fei Ji Siao
 
Mininet Learning Guide(Mininet 学习指南)
Mininet Learning Guide(Mininet 学习指南)Mininet Learning Guide(Mininet 学习指南)
Mininet Learning Guide(Mininet 学习指南)呈 李
 
Django deploy
Django deployDjango deploy
Django deployAndy Dai
 
深入浅出NodeJS
深入浅出NodeJS深入浅出NodeJS
深入浅出NodeJSsunzhenghua
 
PHP/NodeJS/Redis项目实战
PHP/NodeJS/Redis项目实战PHP/NodeJS/Redis项目实战
PHP/NodeJS/Redis项目实战Sun Zephyr
 
SITCON 2021 想上網?大展 l3 路由魔法吧!
SITCON 2021 想上網?大展 l3 路由魔法吧!SITCON 2021 想上網?大展 l3 路由魔法吧!
SITCON 2021 想上網?大展 l3 路由魔法吧!Tsung-Yi Yu
 
我的Ubuntu之旅
我的Ubuntu之旅我的Ubuntu之旅
我的Ubuntu之旅isnull
 
Nginx+lua在阿里巴巴的使用
Nginx+lua在阿里巴巴的使用Nginx+lua在阿里巴巴的使用
Nginx+lua在阿里巴巴的使用OpenRestyCon
 
Intro to Rails Workshop ( TA 須知 )
Intro to Rails Workshop ( TA 須知 )Intro to Rails Workshop ( TA 須知 )
Intro to Rails Workshop ( TA 須知 )Yi-Ting Cheng
 
那些年,我們一起用過的 Xcode
那些年,我們一起用過的 Xcode那些年,我們一起用過的 Xcode
那些年,我們一起用過的 XcodeMikimoto Chuang
 

Mais procurados (11)

Rails 新人起步走
Rails 新人起步走Rails 新人起步走
Rails 新人起步走
 
Sdnds tw-meetup-1
Sdnds tw-meetup-1Sdnds tw-meetup-1
Sdnds tw-meetup-1
 
Mininet Learning Guide(Mininet 学习指南)
Mininet Learning Guide(Mininet 学习指南)Mininet Learning Guide(Mininet 学习指南)
Mininet Learning Guide(Mininet 学习指南)
 
Django deploy
Django deployDjango deploy
Django deploy
 
深入浅出NodeJS
深入浅出NodeJS深入浅出NodeJS
深入浅出NodeJS
 
PHP/NodeJS/Redis项目实战
PHP/NodeJS/Redis项目实战PHP/NodeJS/Redis项目实战
PHP/NodeJS/Redis项目实战
 
SITCON 2021 想上網?大展 l3 路由魔法吧!
SITCON 2021 想上網?大展 l3 路由魔法吧!SITCON 2021 想上網?大展 l3 路由魔法吧!
SITCON 2021 想上網?大展 l3 路由魔法吧!
 
我的Ubuntu之旅
我的Ubuntu之旅我的Ubuntu之旅
我的Ubuntu之旅
 
Nginx+lua在阿里巴巴的使用
Nginx+lua在阿里巴巴的使用Nginx+lua在阿里巴巴的使用
Nginx+lua在阿里巴巴的使用
 
Intro to Rails Workshop ( TA 須知 )
Intro to Rails Workshop ( TA 須知 )Intro to Rails Workshop ( TA 須知 )
Intro to Rails Workshop ( TA 須知 )
 
那些年,我們一起用過的 Xcode
那些年,我們一起用過的 Xcode那些年,我們一起用過的 Xcode
那些年,我們一起用過的 Xcode
 

Destaque

Цахим хэрэглэгдэхүүн
Цахим хэрэглэгдэхүүнЦахим хэрэглэгдэхүүн
Цахим хэрэглэгдэхүүнoyunerdene_gansukh
 
Proyecto informatica
Proyecto informaticaProyecto informatica
Proyecto informaticajef-fraga
 
14595 kütahya hastahaneler
14595 kütahya hastahaneler14595 kütahya hastahaneler
14595 kütahya hastahanelerAlimBey
 
Transição BPOS para Office 365
Transição BPOS para Office 365 Transição BPOS para Office 365
Transição BPOS para Office 365 Sara Barbosa
 

Destaque (6)

Цахим хэрэглэгдэхүүн
Цахим хэрэглэгдэхүүнЦахим хэрэглэгдэхүүн
Цахим хэрэглэгдэхүүн
 
Els e
Els eEls e
Els e
 
Felicidades dul
Felicidades dulFelicidades dul
Felicidades dul
 
Proyecto informatica
Proyecto informaticaProyecto informatica
Proyecto informatica
 
14595 kütahya hastahaneler
14595 kütahya hastahaneler14595 kütahya hastahaneler
14595 kütahya hastahaneler
 
Transição BPOS para Office 365
Transição BPOS para Office 365 Transição BPOS para Office 365
Transição BPOS para Office 365
 

Semelhante a Node js q-con

Nodejs介绍
Nodejs介绍Nodejs介绍
Nodejs介绍myzykj
 
Websocket talk in nodejs.tw
Websocket talk in nodejs.twWebsocket talk in nodejs.tw
Websocket talk in nodejs.twHsu Ping Feng
 
Node.js Quick Tour
Node.js Quick TourNode.js Quick Tour
Node.js Quick Tourmyzykj
 
百度实施持续集成之 “工具战争”-Qcon2011
百度实施持续集成之 “工具战争”-Qcon2011百度实施持续集成之 “工具战争”-Qcon2011
百度实施持续集成之 “工具战争”-Qcon2011Yiwei Ma
 
Node Party HongKong
Node Party HongKongNode Party HongKong
Node Party HongKongKennyZ
 
移动的前端技术架构和性能优化
移动的前端技术架构和性能优化移动的前端技术架构和性能优化
移动的前端技术架构和性能优化fangdeng
 
高性能Web应用缓存架构设计浅谈
高性能Web应用缓存架构设计浅谈高性能Web应用缓存架构设计浅谈
高性能Web应用缓存架构设计浅谈Alvin Qi
 
Eventmachine Websocket 實戰
Eventmachine Websocket 實戰Eventmachine Websocket 實戰
Eventmachine Websocket 實戰Mu-Fan Teng
 
Node.js X Windows Azure
Node.js X Windows AzureNode.js X Windows Azure
Node.js X Windows AzureCaesar Chi
 
Artifacts management with CI and CD
Artifacts management with CI and CDArtifacts management with CI and CD
Artifacts management with CI and CDChen-Tien Tsai
 
Mysql HandleSocket技术在SNS Feed存储中的应用
Mysql HandleSocket技术在SNS Feed存储中的应用Mysql HandleSocket技术在SNS Feed存储中的应用
Mysql HandleSocket技术在SNS Feed存储中的应用iammutex
 
Node js实践
Node js实践Node js实践
Node js实践myzykj
 
.NET 7 家族新成員: Microsoft Orleans v7
.NET 7 家族新成員:Microsoft Orleans v7.NET 7 家族新成員:Microsoft Orleans v7
.NET 7 家族新成員: Microsoft Orleans v7twMVC
 
Douban qcon2009 beijing
Douban qcon2009 beijingDouban qcon2009 beijing
Douban qcon2009 beijingdrewz lin
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7Justin Lin
 
Android vs e pub
Android vs e pubAndroid vs e pub
Android vs e pub永昇 陳
 
Make your DVR playground using DevStack
Make your DVR playground using DevStackMake your DVR playground using DevStack
Make your DVR playground using DevStackJiang Jun
 
開放原始碼 Ch2.1 app - oss - oss ide (ver1.2)
開放原始碼 Ch2.1   app - oss - oss ide (ver1.2)開放原始碼 Ch2.1   app - oss - oss ide (ver1.2)
開放原始碼 Ch2.1 app - oss - oss ide (ver1.2)My own sweet home!
 
⼤語⾔模型 LLM 應⽤開發入⾨
⼤語⾔模型 LLM 應⽤開發入⾨⼤語⾔模型 LLM 應⽤開發入⾨
⼤語⾔模型 LLM 應⽤開發入⾨Wen-Tien Chang
 

Semelhante a Node js q-con (20)

Nodejs介绍
Nodejs介绍Nodejs介绍
Nodejs介绍
 
Websocket talk in nodejs.tw
Websocket talk in nodejs.twWebsocket talk in nodejs.tw
Websocket talk in nodejs.tw
 
Node.js Quick Tour
Node.js Quick TourNode.js Quick Tour
Node.js Quick Tour
 
百度实施持续集成之 “工具战争”-Qcon2011
百度实施持续集成之 “工具战争”-Qcon2011百度实施持续集成之 “工具战争”-Qcon2011
百度实施持续集成之 “工具战争”-Qcon2011
 
Node Party HongKong
Node Party HongKongNode Party HongKong
Node Party HongKong
 
移动的前端技术架构和性能优化
移动的前端技术架构和性能优化移动的前端技术架构和性能优化
移动的前端技术架构和性能优化
 
高性能Web应用缓存架构设计浅谈
高性能Web应用缓存架构设计浅谈高性能Web应用缓存架构设计浅谈
高性能Web应用缓存架构设计浅谈
 
Eventmachine Websocket 實戰
Eventmachine Websocket 實戰Eventmachine Websocket 實戰
Eventmachine Websocket 實戰
 
Node.js X Windows Azure
Node.js X Windows AzureNode.js X Windows Azure
Node.js X Windows Azure
 
Artifacts management with CI and CD
Artifacts management with CI and CDArtifacts management with CI and CD
Artifacts management with CI and CD
 
Mysql HandleSocket技术在SNS Feed存储中的应用
Mysql HandleSocket技术在SNS Feed存储中的应用Mysql HandleSocket技术在SNS Feed存储中的应用
Mysql HandleSocket技术在SNS Feed存储中的应用
 
Node js实践
Node js实践Node js实践
Node js实践
 
.NET 7 家族新成員: Microsoft Orleans v7
.NET 7 家族新成員:Microsoft Orleans v7.NET 7 家族新成員:Microsoft Orleans v7
.NET 7 家族新成員: Microsoft Orleans v7
 
Douban qcon2009 beijing
Douban qcon2009 beijingDouban qcon2009 beijing
Douban qcon2009 beijing
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
 
Android vs e pub
Android vs e pubAndroid vs e pub
Android vs e pub
 
Make your DVR playground using DevStack
Make your DVR playground using DevStackMake your DVR playground using DevStack
Make your DVR playground using DevStack
 
開放原始碼 Ch2.1 app - oss - oss ide (ver1.2)
開放原始碼 Ch2.1   app - oss - oss ide (ver1.2)開放原始碼 Ch2.1   app - oss - oss ide (ver1.2)
開放原始碼 Ch2.1 app - oss - oss ide (ver1.2)
 
Lucene实践
Lucene实践Lucene实践
Lucene实践
 
⼤語⾔模型 LLM 應⽤開發入⾨
⼤語⾔模型 LLM 應⽤開發入⾨⼤語⾔模型 LLM 應⽤開發入⾨
⼤語⾔模型 LLM 應⽤開發入⾨
 

Node js q-con