开放式类库的构建

63
开放式前端类库的构建 王保平 Sunday, July 17, 2011

Upload: lifesinger

Post on 16-Jan-2015

2.414 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 开放式类库的构建

开放式前端类库的构建王保平

Sunday, July 17, 2011

Page 2: 开放式类库的构建

Who am I ?

• 淘宝花名:玉伯• Frank Wang / lifesinger

• 王保平 / 射雕

• http://lifesinger.wordpress.com/

Sunday, July 17, 2011

Page 3: 开放式类库的构建

一、类库的两种风格

Sunday, July 17, 2011

Page 4: 开放式类库的构建

Sunday, July 17, 2011

Page 5: 开放式类库的构建

大教堂式风格• 梦想通过一个类库解决类库的所有问题• 大而全,代码质量一致• 文档丰富,社区成熟• 抽象层次多,重复代码少• 更新稳重、缓慢• 排他性

Sunday, July 17, 2011

Page 6: 开放式类库的构建

Sunday, July 17, 2011

Page 7: 开放式类库的构建

集市风格

• 尝试通过不同类库解决不同问题• 小巧专注,代码质量有好有坏• 文档用心,社区活跃• 蓬勃发展,快速更新• 大部分能组合使用,和谐共处

Sunday, July 17, 2011

Page 8: 开放式类库的构建

http://www.google.com/trends?q=yui%2Cjquery%2Cmootools%2Cdojo%2Csencha%2Cdojo

Sunday, July 17, 2011

Page 10: 开放式类库的构建

二、我们需要什么?

Sunday, July 17, 2011

Page 11: 开放式类库的构建

基础功能:DOM、Event、Ajax...

通用工具:Validator、Storage、Template...

常用组件:Calendar、Tabs、Dialog...

应用框架:MVC、Unit Testing、Module Loader...

Sunday, July 17, 2011

Page 12: 开放式类库的构建

Sunday, July 17, 2011

Page 13: 开放式类库的构建

Sunday, July 17, 2011

Page 14: 开放式类库的构建

http://addyosmani.com/resources/toolschart/chart.pdf

Sunday, July 17, 2011

Page 15: 开放式类库的构建

三、淘宝的选择

Sunday, July 17, 2011

Page 16: 开放式类库的构建

2008

Sunday, July 17, 2011

Page 17: 开放式类库的构建

2009

Sunday, July 17, 2011

Page 18: 开放式类库的构建

2008 - 2009• 主要使用 YUI2 base

• YUI 的组件特别是 UI 组件,体积太大,交互也不太符合国情

• 2009 年始,开始自主研发 suggest, kissy editor 等复杂组件

• 线上以 web pages 为主,比较简单

Sunday, July 17, 2011

Page 19: 开放式类库的构建

2010

Sunday, July 17, 2011

Page 20: 开放式类库的构建

2010• Yahoo 开始主推 YUI3

• YUI3 还不够成熟,组件更加庞大,在 IE6-7 下有性能隐患

• jQuery 发展迅猛,但难以入驻淘宝

• KISSY 逐步完善,开始有了 Core、Switchable、Calendar、AJBridge 等组件

• 线上开始出现 webww 等 web apps

Sunday, July 17, 2011

Page 21: 开放式类库的构建

KISSY

• 起初是个编辑器 KISSY Editor

• 核心部分,是 YUI2 与 jQuery 多夜情的产物

• 最有价值的部分是组件,是源自淘宝业务的需求

Sunday, July 17, 2011

Page 22: 开放式类库的构建

http://docs.kissyui.com/Sunday, July 17, 2011

Page 23: 开放式类库的构建

四、我们究竟需要什么

Sunday, July 17, 2011

Page 24: 开放式类库的构建

解决业务问题技能成长

做酷且有趣的应用

自由的时间

领略业界前沿

Sunday, July 17, 2011

Page 25: 开放式类库的构建

解决业务问题

Sunday, July 17, 2011

Page 26: 开放式类库的构建

类库/框架的选择远不如我们设想中的重要,只要不是太烂,一般都能很好的满足公司的业务需求。

Sunday, July 17, 2011

Page 27: 开放式类库的构建

为什么还会出现这么多轮子?

Sunday, July 17, 2011

Page 28: 开放式类库的构建

