SlideShare a Scribd company logo
1 of 26
Download to read offline
使用Node构建静态资源管理系统(RMS)


                 yyfrankyy
关于我
}    许阳寅(文河@淘宝,富应用开发团队)
}    https://github.com/yyfrankyy
}    yyfrankyy@gmail.com
Agenda
}    为什么要做RMS
}    设计和实现
}    使用Node开发的一点心得
静态资源管理
}    依赖合并,压缩
}    规范检查,语法检查,安全检查
}    预编译(LESS/Sass,CoffeeScript)
}    Auto Sprite(CSS Gaga)
}    …
为何需要一个平台?
}    如何快速的搭建/升级前端开发环境?
}    工具的使用效果如何评估?
}    怎么持续地跟踪代码变化?
}    工具和代码的变化对业务有何影响?
}    …
对比其他系统
}    B2B的svn proxy
      }    Hook实现,拦截提交到版本库的代码
}    百度的前端编译平台
      }    统一化执行脚本(build.sh)
      }    规范检查,安全检查(包括模版)
      }    CSS3,压缩HTML
      }    和模版集成,自动时间戳
      }    自己实现大部分工具
}    facebook的静态资源管理系统
      }    依赖分析,本地化,合并,sprite,压缩
      }    伸缩性,处理量量随业务扩展快速膨胀
      }    跟业务集成,自我学习,自动优化
淘宝现有的RMS(Based on Java)
}    代码提交之后
}    语法检查(js)
}    安全检查(php/image)
}    字符转换(native2ascii)
}    YUICompressor压缩
}    推送CDN
问题归纳
}    工具不不够多
      }    迭代不不够快
      }    受工具语言限制
}    构建过程不不灵活
      }    构建过程无法灵活组装
      }    难于和应用代码集成
}    反馈不不足
      }    无法自动化持续改进
RMS 能做什么?

           编码          依赖    差异
      压缩         编译
           转换          合并    打包



代码库              RMS              CDN
                            发布
                            状态

 在线             质量量    安全
      文档
 编辑             检查     检查
RMS 还能做什么?

      访问
            Cache   POC
      热度



代码库                 RMS        CDN


质量量    文件
变化     趋势           应用    引用
                    代码    分析
重新思考
}    RMS 想解决什么问题?
      }    通用工具的开发,集成和维护
      }    为自动化优化打基础
}    RMS 的目标?
      }    让前端开发更更专注业务
new	
  RMS({by:	
  nodejs});


                    Web



                   Service

      预处理     安全校验           发布   …
为什么用Node?
}    Node社区很多工具模块是前端相关的
}    第三方工具可以通过接口异步调用(jvm)
}    异步工作流很容易实现
}    我们都会写JavaScript
RMS Web
RMS Web

                  view

  express    controller

                  model


  webdav    svn      mysql   node-mysql
View
}    NodeJS => Shared Template(Mustache) <= SeaJS
}    给前端的模版
      }    GET /template/:template => 返回裸模版
      }    app.use(‘jsonp callback’)
      }    app.send(obj)
      }    GET /data?callback=define => define({foo: bar});
}    后端自动拼接Partial
      }    res.send(mustache({{>header}}{{>$partial}}{{>footer}}));
Controller
}    登录验证
      }    tbsession(sessionproxy)
      }    app.use(login);
}    路由设计
      }    app.all(‘/:apptype/:appname/:action/*?’, fn);
            }    GET /show/path/to/your/file.js => /path/to/your/file.js => svn
            }    GET /log/path/to/your/file.js => show logs
            }    POST /confirm => /publish => 转发RMS服务,show status
Model
}    svn的访问
      }    Webdav, HTTP Digest Auth
      }    svn –non-interactive –xml {subcommands}
            }    xml2json
}    权限管理(RBAC,Role Based Access Control)
RMS服务

                         REST API



ascii    coffee   less    uglifyjs   security   nas    svn

cssmin     yuicompressor       closure compiler       jsdoc



  CDN      代码库           安全中心        应用    POC        …
多进程设计
}    node-webworker
}    等待队列
      }    一个进程一个工作流程
      }    需要时从队列拿出,干完活或超时放回去
多进程设计
异步工作流
}    单向流程,由配置决定流程任务和顺序
}    每一个开发工具只是流程里一个任务
      }    function run(content, next) { next(null, less(content)); }
配置接口
INPUT {filelist: [{
  rev: 10086,
  path: ‘$path’,
  type: ‘JavaScript’,
  steps: [
    [‘coffeescript’, {}],
    [‘compressor’, {tools: {JavaScript: ‘UglifyJS’}}]
  ], /*…*/]
}]}
OUTPUT {status: ‘start’, success: true, id: ‘$publishId’}
异步流程状态跟踪
NodeJS的喜与悲
}    异步IO的简便
}    熟悉而陌生的JavaScript
      }    NodeJS Best Practise
      }    ECMAScript 5
}    接口测试
      }    vowjs和api-easy
}    GC的改良(Stop-The-World when I am not busy)
      }    手动GC(V8::LowMemoryNotification())
}    第三方模块的数量量和质量量
      }    native2ascii
      }    版本库的访问
}    版本升级(0.4-0.6)
      }    第三方模块的升级跟不不上(forever, less等)
      }    node-webworker到cluster的迁移
