淘宝前端技术巡礼

119
F2E@Taobao 北京研发中心 2012-04 懂一点前端技术,不亦乐乎 灵玉/拔赤 – F2E@Taobao

Upload: jay-li

Post on 28-Jan-2015

86.081 views

Category:

Technology


0 download

DESCRIPTION

淘宝前端技术

TRANSCRIPT

Page 1: 淘宝前端技术巡礼

F2E@Taobao

淘宝北京研发中心 2012-04

懂一点前端技术,不亦乐乎

灵玉/拔赤 – F2E@Taobao

演示者
演示文稿备注
1、F2E:Front End Engineer 2、《javascript忍者的秘密》John Resig
Page 2: 淘宝前端技术巡礼

• Who Are We?淘宝前端开发工程师

http://ued.taobao.com

Page 3: 淘宝前端技术巡礼

• 前端技术的演进

• 技术实践

• 知识体系

• 未来展望

Topic

Page 4: 淘宝前端技术巡礼

2003

Page 5: 淘宝前端技术巡礼

2004

Page 6: 淘宝前端技术巡礼

2005

Page 7: 淘宝前端技术巡礼

2006

Page 8: 淘宝前端技术巡礼

• 静态页面,表格嵌套

• 无调试工具

• 兼职的“页面开发”,单一浏览器

• 谈不上“用户体验”

2003-2006

Page 9: 淘宝前端技术巡礼

HTML

CSS

FW,PS,DW..工具

浏览器Internet�Exploer

SEO

Page 10: 淘宝前端技术巡礼

2007

Page 11: 淘宝前端技术巡礼

• 交互复杂,页面“动”起来

• 新岗位:“Web前端开发工程师”

• 新增流程环节,进入磨合期

• 制定规范

2006-2007

Page 12: 淘宝前端技术巡礼

引入开发流程

Page 13: 淘宝前端技术巡礼

HTML

CSS

FW,PS,DW..工具

浏览器Internet�Exploer

SEO

Page 14: 淘宝前端技术巡礼

JS,W3C,HTML4..

标准兼容

Firefox,Firebug…调试工具

用户体验

HTML

CSS

FW,PS,DW..工具

浏览器Internet�Exploer

SEO

Page 15: 淘宝前端技术巡礼

2008

Page 16: 淘宝前端技术巡礼

• 业务拆分,网站庞大

• 页面变慢

• 大量使用Ajax

• 内容暴增,内容管理成本太高

• 页面排版亟需重新规划

2007-2008

Page 17: 淘宝前端技术巡礼

JS,W3C,HTML4..

标准兼容

Firefox,Firebug…调试工具

用户体验

HTML

CSS

SEO

FW,PS,DW..工具

浏览器Internet�Exploer

Page 18: 淘宝前端技术巡礼

部署

JS,W3C,HTML4..

标准兼容

Firefox,Firebug…调试工具

用户体验

HTML

CSS

SEO

FW,PS,DW..工具

浏览器Internet�Exploer

栅格化Reset/Grid.css.

库/框架YUI2/Tbra..

组件库

TMSJslint,YC,Ant..

性能优化

Page 19: 淘宝前端技术巡礼

网站栅格化

Page 20: 淘宝前端技术巡礼
Page 21: 淘宝前端技术巡礼
Page 22: 淘宝前端技术巡礼

2009

Page 23: 淘宝前端技术巡礼

2010

Page 24: 淘宝前端技术巡礼

• 前端性能问题愈加严峻

• 多人协作/前端架构/Combo/模块化

• YUI/Tbra无法满足开发需求

• 组件需要本地化

2009-2010

Page 25: 淘宝前端技术巡礼

部署

JS,W3C,HTML4..

标准兼容

Firefox,Firebug…调试工具

用户体验

HTML

CSS

SEO

FW,PS,DW..工具

浏览器Internet�Exploer

栅格化Reset/Grid.css.

库/框架YUI2/Tbra..

组件库

TMSJslint,YC,Ant..

性能优化

Page 26: 淘宝前端技术巡礼

部署

JS,W3C,HTML4..

标准兼容

Firefox,Firebug…调试工具

用户体验

HTML

CSS

SEO

FW,PS,DW..工具

浏览器Internet�Exploer

栅格化Reset/Grid.css.

库/框架YUI2/Tbra..