...我的观点中,必须说明两点,工程师,从职业素养上来说,我们的价值就是“把一件事做得更好、更专业、更完美,优秀,及至无可挑剔”。这本身就是对我们而言最有意义的事情。如果没有这种心态,那根本就谈不上专业、职业,以及职业修养。

-- 愚公(周爱民)

Sunday, July 17, 2011

Page 29: 开放式类库的构建

自造轮子经常遇到的问题

代码的进化与维护

新组件的开发成本高

头疼的文档 新人培训

Sunday, July 17, 2011

Page 30: 开放式类库的构建

类库的第三种风格

Sunday, July 17, 2011

Page 31: 开放式类库的构建

Sunday, July 17, 2011

Page 32: 开放式类库的构建

Sunday, July 17, 2011

Page 33: 开放式类库的构建

商场风格

不是集市

不是大教堂有门槛

品质保障开放式竞争

Sunday, July 17, 2011

Page 34: 开放式类库的构建

五、商城风格类库的构建

Sunday, July 17, 2011

Page 35: 开放式类库的构建

从脚本引入说起

Sunday, July 17, 2011

Page 36: 开放式类库的构建

Sunday, July 17, 2011

Page 37: 开放式类库的构建

Sunday, July 17, 2011

Page 38: 开放式类库的构建

Sunday, July 17, 2011

Page 39: 开放式类库的构建

CommonJS 的启示

Sunday, July 17, 2011

Page 40: 开放式类库的构建

在 JavaScript 中,有很多种方式来实现上面的功能。但是没有任何标准来规范如何实现。

Sunday, July 17, 2011

Page 41: 开放式类库的构建

• 已有的规范:ECMAScript, W3C,JSON...

• 未有的规范:Modules, Packages, JSGI, Promises...

Sunday, July 17, 2011

Page 42: 开放式类库的构建

• 马云:建立新商业文明• CommonJS: 构建 JavaScript 新生态圈

Sunday, July 17, 2011

Page 43: 开放式类库的构建

Sunday, July 17, 2011

Page 44: 开放式类库的构建

当 CommonJS 遭遇浏览器时

• 同步变异步• 跨域• 浏览器兼容性• 性能• ……

Sunday, July 17, 2011

Page 45: 开放式类库的构建

等待 or 前行?Sunday, July 17, 2011

Page 46: 开放式类库的构建

SeaJS 之路

Sunday, July 17, 2011

Page 47: 开放式类库的构建

提供最基础的功能

规范最基本的约定

百花齐放 优胜劣汰

丛林法则

Sunday, July 17, 2011

Page 48: 开放式类库的构建

基本理念

• 海纳百川、有容乃大• 保持简单、避免重复

Sunday, July 17, 2011

Page 49: 开放式类库的构建

世界上有很多聪明人,很多事情已经做得非常棒。有太多更需要投入的地方,的确不应该在别人已经做得很好的地方浪费时间了。

-- 大教堂与集市

Sunday, July 17, 2011

Page 50: 开放式类库的构建

module authoring format

module loader

...

biz mod a

biz mod b biz

mod c ...

Sunday, July 17, 2011

Page 51: 开放式类库的构建

• 一个文件是一个模块• require 引入依赖的模块

• exports 向外提供接口

• module 存储模块元信息

Sunday, July 17, 2011

Page 52: 开放式类库的构建

Sunday, July 17, 2011

Page 53: 开放式类库的构建

Sunday, July 17, 2011

Page 54: 开放式类库的构建

demo

Sunday, July 17, 2011

Page 55: 开放式类库的构建

Sunday, July 17, 2011

Page 56: 开放式类库的构建

Sunday, July 17, 2011

Page 57: 开放式类库的构建

业务需求

版本升级

组件增加

目标

时间

空间

Sunday, July 17, 2011

Page 58: 开放式类库的构建

路走对了,会有不少惊喜

Sunday, July 17, 2011

Page 59: 开放式类库的构建

在线本地调试

Sunday, July 17, 2011

Page 60: 开放式类库的构建

require(file.less)

Sunday, July 17, 2011

Page 61: 开放式类库的构建

require(file.coffee)

Sunday, July 17, 2011

Page 62: 开放式类库的构建

路走对了,就不怕远

Sunday, July 17, 2011

Page 63: 开放式类库的构建

FAQ

• Twitter: @lifesinger

• 新浪微博:@玉伯也叫射雕

• 阿里旺旺:玉伯• 最喜欢的:[email protected]

Sunday, July 17, 2011