谢谢
}    Q&A

More Related Content

What's hot

ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享國昭 張
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
编辑器设计Kissy editor
编辑器设计Kissy editor编辑器设计Kissy editor
编辑器设计Kissy editortaobao.com
 
Terracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTerracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTarget Source
 
ASP.Net MVC Framework
ASP.Net MVC FrameworkASP.Net MVC Framework
ASP.Net MVC Framework國昭 張
 
Pptv lb日志实时分析平台
Pptv lb日志实时分析平台Pptv lb日志实时分析平台
Pptv lb日志实时分析平台drewz lin
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node jsXuefeng Zhang
 

What's hot (7)

ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
编辑器设计Kissy editor
编辑器设计Kissy editor编辑器设计Kissy editor
编辑器设计Kissy editor
 
Terracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTerracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering Architecture
 
ASP.Net MVC Framework
ASP.Net MVC FrameworkASP.Net MVC Framework
ASP.Net MVC Framework
 
Pptv lb日志实时分析平台
Pptv lb日志实时分析平台Pptv lb日志实时分析平台
Pptv lb日志实时分析平台
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node js
 

Viewers also liked

StrongSteam AI at HackerNews London October 2011
StrongSteam AI at HackerNews London October 2011StrongSteam AI at HackerNews London October 2011
StrongSteam AI at HackerNews London October 2011Ian Ozsvald
 
Child Labor In World
Child Labor In WorldChild Labor In World
Child Labor In Worldguimera
 
CSS3 Takes on the World
CSS3 Takes on the WorldCSS3 Takes on the World
CSS3 Takes on the WorldJonathan Snook
 
Social Media 2010: The New Horizon
Social Media 2010: The New HorizonSocial Media 2010: The New Horizon
Social Media 2010: The New HorizonWayne Sutton
 
Most trusted friend
Most trusted friendMost trusted friend
Most trusted friendRenny
 
A.I. in the Real World - Sussex Uni lecture March 2011
A.I. in the Real World - Sussex Uni lecture March 2011A.I. in the Real World - Sussex Uni lecture March 2011
A.I. in the Real World - Sussex Uni lecture March 2011Ian Ozsvald
 
P&amp;g – marketing capabilities
P&amp;g – marketing capabilitiesP&amp;g – marketing capabilities
P&amp;g – marketing capabilitiesDhruvil Karani
 
Extending Slate Queries & Reports with JSON & JQUERY
Extending Slate Queries & Reports with JSON & JQUERYExtending Slate Queries & Reports with JSON & JQUERY
Extending Slate Queries & Reports with JSON & JQUERYJonathan Wehner
 
Blue Flavor's Leaflets
Blue Flavor's LeafletsBlue Flavor's Leaflets
Blue Flavor's LeafletsBrian Fling
 
Android Lab Test : Creating a menu context (english)
Android Lab Test : Creating a menu context (english)Android Lab Test : Creating a menu context (english)
Android Lab Test : Creating a menu context (english)Bruno Delb
 
Search For Buzz Sc Bilbao 2010, Massimo Burgio
Search For Buzz Sc Bilbao 2010, Massimo BurgioSearch For Buzz Sc Bilbao 2010, Massimo Burgio
Search For Buzz Sc Bilbao 2010, Massimo Burgiosearch congress
 
презентация1
презентация1презентация1
презентация1Ardamehr
 
Top mobile trends 2014
Top mobile trends 2014Top mobile trends 2014
Top mobile trends 2014DMI
 
Material fot presentation
Material fot presentationMaterial fot presentation
Material fot presentationHa Tong
 
Design effective presentations
Design effective presentationsDesign effective presentations
Design effective presentationsMerry Abbasi
 
Developing a Coherent Social Strategy for Enterprise Innovation
Developing a Coherent Social Strategy for Enterprise InnovationDeveloping a Coherent Social Strategy for Enterprise Innovation
Developing a Coherent Social Strategy for Enterprise InnovationMilind Pansare
 