组件库

TMSJslint,YC,Ant..

性能优化

前端架构YUI3,Kissy…

Page 27: 淘宝前端技术巡礼

2011

Page 28: 淘宝前端技术巡礼

2011

Page 29: 淘宝前端技术巡礼

• 大尺寸屏幕

• 高级浏览器渐进增强

• 移动终端 (iOS/Android)

• OPOA(单页应用)

• 更“极致”的用户体验

2010-2011

Page 30: 淘宝前端技术巡礼

部署

JS,W3C,HTML4..

标准兼容

Firefox,Firebug…调试工具

用户体验

HTML

CSS

SEO

FW,PS,DW..工具

浏览器Internet�Exploer

栅格化Reset/Grid.css.

库/框架YUI2/Tbra..

组件库

TMSJslint,YC,Ant..

性能优化

前端架构YUI3,Kissy…

Page 31: 淘宝前端技术巡礼

部署

JS,W3C,HTML4..

标准兼容

Firefox,Firebug…调试工具

用户体验

HTML

CSS

SEO

FW,PS,DW..工具

浏览器Internet�Exploer

栅格化Reset/Grid.css.

库/框架YUI2/Tbra..

组件库

TMSJslint,YC,Ant..

性能优化

前端架构YUI3,Kissy…

前端MVC

HTML5CSS3

移动终端

Page 32: 淘宝前端技术巡礼

与时俱进,充满挑战

发现问题,解决问题

Page 33: 淘宝前端技术巡礼

问题:什么是前端开发?

Page 34: 淘宝前端技术巡礼

回答:

JavaScript/CSS/Html…

Page 35: 淘宝前端技术巡礼

回答:

基于浏览器的编程开发

Page 36: 淘宝前端技术巡礼

Yahoo 技术栈

Page 37: 淘宝前端技术巡礼

前端与后端

Page 38: 淘宝前端技术巡礼

server

Page 39: 淘宝前端技术巡礼

HTML

server

内容呈现

Page 40: 淘宝前端技术巡礼

HTML

server

内容呈现

[�理论沉淀 /�最佳实践 ]

开发/调试/Bugfix…

Page 41: 淘宝前端技术巡礼

HTML DOM JavaScript

CSS

BOM API

DOM API

server

内容呈现

[�理论沉淀 /�最佳实践 ]

开发/调试/Bugfix…

Page 42: 淘宝前端技术巡礼

HTML DOM JavaScript

CSS

BOM API

DOM API

YUI/Kissy/jQuery…

server

内容呈现

[�理论沉淀 /�最佳实践 ]

数据交换xmlJsonjsonp

开发/调试/Bugfix…

Page 43: 淘宝前端技术巡礼

HTML DOM JavaScript

CSS

BOM API

DOM API

YUI/Kissy/jQuery…

Safari

Macintosh Windows Mobile

Firefox Opera IE6~IE9 Firefox Chrome Safari Chrome

server

内容呈现

[�理论沉淀 /�最佳实践 ]

数据交换xmlJsonjsonp

开发/调试/Bugfix…

Page 44: 淘宝前端技术巡礼

HTML DOM JavaScript

CSS

BOM API

DOM API

YUI/Kissy/jQuery…

Safari

Macintosh Windows Mobile

Firefox Opera IE6~IE9 Firefox Chrome Safari Chrome

server

内容呈现

[�理论沉淀 /�最佳实践 ]

数据交换xmlJsonjsonp

开发/调试/Bugfix…

技术维度 : x 6

操作系统 : x 3

浏览器平台 : x 6

渲染模式 : x 2

=216

Page 45: 淘宝前端技术巡礼

兼容性,可访问性,视觉设计

信息架构,前端安全,上线部署

标准化,性能优化,测试基准,移动设备

响应式适配,交互设计

Page 46: 淘宝前端技术巡礼

和后端相比,前端:

• 无法编译

• 代码开源

• 客户端环境不可预知

• 不能安装或存储

• 数据无法隐藏

• 更关注Web性能

演示者
演示文稿备注
1、javascript是一种解释行编程语言 2、javascript不能生成可独立执行的可执行文件 3、编译语言在应用源程序执行前,目标代码字节码
Page 47: 淘宝前端技术巡礼

Douglas Crockford:“前端工程师需要面对的软件开发环境

