SlideShare a Scribd company logo
1 of 51
Download to read offline
YUI 3.x 简介
 拔赤 bachi@taobao.com
http://www.uedagazine.com
         2010-06-03
YUI 体系
    YUI 2.x            YUI 3.x

YUI Compressor    Combo Handler

YUI PHP Loader     YUI Builder

   YUI Test            Yslow
http://developer.yahoo.com/yui/3/
YUI 2.x的发展
YUI 3.x初探
YUI 3.x新手入门
Node & NodeList
YUI 3.x中的OO
YUI 3.x中的杂项
YUI 2.x的发展
YUI 3.x初探
YUI 3.x新手入门
Node & NodeList
YUI 3.x中的OO
YUI 3.x中的杂项
库时代…
2005 - prototype,dojo
2006 - jquery,yui,mootools
2007 - ext
2008 - QooXDoo
2009 - …
“库”所作的事情

1,初级封装(Dom,Event,Ajax)
2,中级封装(拖拽、动画)
3,高级封装(widget)(日历,Treeview)
4,扩展性(OOP,Plugin。。。)
YUI 2.x的发展

2006/2/13 YUI beta(0.10.0)
~
2009/9/14 YUI 2.8.0
YUI 2.x 的特色

1,完整的工具集(使用方便)
2,颗粒化设计(团队开发)
3,强沙箱(不仅仅是闭包)
4,yui combo(性能提升)
YUI 2.x的发展

YUI 3.x初探
YUI 3.x新手入门
Node & NodeList
YUI 3.x中的OO
YUI 3.x中的杂项
对YUI的一次彻底重构




   YUI3.x的架构
YUI 3.x的发展

2008/8/13 YUI3 pr1
2008/12/9 YUI3 pr2
2009/6/24 YUI3 beta1
2009/9/26 YUI3 1
2010 …
增强的YUI
1,加强工具集(强化了的工具集)
2,彻底的模块化设计(模块间的解耦)
3,YUI组件模板(规格统一的组件模型)
4,更简洁的语法(书写阅读更流畅)
5,更完整的底层机制(AOP、CustomEvent、Plugin)
YUI 2.x 的书写风格
YUI 3.x的书写风格
YUI 3.x 架构
Seed
Core
Component Framework
Component
Widgets
Seed

种子
开发者只需要加载种子就
可以获得YUI的所有组件
Core


库核心
包含Dom,Event和新的
Node
Component Framework


       组件框架
       开发widgets的基本框架
Component


工具、控制
包含工具、特效、控
制项
YUI 2.x的发展
YUI 3.x初探
YUI 3.x新手入门
Node & NodeList
YUI 3.x中的OO
YUI 3.x中的杂项
观念1
使用YUI3.x有两种方法
 用Seed加载
 用传统的Script引用法
Seed方法

<script src="yui/3.0.0/build/yui/yui-min.js"></script>
<script>
YUI().use('node',function(Y){
/*
Y就是这个Scope中
的YUI实例,可以通过Y来
获取相关方法
*/
Y.get('#demo');
});
</script>
传统Script方法
http://developer.yahoo.com/yui/3/configurator/
观念2
YUI3.x是Instance-based
  每个Instance都是相互独立
  且互不干扰的
Instace-based - 可实例化
YUI 2.x
   YAHOO作为全局变量,只能有一个,很容易
   被修改
YAHOO.widget.Editor = DoSth;//开发者A写的
...
YAHOO.widget.Editor = DoNoth;//开发者B写的
YUI 3.x
   YUI() 闭包中的Y是一个全新的实例
YUI().use('editor',function(Y){
Y.Editor = DoSth;//开发者A写的
});
YUI().use('rich-editor',function(Y){
Y.Editor = DoNoth;//开发者B写的
});
同一个页面中多个App的实现




    http://my.yahoo.com/
同一个页面中多个App的实现




   http://xiaoshuo.taobao.com/
Instace-based 的优势

1,一个页面上有多个程序
2,每个Scope有自己的YUI Instance,只带有
所需的组件
3,每个Instance相互独立,方便多人开发
4,Sandbox可以提供安全的闭包
5,每个Instance的YUI3.x的版本可以不同
观念3
YUI可以被用作构造器
 轻易变身