Viewers also liked (19)

StrongSteam AI at HackerNews London October 2011
StrongSteam AI at HackerNews London October 2011StrongSteam AI at HackerNews London October 2011
StrongSteam AI at HackerNews London October 2011
 
Child Labor In World
Child Labor In WorldChild Labor In World
Child Labor In World
 
Breakconf
BreakconfBreakconf
Breakconf
 
CSS3 Takes on the World
CSS3 Takes on the WorldCSS3 Takes on the World
CSS3 Takes on the World
 
21 PILOTS
21 PILOTS21 PILOTS
21 PILOTS
 
Social Media 2010: The New Horizon
Social Media 2010: The New HorizonSocial Media 2010: The New Horizon
Social Media 2010: The New Horizon
 
Most trusted friend
Most trusted friendMost trusted friend
Most trusted friend
 
A.I. in the Real World - Sussex Uni lecture March 2011
A.I. in the Real World - Sussex Uni lecture March 2011A.I. in the Real World - Sussex Uni lecture March 2011
A.I. in the Real World - Sussex Uni lecture March 2011
 
P&amp;g – marketing capabilities
P&amp;g – marketing capabilitiesP&amp;g – marketing capabilities
P&amp;g – marketing capabilities
 
Extending Slate Queries & Reports with JSON & JQUERY
Extending Slate Queries & Reports with JSON & JQUERYExtending Slate Queries & Reports with JSON & JQUERY
Extending Slate Queries & Reports with JSON & JQUERY
 
Blue Flavor's Leaflets
Blue Flavor's LeafletsBlue Flavor's Leaflets
Blue Flavor's Leaflets
 
Android Lab Test : Creating a menu context (english)
Android Lab Test : Creating a menu context (english)Android Lab Test : Creating a menu context (english)
Android Lab Test : Creating a menu context (english)
 
Search For Buzz Sc Bilbao 2010, Massimo Burgio
Search For Buzz Sc Bilbao 2010, Massimo BurgioSearch For Buzz Sc Bilbao 2010, Massimo Burgio
Search For Buzz Sc Bilbao 2010, Massimo Burgio
 
презентация1
презентация1презентация1
презентация1
 
Top mobile trends 2014
Top mobile trends 2014Top mobile trends 2014
Top mobile trends 2014
 
Material fot presentation
Material fot presentationMaterial fot presentation
Material fot presentation
 
Design effective presentations
Design effective presentationsDesign effective presentations
Design effective presentations
 
Developing a Coherent Social Strategy for Enterprise Innovation
Developing a Coherent Social Strategy for Enterprise InnovationDeveloping a Coherent Social Strategy for Enterprise Innovation
Developing a Coherent Social Strategy for Enterprise Innovation
 
Bishmay class 9
Bishmay class 9Bishmay class 9
Bishmay class 9
 

Similar to 使用NodeJS构建静态资源管理系统

IDC大会:新浪SAE架构与设计
IDC大会:新浪SAE架构与设计IDC大会:新浪SAE架构与设计
IDC大会:新浪SAE架构与设计Xi Zeng
 
高性能远程调用解决方案
高性能远程调用解决方案高性能远程调用解决方案
高性能远程调用解决方案Ady Liu
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 zhen chen
 
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)锐 张
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renrend0nn9n
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails serverMichael Chen
 
EventProxy introduction - JacksonTian
EventProxy introduction - JacksonTianEventProxy introduction - JacksonTian
EventProxy introduction - JacksonTianJackson Tian
 
Event proxy introduction
Event proxy introductionEvent proxy introduction
Event proxy introductionmysqlops
 
美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评技术沙龙13-前端工程化开发方案app-proto介绍美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评技术沙龙13-前端工程化开发方案app-proto介绍美团点评技术团队
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战fengmk2
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介Allen Lsy
 
Ibm dnt-dcos-v9-3
Ibm dnt-dcos-v9-3Ibm dnt-dcos-v9-3
Ibm dnt-dcos-v9-3Guangya Liu
 
轻量分布式服务框架
轻量分布式服务框架轻量分布式服务框架
轻量分布式服务框架-Xing Xing
 
中大型规模的网站架构运维 Saac
中大型规模的网站架构运维 Saac中大型规模的网站架构运维 Saac
中大型规模的网站架构运维 SaacChao Zhu
 