实在是糟糕透顶,让人难以置信!”

演示者
演示文稿备注
JavaScript的精神领袖,领域权威,是JSON、JSLint、JSMin和ADSafe之父
Page 48: 淘宝前端技术巡礼

http://www.flickr.com/photos/lijing00333/6820318400/in/photostream

Page 49: 淘宝前端技术巡礼
Page 50: 淘宝前端技术巡礼

• Web应用的基石:HTML

• 程序员的画笔:CSS

• 潜力无限的语言:JavaScript

Page 51: 淘宝前端技术巡礼

I Know HTML!<html>

<!—how to make love-->

Page 52: 淘宝前端技术巡礼

• 1989 Tim Berners-Lee 发明HTML

• 1993 第一款浏览器“Mosaic”发布

• 1994 W3C成立

• 1997 HTML 3.2

• 1999 HTML4.01

• 2000 XHTML 1.0

• 2008 HTML5

http://www.w3.org/People/Raggett/book4/ch02.html

Page 53: 淘宝前端技术巡礼
Page 54: 淘宝前端技术巡礼

http://reference.sitepoint.com/html/elements

常用元素

• 结构:p,div,span,h1-h6,body…

• 列表:ul,ol,dl,li,dd,dt

• 文本:a,em,strong,pre…

• 表单:form,input,button,label…

• 媒体:img,object…

• 表格:table,tr,td,caption,tbody…

• …

Page 55: 淘宝前端技术巡礼

html5 标签

progress

nav

canvas

datalist

time

figureaudio

section

rubyarticle

keygen

http://www.w3.org/TR/html5/

演示者
演示文稿备注
1、proggress:显示javascript中耗费时间函数的进度 2、time:标签定义公历的时间或日期,以机器可读的方式对日期和时间进行编码,添加到用户日程表中 3、figure:标签规定独立的流内容(图像、图表、照片、代码等等) 4、keygen:标签规定用于表单的密钥对生成器字段,私钥存储在本地,公钥发送到服务器 5、audio:标签定义声音
Page 56: 淘宝前端技术巡礼

html5 标签

progress

nav

canvas

datalist

time

figureaudio

section

rubyarticle

keygen

http://www.w3.org/TR/html5/

Page 57: 淘宝前端技术巡礼

<header><h1><a href=“#”><strong>I</strong> love <em>u</em>

</a><span>I am Jay</span>

</h1><nav><ul><li>my journal</li><li>about me</li><li>the sandbox</li>

</ul></nav>

</header>

语义化的html

Page 58: 淘宝前端技术巡礼
Page 59: 淘宝前端技术巡礼

程序员的画笔:CSS

Page 60: 淘宝前端技术巡礼

• 1994 Hakon Wium Lie提出CSS概念

• 1996 CSS Level 1

• 1997 CSSWorking Group

• 1998 CSS Level 2

• CSS Level 3 – 进化中…

http://www.w3.org/TR/css

Page 61: 淘宝前端技术巡礼

h1 {color:red;font-size:14px;

}

选择器 声明 声明

属性 值 属性 值

Page 62: 淘宝前端技术巡礼

http://css-tricks.com/the-css-box-model/

盒模型

Page 63: 淘宝前端技术巡礼

http://www.w3.org/TR/CSS2/box.html

Page 64: 淘宝前端技术巡礼

http://www.w3.org/TR/CSS2/box.html

display:block

display:inline

display:inline-block

Page 65: 淘宝前端技术巡礼

• p、div、h1-h6 等是 block 元素

• span、a、img 等是 inline 元素

元素显示:display

http://www.w3school.com.cn/css/pr_class_display.asp

Page 66: 淘宝前端技术巡礼

http://www.quirksmode.org/css/contents.html

Page 67: 淘宝前端技术巡礼

#box {color:black; /*firefox*/color:red\9; /*所有ie*/*color:blue; /*ie7*/_color:green; /*ie6*/

}

Hack(样式补丁)

Page 68: 淘宝前端技术巡礼

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" " http://www.w3.org/TR/html4/strict.dtd">

<!DOCTYPE HTML>

指定Doctype!

Page 69: 淘宝前端技术巡礼

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" " http://www.w3.org/TR/html4/strict.dtd">

<!DOCTYPE HTML>

指定Doctype!

Page 70: 淘宝前端技术巡礼