YUI构造器
推荐的写法
YUI().use('node',function(Y){
//..
});


也可以这样写

var QQ = YUI();//生成一个新的YUI实例
QQ.use('node',function(Q){
//..
});
观念4
YUI3.x可以将任意库框架进来
 YUI3.x是框架,非库
YUI3.x可以将任意库框架进来

YUI({
modules:{
jquery:{
fullpath:'jquery.js'
}
}
}).use('jquery',function(Y){
$('#foo').toggle('myClass');
});
YUI3.x的四大观念

1,两种引入方式
2,每个Scope中有独立的实例
3,YUI的两种构造风格
5,YUI3.x可以框架住任何库
YUI 2.x的发展
YUI 3.x初探
YUI 3.x新手入门
Node & NodeList
YUI 3.x中的OO
YUI 3.x中的杂项
Selector
YUI 2.x
var D = YAHOO.util.Dom;
var el = D.get('foo');
var items = D.getElementsByClassName('selected','li',
el);


YUI 3.x
var items = Y.all('#foo li.selected');
对Dom的Wrap
YUI 2.x 用DOM取到的依然是TMLElement
var D = YAHOO.util.Dom;
var el = D.get('foo');
alert(el.nodeName);


YUI 3.x
var el = Y.one('#foo');
alert(el.nodeName);//undefined
alert(el.get('NodeName'));//DIVs
封装前后的比较
    YUI Node      HTMLElement

appendChild()    appendChild()
removeChild()    removeChild()
parentNode       parentNode

contains()       contains()
insertBefore()   insertBefore()
children         children

addClass()
toggleClass()
region
统一的接口
Node
   addClass方法
var el = Y.one('#foo')
el.addClass('red');


NodeList
   addClass方法
var items = Y.all('#foo li');
items.addClass('red');
Event
事件绑定方法1
Y.on('click',function(e){
//处理事件
},'#foo');


事件绑定方法2
var el = Y.one('#foo');
el.on('click',function(e){
//处理事件
});
Event - 被封装后的“事件”

YUI3.x对事件做了封装,而非单纯的DOM
Event
被封装后的“事件”
YUI 2.x
var E = YAHOO.util.Event;
E.on('foo','click',function(e){
alert(e);//click
E.stopEvent(e);//阻止冒泡
});
YUI 3.x
Y.on('click',function(e){
alert(e.type);//undefined
e.halt();//阻止冒泡
},'#foo');
YUI3的所有事件都是CustomEvent
 YUI 3.x
var el = Y.one('#foo');
el.on('click',function(e){
//..
});
var p = new Y.Calendar('#calendar');
p.on('range_select',function(e){
//..
});
YUI 2.x的发展
YUI 3.x初探
YUI 3.x新手入门
Node & NodeList
YUI 3.x中的OO
YUI 3.x中的杂项
YUI 3.x中的OO
对象
  Y.clone(克隆)
  Y.merge(合并)
  Y.aggregate(挂载)
函数
  Y.augment(扩充
  类)
  Y.extend(继承)
  Y.bind(绑定上下
  文)
基础
YUI 2.x的发展
YUI 3.x初探
YUI 3.x新手入门
Node & NodeList
YUI 3.x中的OO
YUI 3.x中的杂项
YUI 3.x中的杂项
 Debug
 IO
 Queue
Debug
YUI 2.x
  alert()
  YAHOO.log()
  console.log()
  YAHOO.dump()

YUI 3.x
  Y.log()
  Y.dump()
IO & Queue

IO
     YUI2.x的Connection,增加了flash跨域
Queue
     异步队列
YUI 3.x的设计线索

1,YUI2.x 分散式架构、初学者理解困难
2,YUI3.x 内建YUI2.x的Loader、Element、
Selector
3,易用性 和 专业性之间的权衡
Q&A

More Related Content

Similar to Yui3 初探

YUI介绍和使用YUI构建web应用
YUI介绍和使用YUI构建web应用YUI介绍和使用YUI构建web应用
YUI介绍和使用YUI构建web应用
Adam Lu
 
前端杂乱分享
前端杂乱分享前端杂乱分享
前端杂乱分享
shyboyzk
 
用Jquery实现拖拽层
用Jquery实现拖拽层用Jquery实现拖拽层
用Jquery实现拖拽层
yiditushe
 
