Server-SideJavaScriptDevelopementNode.JSQuickTour数据平台与产品-清笃qingdu@taobao.comfrom年3月23日星期三Server-SideJavaScriptDevelopment11年3月23日星期三先驱AptanaJaxer(SpiderMonkey)Helma(Rhino)11年3月23日星期三问题•缺乏统一标准•技术生态圈的问题11年3月23日星期三Revelutionsin2009•CommonJS(ServerJS),byDangoor•JSConf,byChrisWilliams&IterativeDesigns•Node,byRayDahl.11年3月23日星期三Node'sgoalistoprovideaneasywaytobuildscalablenetworkprograms--nodejs.org11年3月23日星期三RayDahl11年3月23日星期三发展历史•1/5/2009RyahDahl提出项目构想•2/15/2009项目启动•5/31/2009发布初始版本•......•3/2/2011v0.4.2发布11年3月23日星期三社区与生态圈•目前在官方wiki上有近700个module•超过20位活跃的开发者•每天都在进步11年3月23日星期三基础库•libev(eventloop)•libeio(nonblockedposix,threadpool)•v8(javascriptenginebygoogle)11年3月23日星期三核心思想•非阻塞•单线程•事件驱动11年3月23日星期三阻塞模式的io操作开始读取文件文件读取中其他逻辑11年3月23日星期三阻塞模式的io操作开始读取文件文件读取中依赖文件内容的逻辑不依赖文件内容的逻辑11年3月23日星期三单线程-优势•程序逻辑简单•系统资源占用低•无通信与锁开销带来高性能11年3月23日星期三单线程-劣势•一个程序仅能在一个cpu上运行•一旦程序异常将导致整个进程崩溃11年3月23日星期三解决方案-WebWorker11年3月23日星期三性能•AMDOpteron2200单核,4GRAM•socketclient20,000+qps•socketserver17,000qps•httpserver4,400qps•内存消耗30~40m•seemore.=811年3月23日星期三一些限制•SSL支持不够成熟•Windows•1G堆栈内存限制(byv8)11年3月23日星期三适用场景•WebSocket&WebComet•大并发负载中间层服务•简单的Spider11年3月23日星期三Digintothenode11年3月23日星期三安装11年3月23日星期三HelloWorld!Familiar&Simple11年3月23日星期三单线程$nodesingleThread.js123411年3月23日星期三CommonJS$nodeCommonJS.jsfoobar11年3月23日星期三非阻塞io$nodenonblocking.jsReadingmy.txt...my.txtHereiscontentsinmy.txt.11年3月23日星期三HTTP服务11年3月23日星期三Wanttoseemore?11年3月23日星期三StringvsBuffer高负载时String带来的问题•内存开销较大•node不能直接得到v8中String的指针,在socket操作时需要执行memcopy•高负载时v8的gc对性能的影响11年3月23日星期三WithStringStringvsBuffer11年3月23日星期三StringvsBufferWithBuffer11年3月23日星期三WithString带来的性能改进11年3月23日星期三带来的性能改进WithBuffer11年3月23日星期三Debug11年3月23日星期三Debugineclipse•EclipsedebuggerpluginforV8:•年3月23日星期三UnitTest•Expresso•Nodeunit年3月23日星期三UnitTest11年3月23日星期三UnitTest11年3月23日星期三包管理•PHP:pear•Python:PyPI,setuptools•Ruby:Gems•Node:11年3月23日星期三安装与使用11年3月23日星期三Links•••••年3月23日星期三11年3月23日星期三NodeinTaobao•UEDnodejs-kissyby拔赤bachi@taobao.com•EDP年3月23日星期三11年3月23日星期三杭州站·2011年10月20日~22日(6月启动)QCon北京站官方网站和资料下载