NodeJS快速服务端开发 朝沐金风 Shanghai
NodeJS快速服务端开发 朝沐金风 ShanghaiNodeJS快速服务端开发 朝沐金风 Shanghai
NodeJS快速服务端开发 朝沐金风 ShanghaiJackson Tian
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型Jackson Tian
 
如何利用 Amazon EMR 及Athena 打造高成本效益的大數據環境
如何利用 Amazon EMR 及Athena 打造高成本效益的大數據環境如何利用 Amazon EMR 及Athena 打造高成本效益的大數據環境
如何利用 Amazon EMR 及Athena 打造高成本效益的大數據環境Amazon Web Services
 
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展江華 奚
 

Similar to 使用NodeJS构建静态资源管理系统 (20)

IDC大会:新浪SAE架构与设计
IDC大会:新浪SAE架构与设计IDC大会:新浪SAE架构与设计
IDC大会:新浪SAE架构与设计
 
高性能远程调用解决方案
高性能远程调用解决方案高性能远程调用解决方案
高性能远程调用解决方案
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储
 
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renren
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails server
 
EventProxy introduction - JacksonTian
EventProxy introduction - JacksonTianEventProxy introduction - JacksonTian
EventProxy introduction - JacksonTian
 
Event proxy introduction
Event proxy introductionEvent proxy introduction
Event proxy introduction
 
美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评技术沙龙13-前端工程化开发方案app-proto介绍美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评技术沙龙13-前端工程化开发方案app-proto介绍
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介
 
Ibm dnt-dcos-v9-3
Ibm dnt-dcos-v9-3Ibm dnt-dcos-v9-3
Ibm dnt-dcos-v9-3
 
轻量分布式服务框架
轻量分布式服务框架轻量分布式服务框架
轻量分布式服务框架
 
中大型规模的网站架构运维 Saac
中大型规模的网站架构运维 Saac中大型规模的网站架构运维 Saac
中大型规模的网站架构运维 Saac
 
NodeJS快速服务端开发 朝沐金风 Shanghai
NodeJS快速服务端开发 朝沐金风 ShanghaiNodeJS快速服务端开发 朝沐金风 Shanghai
NodeJS快速服务端开发 朝沐金风 Shanghai
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 
如何利用 Amazon EMR 及Athena 打造高成本效益的大數據環境
如何利用 Amazon EMR 及Athena 打造高成本效益的大數據環境如何利用 Amazon EMR 及Athena 打造高成本效益的大數據環境
如何利用 Amazon EMR 及Athena 打造高成本效益的大數據環境
 
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展
 
Micro service
Micro serviceMicro service
Micro service
 

More from Frank Xu

FtnApp 的缩略图实践
FtnApp 的缩略图实践FtnApp 的缩略图实践
FtnApp 的缩略图实践Frank Xu
 
淘宝交易平台前端重构
淘宝交易平台前端重构淘宝交易平台前端重构
淘宝交易平台前端重构Frank Xu
 
排行榜V3项目总结
排行榜V3项目总结排行榜V3项目总结
排行榜V3项目总结Frank Xu
 
JsDoc的使用
JsDoc的使用JsDoc的使用
JsDoc的使用Frank Xu
 
Web Developing In Search
Web Developing In SearchWeb Developing In Search
Web Developing In SearchFrank Xu
 
淘宝搜索前端优化
淘宝搜索前端优化淘宝搜索前端优化
淘宝搜索前端优化Frank Xu
 

More from Frank Xu (7)

Watcher
WatcherWatcher
Watcher
 
FtnApp 的缩略图实践
FtnApp 的缩略图实践FtnApp 的缩略图实践
FtnApp 的缩略图实践
 
淘宝交易平台前端重构
淘宝交易平台前端重构淘宝交易平台前端重构
淘宝交易平台前端重构
 
排行榜V3项目总结
排行榜V3项目总结排行榜V3项目总结
排行榜V3项目总结
 
JsDoc的使用
JsDoc的使用JsDoc的使用
JsDoc的使用
 
Web Developing In Search
Web Developing In SearchWeb Developing In Search
Web Developing In Search
 
淘宝搜索前端优化
淘宝搜索前端优化淘宝搜索前端优化
淘宝搜索前端优化
 