潜力无限的语言:JavaScript

Page 71: 淘宝前端技术巡礼

• 1995 JavaScript 诞生

• 1996 ECMAScript 诞生

• 1999 ECMAScript 3

• 2009 ECMAScript 5

• ECMAScript Harmony 正在讨论中…

http://zh.wikipedia.org/zh-cn/JavaScript

Page 72: 淘宝前端技术巡礼

0.24%0.29%

0.26%

0.13% 0.13% 0.12%

0.04%

0.15%0.10%

0.56%

0.05%

Google Code中语言出现

fuck一词的比率

Page 73: 淘宝前端技术巡礼

Java和JavaScript的关系,

就和雷锋和雷锋塔一样

Page 74: 淘宝前端技术巡礼

我对JavaScript既爱又恨,它的优秀之处并非原创,它的原创之处并不优秀…

-- Brendan Eich

http://www.ruanyifeng.com/blog/2011/06/birth_of_javascript.html

Page 75: 淘宝前端技术巡礼

JavaScript

C

JavaScheme

Self

Page 76: 淘宝前端技术巡礼

JavaScript

C

JavaScheme

Self

基本语法

Page 77: 淘宝前端技术巡礼

JavaScript

C

JavaScheme

Self

基本语法

数据类型/内存管理

Page 78: 淘宝前端技术巡礼

JavaScript

C

JavaScheme

Self

基本语法

数据类型/内存管理

函数式编程

Page 79: 淘宝前端技术巡礼

JavaScript

C

JavaScheme

Self

基本语法

数据类型/内存管理

函数式编程

基于原型

Page 80: 淘宝前端技术巡礼

http://book.douban.com/subject/3590768/

The Good Parts:JavaScript语言精华

Page 81: 淘宝前端技术巡礼
Page 82: 淘宝前端技术巡礼

闭包

for(var i = 0;i<elements.length;i++){elements[i].attachEvent ('click',function(){alert(i);

});}

Page 83: 淘宝前端技术巡礼

闭包

for(var i = 0;i<elements.length;i++){(function(n){elements[n].attachEvent('click',function(){alert(n);

});})(i);

}

Page 84: 淘宝前端技术巡礼

var el = $(‘div’);el.addClass(‘new Class’);el.text(‘Hello World’);el.show();

链式调用

$(‘div’).addClass(‘new Class’).text(‘Hello World’).show();

Page 85: 淘宝前端技术巡礼

JS Patterns:JavaScript独有的编程模式

http://book.douban.com/subject/5252901/

Page 86: 淘宝前端技术巡礼

兼容性,可访问性,视觉设计

信息架构,前端安全,上线部署

标准化,性能优化,测试基准,移动设备

响应式适配,交互设计

Page 87: 淘宝前端技术巡礼

问题:为什么要关注性能?

Page 88: 淘宝前端技术巡礼

问题:为什么要关注性能?

前端工程师

Page 89: 淘宝前端技术巡礼

Steve Souders:“网页展现过程百分之八十到九十的时

间消耗在了浏览器端…”

Page 90: 淘宝前端技术巡礼
Page 91: 淘宝前端技术巡礼

Web性能优化手段1. 减少HTTP请求数

2. 使用CDN

3. 给HTTP头部添加过期时间

4. 使用Gzip压缩

5. 样式表置于页面最前面

6. 把脚本放在最后

7. 使用外部JavaScript和CSS

8. 压缩(Minify)JavaScript和CSS

9. …

Page 92: 淘宝前端技术巡礼

性能优化:减少页面首屏等待时间!

Page 93: 淘宝前端技术巡礼

0.5s 1.0s 1.5s 2.0s 3s

ebay

amazone

dangdang

360buy

taobao

网站渲染速度

Page 94: 淘宝前端技术巡礼

高性能网站建设(进阶)指南,高性能JavaScript

http://book.douban.com/subject/3132277/http://book.douban.com/subject/4719162/http://book.douban.com/subject/5362856/

Page 95: 淘宝前端技术巡礼

JavaScript类库的世界

