slides: http://sn.im/2010_fe_infrastructure

关于前端架构,我说的其实是...

张克军
@kejunz | hikejun.com

标题来自...

很多工作像长跑一样, 需要坚持不懈的做,往往到最后才能体现出其意义
过程常常伴随着思考和纠结
绝对不能走
(不能用变通的方式达成短期目标)

前端基础架构的概念

基础架构

Infrastructure /ˈɪnfrəstrʌktʃə(r)/
组织运行所必需的设施、设备和服务的体系

基础架构就像一个舞台,舞台布置好了,男女老少都可以在上面表演。舞台包含了灯光、音响等。

前端基础架构

前端团队运行所必需的规范工具系统的体系

现状1

现状2

现状3

今天会说什么...

前端架构解决的问题

问题1: 为产品的前端开发提供可复用模式

前端架构解决的问题

问题2: 打通产品开发链

前端架构解决的问题

问题3: 团队的高效运行

前端架构解决的问题

问题4: 创新和成长

小结: 前端基础架构的内容

  1. 开发环境*,平台工具(框架、库、发布工具等)
  2. 建立相关开发规范(跟BE/UE)、UI组件库(跟UE)
  3. 完善开发流程*
  4. 完善各种系统*
  5. 文档管理,知识库
  6. 分享和交流,新同学培训

*注:跟后端基础架构重叠

前端技术体系的构成

模板开发规范
前端开发代码风格Guidelines
性能
安全性
易用性
开发环境
开发流程
1. DoubanUI
  - 设计原型库(Stencil Kit)
  - 交互组件库(内容展现)
  - 模板(mako)组件库
2. Javascript框架 - Do
3. 功能库 - 地图、media、DragDrop ...
4. 自动化测试品质校验等工具...
产品级解决方案
创新成果
豆瓣技术体系

HTML设计模式

HTML设计模式

分离结构和样式

页面结构

<div class="wrapper page-type">
  <div id="header">header</div>
  <div id="content">
    <div class="main">content...</div>
    <div class="aside">content...</div>
  </div>
  <div id="footer">footer</div>
</div>

模块结构

<div class="mod" id="mod-id">
  <div class="hd">title</div>
  <div class="bd">content...</div>
  <div class="ft">footer</div>
</div>

分离结构和样式

<div class="mod" id="mod-id">
  <div class="hd">title</div>
  <div class="bd">content...</div>
</div>

分离结构和内容

<div class="mod" id="db-hotsong">
  <div class="hd">人气作品 · · · · · · </div>
  <div class="bd">
    <div class="songinfo">...</div>
    <div class="player">...</div>
    <div class="lyric">...</div>
  </div>
</div>

分离结构和内容

分离结构和内容

分离结构和内容

DoubanUI中的标准组件

模板组件库(实践中...)

<div class="intro">
  ${dui.entryItem(mod_culture['headline'])}
</div>
...
<div class="entry-list">
  ${dui.list(entry_list)}
</div>

通过本地开发环境,直接开发Mako模板。

做成更好用的工具(实践中...)

CSS三级结构

范例:Chivas项目

Javascript应用

超轻量级Javascript框架 - Do

解决模块重用问题

<div id="db-cover" class="mod">...</div>

Do.add('dialog-css', {path: 'http://t.douban.com/css/ui/dialog.css', type: 'css'});
Do.add('dialog', {path: 'http://t.douban.com/js/ui/dialog.js', type: 'js', requires: ['dialog-css']});

Do('dialog', function(){
    $('#db-cover .bn-std[href$=#rec]').click(function(e){
      e.preventDefault();
      dui.Dialog({
        title: '向我的友邻推荐芝华士骑士群声',
        width: 500,
        content: '
', buttons: [ { text: '确定', method: function (o) { $('form', o.node)[0].submit(); o.close(); } }, 'cancel' ] }).open(); }); });

统一的Javascript开发模式

现有的前端开发流程

改进的前端开发流程

对开发环节、Build环节、上线环节的改进

总结

Q & A