使用NodeJS构建静态资源管理系统

  • 2. 关于我 }  许阳寅(文河@淘宝,富应用开发团队) }  https://github.com/yyfrankyy }  yyfrankyy@gmail.com
  • 3. Agenda }  为什么要做RMS }  设计和实现 }  使用Node开发的一点心得
  • 4. 静态资源管理 }  依赖合并,压缩 }  规范检查,语法检查,安全检查 }  预编译(LESS/Sass,CoffeeScript) }  Auto Sprite(CSS Gaga) }  …
  • 5. 为何需要一个平台? }  如何快速的搭建/升级前端开发环境? }  工具的使用效果如何评估? }  怎么持续地跟踪代码变化? }  工具和代码的变化对业务有何影响? }  …
  • 6. 对比其他系统 }  B2B的svn proxy }  Hook实现,拦截提交到版本库的代码 }  百度的前端编译平台 }  统一化执行脚本(build.sh) }  规范检查,安全检查(包括模版) }  CSS3,压缩HTML }  和模版集成,自动时间戳 }  自己实现大部分工具 }  facebook的静态资源管理系统 }  依赖分析,本地化,合并,sprite,压缩 }  伸缩性,处理量量随业务扩展快速膨胀 }  跟业务集成,自我学习,自动优化
  • 7. 淘宝现有的RMS(Based on Java) }  代码提交之后 }  语法检查(js) }  安全检查(php/image) }  字符转换(native2ascii) }  YUICompressor压缩 }  推送CDN
  • 8. 问题归纳 }  工具不不够多 }  迭代不不够快 }  受工具语言限制 }  构建过程不不灵活 }  构建过程无法灵活组装 }  难于和应用代码集成 }  反馈不不足 }  无法自动化持续改进
  • 9. RMS 能做什么? 编码 依赖 差异 压缩 编译 转换 合并 打包 代码库 RMS CDN 发布 状态 在线 质量量 安全 文档 编辑 检查 检查
  • 10. RMS 还能做什么? 访问 Cache POC 热度 代码库 RMS CDN 质量量 文件 变化 趋势 应用 引用 代码 分析
  • 11. 重新思考 }  RMS 想解决什么问题? }  通用工具的开发,集成和维护 }  为自动化优化打基础 }  RMS 的目标? }  让前端开发更更专注业务
  • 12. new  RMS({by:  nodejs}); Web Service 预处理 安全校验 发布 …
  • 13. 为什么用Node? }  Node社区很多工具模块是前端相关的 }  第三方工具可以通过接口异步调用(jvm) }  异步工作流很容易实现 }  我们都会写JavaScript
  • 15. RMS Web view express controller model webdav svn mysql node-mysql
  • 16. View }  NodeJS => Shared Template(Mustache) <= SeaJS }  给前端的模版 }  GET /template/:template => 返回裸模版 }  app.use(‘jsonp callback’) }  app.send(obj) }  GET /data?callback=define => define({foo: bar}); }  后端自动拼接Partial }  res.send(mustache({{>header}}{{>$partial}}{{>footer}}));
  • 17. Controller }  登录验证 }  tbsession(sessionproxy) }  app.use(login); }  路由设计 }  app.all(‘/:apptype/:appname/:action/*?’, fn); }  GET /show/path/to/your/file.js => /path/to/your/file.js => svn }  GET /log/path/to/your/file.js => show logs }  POST /confirm => /publish => 转发RMS服务,show status
  • 18. Model }  svn的访问 }  Webdav, HTTP Digest Auth }  svn –non-interactive –xml {subcommands} }  xml2json }  权限管理(RBAC,Role Based Access Control)
  • 19. RMS服务 REST API ascii coffee less uglifyjs security nas svn cssmin yuicompressor closure compiler jsdoc CDN 代码库 安全中心 应用 POC …
  • 20. 多进程设计 }  node-webworker }  等待队列 }  一个进程一个工作流程 }  需要时从队列拿出,干完活或超时放回去
  • 22. 异步工作流 }  单向流程,由配置决定流程任务和顺序 }  每一个开发工具只是流程里一个任务 }  function run(content, next) { next(null, less(content)); }
  • 23. 配置接口 INPUT {filelist: [{ rev: 10086, path: ‘$path’, type: ‘JavaScript’, steps: [ [‘coffeescript’, {}], [‘compressor’, {tools: {JavaScript: ‘UglifyJS’}}] ], /*…*/] }]} OUTPUT {status: ‘start’, success: true, id: ‘$publishId’}
  • 25. NodeJS的喜与悲 }  异步IO的简便 }  熟悉而陌生的JavaScript }  NodeJS Best Practise }  ECMAScript 5 }  接口测试 }  vowjs和api-easy }  GC的改良(Stop-The-World when I am not busy) }  手动GC(V8::LowMemoryNotification()) }  第三方模块的数量量和质量量 }  native2ascii }  版本库的访问 }  版本升级(0.4-0.6) }  第三方模块的升级跟不不上(forever, less等) }  node-webworker到cluster的迁移