构建可扩展的静态资源管理系统

13
构构构构构构构构构构构构构构构构 @ 构构

description

 

Transcript of 构建可扩展的静态资源管理系统

Page 1: 构建可扩展的静态资源管理系统

构建可扩展的静态资源管理系统

许阳寅 @ 淘宝

Page 2: 构建可扩展的静态资源管理系统

关于我 许阳寅(文河 @ 淘宝) f2e.us [email protected]

Page 3: 构建可扩展的静态资源管理系统

静态资源管理 常见功能

预编译其他资源( LESS/Sass , CoffeeScript ) 规范检查,语法检查,安全检查 Sprite 合并,压缩

各自实现 VS 系统化处理

Page 5: 构建可扩展的静态资源管理系统

淘宝现有的 RMS 系统 编译 TMS 模板 语法检查( js ) 安全检查( php/image ) 编码转换 压缩

Page 6: 构建可扩展的静态资源管理系统

为何需要更进一步 需求

产品线众多,构建规则不同 每周发布量大 处理文件的方式大不一样

目标 快速稳定 可扩展 可配置

Page 7: 构建可扩展的静态资源管理系统

快速稳定 实现调度中心,集中控制容错,反馈日志 异步工作流( NodeJS )

Page 8: 构建可扩展的静态资源管理系统

可扩展 各种语言实现的预处理工具

YC/GC: Java CSSGaga: .NET LESS/CoffeeScript: NodeJS

使用 NodeJS 和其他平台进行异步通信 NodeJS 社区丰富的模块资源

Page 9: 构建可扩展的静态资源管理系统

可配置{“type”: “JavaScript”,“steps”: [ [“coffeescript”, {}] ,[“nativeascii”, {}] ,[“compressor”, {“type”: “UglifyJS”}]]}

{“type”: “CSS”,“steps”: [ [“less”, {}] ,[“compressor”, {“type”: “YC”}]]}

Page 10: 构建可扩展的静态资源管理系统

和应用集成(自动时间戳) 后端:发布时同步生成时间戳文件 前端: importAssets(“apps/tms/js/spm.js”)<script src=“http://<?php cdn();

?>/apps/tms/js/spm.js?t=<?php require_once(‘timestamp/apps/tms/js/spm.js.php’); ?>”></script>

<script src=“http://a.tbcdn.cn/apps/tms/js/spm.js?t=1”></script>

<script src=“http://assets.daily.taobao.net/apps/tms/js/spm.js?t=$random”></script>

Page 11: 构建可扩展的静态资源管理系统

下一步 处理粒度

单个文件 整个应用打包

自动构建文件( wscript, package.json ) 和性能中心对接

Page 12: 构建可扩展的静态资源管理系统

几点特性 拦截应用 Assets 入口 配置预处理过程 利用 NodeJS 的模块资源和异步特性进行流水线组装

Page 13: 构建可扩展的静态资源管理系统

谢谢 Q&A