YUIconf2010介绍
YUIconf2010介绍YUIconf2010介绍
YUIconf2010介绍
ling yu
 
由一个简单的程序谈起--之四
由一个简单的程序谈起--之四由一个简单的程序谈起--之四
由一个简单的程序谈起--之四
yiditushe
 
YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練
Joseph Chiang
 
jQuery底层架构
jQuery底层架构jQuery底层架构
jQuery底层架构
fangdeng
 
由一个简单的程序谈起――之二
由一个简单的程序谈起――之二由一个简单的程序谈起――之二
由一个简单的程序谈起――之二
yiditushe
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
jay li
 

Similar to Yui3 初探 (20)

YUI介绍和使用YUI构建web应用
YUI介绍和使用YUI构建web应用YUI介绍和使用YUI构建web应用
YUI介绍和使用YUI构建web应用
 
YUI 3 菜鳥救星
YUI 3 菜鳥救星YUI 3 菜鳥救星
YUI 3 菜鳥救星
 
前端杂乱分享
前端杂乱分享前端杂乱分享
前端杂乱分享
 
用Jquery实现拖拽层
用Jquery实现拖拽层用Jquery实现拖拽层
用Jquery实现拖拽层
 
YUIconf2010介绍
YUIconf2010介绍YUIconf2010介绍
YUIconf2010介绍
 
由一个简单的程序谈起--之四
由一个简单的程序谈起--之四由一个简单的程序谈起--之四
由一个简单的程序谈起--之四
 
180518 ntut js and node
180518 ntut js and node180518 ntut js and node
180518 ntut js and node
 
YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練
 
Unity遊戲程式設計(05) 2D移動與碰撞處理II
Unity遊戲程式設計(05) 2D移動與碰撞處理IIUnity遊戲程式設計(05) 2D移動與碰撞處理II
Unity遊戲程式設計(05) 2D移動與碰撞處理II
 
jQuery底层架构
jQuery底层架构jQuery底层架构
jQuery底层架构
 
由一个简单的程序谈起――之二
由一个简单的程序谈起――之二由一个简单的程序谈起――之二
由一个简单的程序谈起――之二
 
Unity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理IUnity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理I
 
Unity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理IUnity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理I
 
jQuery介绍@disandu.com
jQuery介绍@disandu.comjQuery介绍@disandu.com
jQuery介绍@disandu.com
 
Yui rocks
Yui rocksYui rocks
Yui rocks
 
Chinese hans
Chinese hansChinese hans
Chinese hans
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
 
JavaScript Code Quality
JavaScript Code QualityJavaScript Code Quality
JavaScript Code Quality
 
20201024_aigo_lab2_fruit_classification_omnixri
20201024_aigo_lab2_fruit_classification_omnixri20201024_aigo_lab2_fruit_classification_omnixri
20201024_aigo_lab2_fruit_classification_omnixri
 
管窥Nodejs的事件——基于观察者模式的事件队列
管窥Nodejs的事件——基于观察者模式的事件队列管窥Nodejs的事件——基于观察者模式的事件队列
管窥Nodejs的事件——基于观察者模式的事件队列
 

More from isnull

站点报告模板
站点报告模板站点报告模板
站点报告模板
isnull
 
My sql数据库开发的三十六条军规
My sql数据库开发的三十六条军规My sql数据库开发的三十六条军规
My sql数据库开发的三十六条军规
isnull
 
基于Web的项目管理工具redmine
基于Web的项目管理工具redmine基于Web的项目管理工具redmine
基于Web的项目管理工具redmine
isnull
 
雷志兴 百度前端基础平台与架构分享
雷志兴 百度前端基础平台与架构分享雷志兴 百度前端基础平台与架构分享
雷志兴 百度前端基础平台与架构分享
isnull
 
张勇 搜搜前端架构
张勇 搜搜前端架构张勇 搜搜前端架构
张勇 搜搜前端架构
isnull
 
张克军 豆瓣前端团队的工作方式
张克军 豆瓣前端团队的工作方式张克军 豆瓣前端团队的工作方式
张克军 豆瓣前端团队的工作方式
isnull
 
杨皓 新浪博客前端架构分享
杨皓 新浪博客前端架构分享杨皓 新浪博客前端架构分享
杨皓 新浪博客前端架构分享
isnull
 