Page 96: 淘宝前端技术巡礼
演示者
演示文稿备注
1、zepto.js 移动端javascript框架 2、LABjs 工具,按需加载javascript文件 3、seajs 模块加载框架 3、scrollability 移动web应用滚屏动态效果 4、pdf.js,html5技术的PDF解析器 5、Knockout 是个JavaScript library,帮助创建丰富的显示和编辑器UI,通过干净的底层数据模型。你可以在任何时候动态更新UI的选择部分。 6、jStorage用于jquery浏览器端缓存数据的包装插件 7、Underscore.js是一个实用的JavaScript工具框架,提供了与Prototype.js(或Ruby) 相似的功能编程支持,但没有对 JavaScript 内置的对象进行扩展。 8、AmplifyJS 是一套组件集合,简化所有表单数据处理 9、spine mvc框架 10、Jasmine 是一个简易的JS单元测试框架 11、mustache 基于javascript 实现的模板引擎
Page 97: 淘宝前端技术巡礼
演示者
演示文稿备注
1、Sencha基于最新的WEB标准 Sencha Touch是专门为移动设备开发应用的Javascript框架 2、Closure Library,Google的标准JavaScript类库 3、Tangram是Baidu开发的一套简单可依赖的Javascript库
Page 98: 淘宝前端技术巡礼

大而全 vs 小而精

Page 99: 淘宝前端技术巡礼

策略不同,目标一致

Page 100: 淘宝前端技术巡礼

jQuery 简洁 API 的背后…

Page 101: 淘宝前端技术巡礼

兼容性封装:Dom、Event、Ajax…

工具函数:OO、CustomEvent、Plugin…

组件封装:Calendar、Menu、Tabview…

应用框架:MVC、UnitTest、ModuleLoader

JavaScript类库的封装

Page 102: 淘宝前端技术巡礼

小巧灵活,简洁实用

本地化的组件

性能优越

特性支持源自淘宝内部需求

及时响应的bugfix

淘宝前端库:Kissy

Page 103: 淘宝前端技术巡礼

小巧灵活,简洁实用

本地化的组件

性能优越

特性支持源自淘宝内部需求

及时响应的bugfix

淘宝前端库:Kissy

Page 104: 淘宝前端技术巡礼

http://github.com/kissyteam/kissy

为Kissy贡献代码

Page 105: 淘宝前端技术巡礼

前后端的协作

Page 106: 淘宝前端技术巡礼

静态页面 套页面(前端) (后端)

html/css/js php/java/mv

Page 107: 淘宝前端技术巡礼

静态模板 数据接口(前端) (后端)

html/css/jsjavascriptMVC

php/java

Page 108: 淘宝前端技术巡礼

静态模板 数据接口(前端) (后端)

html/css/jsjavascriptMVC

php/java

更专注于UI和交互!

Page 109: 淘宝前端技术巡礼

静态模板 数据接口(前端) (后端)

html/css/jsjavascriptMVC

php/java

更专注于UI和交互!

更专注于底层数据!

Page 110: 淘宝前端技术巡礼

http://twitter.com

PCTablet

Page 111: 淘宝前端技术巡礼

JavaScript设计模式,JS Web Apps

http://book.douban.com/subject/3329540/

http://book.douban.com/subject/6397064/

Page 112: 淘宝前端技术巡礼

So:多读书,读好书

http://limu.iteye.com/blog/1267475

Page 113: 淘宝前端技术巡礼

JS高级程序设计(第三版),JS权威指南(第六版)

http://book.douban.com/subject/4886879/

http://book.douban.com/subject/2228378/

Page 114: 淘宝前端技术巡礼

• 读好书

• 勤学多练

• 实战中进阶

Page 115: 淘宝前端技术巡礼

Taobao Opensource

演示者
演示文稿备注
Less 一种动态样式语言 In.js 异步加载js框架 Sandbox 脚本加载器.
Page 116: 淘宝前端技术巡礼

Taobao F2E 编辑部

Page 117: 淘宝前端技术巡礼

前端工程师,Enjoy yourself…

Page 118: 淘宝前端技术巡礼

ref

http://www.slideshare.net/lifesinger/ss-8533438http://limu.iteye.com/blog/1267475http://www.slideshare.net/lijing00333/html5taobaohttp://www.slideshare.net/lijing00333/haslayouthttp://www.slideshare.net/lijing00333/2011-6516501http://ued.taobao.com/blog/2010/04/29/qcon_notes

Page 119: 淘宝前端技术巡礼

@jayliF2E & Translator

htt[p://[email protected]