Barcelona apc mem2010
Barcelona apc mem2010Barcelona apc mem2010
Barcelona apc mem2010
isnull
 
Mysql introduction-and-performance-optimization
Mysql introduction-and-performance-optimizationMysql introduction-and-performance-optimization
Mysql introduction-and-performance-optimization
isnull
 
Designofhtml5
Designofhtml5Designofhtml5
Designofhtml5
isnull
 
Mysql开发与优化
Mysql开发与优化Mysql开发与优化
Mysql开发与优化
isnull
 
我的Ubuntu之旅
我的Ubuntu之旅我的Ubuntu之旅
我的Ubuntu之旅
isnull
 
软件工程&架构
软件工程&架构软件工程&架构
软件工程&架构
isnull
 
淘宝分布式数据处理实践
淘宝分布式数据处理实践淘宝分布式数据处理实践
淘宝分布式数据处理实践
isnull
 
阿里巴巴 招聘技巧培训
阿里巴巴 招聘技巧培训阿里巴巴 招聘技巧培训
阿里巴巴 招聘技巧培训
isnull
 
183银行服务器下载说明
183银行服务器下载说明183银行服务器下载说明
183银行服务器下载说明
isnull
 
人人网技术经理张铁安 Feed系统结构浅析
人人网技术经理张铁安 Feed系统结构浅析人人网技术经理张铁安 Feed系统结构浅析
人人网技术经理张铁安 Feed系统结构浅析
isnull
 
Data on the web
Data on the webData on the web
Data on the web
isnull
 

More from isnull (20)

站点报告模板
站点报告模板站点报告模板
站点报告模板
 
My sql数据库开发的三十六条军规
My sql数据库开发的三十六条军规My sql数据库开发的三十六条军规
My sql数据库开发的三十六条军规
 
基于Web的项目管理工具redmine
基于Web的项目管理工具redmine基于Web的项目管理工具redmine
基于Web的项目管理工具redmine
 
雷志兴 百度前端基础平台与架构分享
雷志兴 百度前端基础平台与架构分享雷志兴 百度前端基础平台与架构分享
雷志兴 百度前端基础平台与架构分享
 
张勇 搜搜前端架构
张勇 搜搜前端架构张勇 搜搜前端架构
张勇 搜搜前端架构
 
张克军 豆瓣前端团队的工作方式
张克军 豆瓣前端团队的工作方式张克军 豆瓣前端团队的工作方式
张克军 豆瓣前端团队的工作方式
 
杨皓 新浪博客前端架构分享
杨皓 新浪博客前端架构分享杨皓 新浪博客前端架构分享
杨皓 新浪博客前端架构分享
 
Barcelona apc mem2010
Barcelona apc mem2010Barcelona apc mem2010
Barcelona apc mem2010
 
Mysql introduction-and-performance-optimization
Mysql introduction-and-performance-optimizationMysql introduction-and-performance-optimization
Mysql introduction-and-performance-optimization
 
Designofhtml5
Designofhtml5Designofhtml5
Designofhtml5
 
Mysql开发与优化
Mysql开发与优化Mysql开发与优化
Mysql开发与优化
 
我的Ubuntu之旅
我的Ubuntu之旅我的Ubuntu之旅
我的Ubuntu之旅
 
软件工程&架构
软件工程&架构软件工程&架构
软件工程&架构
 
淘宝分布式数据处理实践
淘宝分布式数据处理实践淘宝分布式数据处理实践
淘宝分布式数据处理实践
 
阿里巴巴 招聘技巧培训
阿里巴巴 招聘技巧培训阿里巴巴 招聘技巧培训
阿里巴巴 招聘技巧培训
 
Scrum
ScrumScrum
Scrum
 
Scrum
ScrumScrum
Scrum
 
183银行服务器下载说明
183银行服务器下载说明183银行服务器下载说明
183银行服务器下载说明
 
人人网技术经理张铁安 Feed系统结构浅析
人人网技术经理张铁安 Feed系统结构浅析人人网技术经理张铁安 Feed系统结构浅析
人人网技术经理张铁安 Feed系统结构浅析
 
Data on the web
Data on the webData on the web
Data on the web
 

Yui3 初探