SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
OPOA那些事儿
⼀一淘UX 李牧
limu@taobao.com

2012-7-7
⼀一淘UX前端两个建设中的项目



             For	
  OPOA	
  
             Since	
  2011	
  
             @GitHub	
  	
  


             For	
  Components	
  
             Since	
  2012	
  
             @GitHub	
  
h;p://zuanshi.taobao.com 	
  (任意淘宝用户可访问)	
  
	
  
	
  
	
  
h;p://tanx.com	
  
	
  
在复杂商业系统中的OPOA会多遇到哪些问题?	
  
	
  
1.系统由非常多区块组成,如何管理这些区块?	
  
	
  
h;p://zuanshi.taobao.com/index.html#!/plan/
planmanage/	
  
	
  
5	
  


VOMTree记录Views逻辑层次关系
2.Hash变动如何通知到各个区块	
  
	
  
7	
  


                    MagixJS页面切换流程
当Hash发生改变,view会自外向内,响应和传递query
变化事件,这是一个捕获型事件,可以被打断.
 Root	
  View	
  
 	
  
 	
  
 	
   View1	
  
      View3	
         View2	
  
 	
         	
                                	
  
 	
         	
                                	
  
 	
         	
                    View2_1	
   	
  
                                  View2_2	
  
 	
         	
                                	
  
 	
  
 	
  
3.大量区块深层次嵌套,配置是否特别繁琐?	
  
	
  
9	
  




树状关系里每个节点只
需要管理好自身和自身
的直接子节点	
  
	
  
只需在配置项中记录每
个逻辑页面的RootView
4.同一区域位置不变内容更迭频繁	
  
11	
  


        View的容器 -­‐-­‐	
  VFrame

我们需要有View的容器,在页面中划出⼀一个逻辑区块,
View可以装载到容器中,也可以卸载掉.

这就像页面中的iframe,通过切换src改变iframe内容.

<iframe src="pagelocation?querystring"></iframe>

<vframe id='vc-nav' view_name="app/views/nav"/>
以整个页面的hash值作为每个mxvc的querystring
5.众多区块能否独立调试,多处重用?	
  
13	
  


VFrame和IFrame一样可以独立开发
以新增创意功能为例	
  
独立使用此功能:	
  
h;p://zuanshi.taobao.com/index.html#!/board/boardhandle/
acXon=create	
  
嵌入到计划创建流程中:	
  
h;p://zuanshi.taobao.com/index.html#!/plan/planhandle/	
  
完全独立开发调试:	
  
h;p://zuanshi.taobao.com/index.html#!/plan/planhandle/
__view__=app-­‐views-­‐board-­‐boardhandle	
  
	
  
我们只要强制指定RootView为VOMTree的某个View节点,就
可以只渲染这个节点为根的VOMTree的一颗子Tree	
  
	
  
6.如何做到从任一URL进入系统,加载内容最
小化?	
  
	
  
	
  
15	
  


  按需加载和预加载任务交给Loader


•  h;p://zuanshi.taobao.com/index.html#!/board/boardhandle/
   acXon=create	
  
•  h;p://zuanshi.taobao.com/index.html#!/plan/planhandle/	
  
•  h;p://zuanshi.taobao.com/index.html#!/plan/planhandle/
   __view__=app-­‐views-­‐board-­‐boardhandle	
  

每个View的相关JS,模板全部形成模块,有Loader根据URL按
需加载
	
  
7.如何控制单页应用内存使用?	
  
	
  
	
  
17	
  


      拒绝Dom节点和JS对象循环引用
参照jQuery.data的做法:
$("#dv1").data(key1,jsObj1).data(key2,jsObj2);
 <div proxyindex="1" id="dv1"/>

                                  全局DataProxy对象
                                  1     proxyObj1    key1   jsObj1
                                                     key2   jsObj2

<div proxyindex="3"/>
                                  2     proxyObj2   ...
                                  3     proxyObj3   ...
通过为节点添加到expando字符串索引              ...   ...
指向全局DataProxy中的相应JS对象
18	
  


    参照jQuery.data的另类事件代理
<div proxyindex="1"/>
     mxclick="listener1:arg1:...:argN:doDef:doBubble|listener2"/>


<view onclick="...">
 <ul>
  <li mxclick="showAreaCode:010|isLocal">北京</li>
  <li mxclick="showAreaCode:021">上海</li>
 </ul>
</view> 附加好处:节点上的事件⼀一目了然	
  


myView.events = {
    click:{
         showAreaCode : function(view,targetId,argsArr){...},
         isLocal:function(view,targetId,argsArr){...}
    }
} //内部保证listener接收到的参数view,targetId,argsArr为纯JS对象.
8.页面改动频繁,组件如何自处?	
  
	
  
	
  
一个最小的需求

h;p://zuanshi.taobao.com/index.html#!/reports/plan_realXme/	
  
	
  




将“注意XXYYZZ”信息加入到组件某个位置	
  
引入模板引擎
如果组件完全有字符串拼接出来,“注意XXYYZZ”加
到哪里,哪里就要开一个配置项,积累下来组件配置
会一匹布那么长。	
  
	
  
	
  
引入模板引擎,组件功能作用在模板上,可以在任意
位置加东西	
  
9.模板类似HTML的静态文件,大系统一次性
写入<script	
  type=‘tmpl’>不现实,如何即能方
便开发,又放在CDN上缓存?	
  
	
  
预编译时解决问题
开发时:	
  
通过XHR同域获取模板,格式缩进完美,Demo转化
为模板也非常容易。	
  
	
  
上线时:	
  
将模板转化为一个一行的长字符串,作为JS变量存储,
通过JSONP跨域获取	
  
10.应用层框架能否独立与底层类库?	
  
h;ps://github.com/limu/magix/tree/master/src	
  
                            打包编译工具	
  



                           业务框架实现类,会mix
                           到抽象类中形成完整类	
            Kissy版本	
  


                           Loader适配器	
  




                                                   SeaJS+	
  
                                                   JQuery+	
  
                                                   Backbone	
  
                                                   版本	
  


                           业务框架抽象类,部分方
                           法需要依赖底层类库实现	
  
以上	
  
h$p://www.slideshare.net/leneli/magixjswebapp	
  




                                 以下	
  
11.当前我们的组件行为是作用在模板上的,
难道任何数据变化都需要全组件重新刷新?	
  
12.只有NodeJS才能方便的将渲染从前台移动
到后台么?	
  
13.组件系统如何做到面向未来可拆分?	
  
等您来回答
关于我

李穆

花名: 李牧
邮箱: limu@taobao.com
博客: http://limu.iteye.com
微博: @lenel



进入阿里系⼀一直在广告线做前端
2007.01 雅虎         广告引擎团队
2007.05 阿里妈妈       广告引擎团队
2008.09 淘宝         广告技术部架构组
2011.06 ⼀一淘        UX北京团队


Velocity北京2010的分享:第三方广告代码稳定性和性能优化
Q&A
谢谢大家
 Thank You

Mais conteúdo relacionado

Mais procurados

Javascript 入門 - 前端工程開發實務訓練
Javascript 入門 - 前端工程開發實務訓練Javascript 入門 - 前端工程開發實務訓練
Javascript 入門 - 前端工程開發實務訓練Joseph Chiang
 
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Joseph Chiang
 
使用kslite支持第三方内容开发
使用kslite支持第三方内容开发使用kslite支持第三方内容开发
使用kslite支持第三方内容开发leneli
 
【项目分享】赶集移动Web App开发总结
【项目分享】赶集移动Web App开发总结 【项目分享】赶集移动Web App开发总结
【项目分享】赶集移动Web App开发总结 yangdj
 
使用Bigpipe提升浏览速度
使用Bigpipe提升浏览速度使用Bigpipe提升浏览速度
使用Bigpipe提升浏览速度kumawu
 
犀牛书第六版
犀牛书第六版犀牛书第六版
犀牛书第六版jay li
 
Node js feat pegasus
Node js feat pegasusNode js feat pegasus
Node js feat pegasuscnfi
 
SeaJS - 前端模块化开发探索与网站性能优化实践
SeaJS - 前端模块化开发探索与网站性能优化实践SeaJS - 前端模块化开发探索与网站性能优化实践
SeaJS - 前端模块化开发探索与网站性能优化实践lifesinger
 
Node.js 淺談socket.io
Node.js   淺談socket.ioNode.js   淺談socket.io
Node.js 淺談socket.ioSimon Su
 
Intro-to-SeaJS
Intro-to-SeaJSIntro-to-SeaJS
Intro-to-SeaJSlifesinger
 
Kissy design
Kissy designKissy design
Kissy designyiming he
 
Asp.net identity overview
Asp.net identity overviewAsp.net identity overview
Asp.net identity overview功豪 魏
 
KISSY Mechanism
KISSY MechanismKISSY Mechanism
KISSY Mechanismlifesinger
 
淘宝网前端开发面试题
淘宝网前端开发面试题 淘宝网前端开发面试题
淘宝网前端开发面试题 Lumend
 
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐Andrew Wu
 
程式人雜誌 2015年五月
程式人雜誌 2015年五月程式人雜誌 2015年五月
程式人雜誌 2015年五月鍾誠 陳鍾誠
 
前端性能测试
前端性能测试前端性能测试
前端性能测试tbmallf2e
 
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctechKai Cui
 
安卓中的设计模式举例 by hjm1fb
安卓中的设计模式举例 by hjm1fb安卓中的设计模式举例 by hjm1fb
安卓中的设计模式举例 by hjm1fbAlbert Hong
 
第三方内容开发最佳实践
第三方内容开发最佳实践第三方内容开发最佳实践
第三方内容开发最佳实践taobao.com
 

Mais procurados (20)

Javascript 入門 - 前端工程開發實務訓練
Javascript 入門 - 前端工程開發實務訓練Javascript 入門 - 前端工程開發實務訓練
Javascript 入門 - 前端工程開發實務訓練
 
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練
 
使用kslite支持第三方内容开发
使用kslite支持第三方内容开发使用kslite支持第三方内容开发
使用kslite支持第三方内容开发
 
【项目分享】赶集移动Web App开发总结
【项目分享】赶集移动Web App开发总结 【项目分享】赶集移动Web App开发总结
【项目分享】赶集移动Web App开发总结
 
使用Bigpipe提升浏览速度
使用Bigpipe提升浏览速度使用Bigpipe提升浏览速度
使用Bigpipe提升浏览速度
 
犀牛书第六版
犀牛书第六版犀牛书第六版
犀牛书第六版
 
Node js feat pegasus
Node js feat pegasusNode js feat pegasus
Node js feat pegasus
 
SeaJS - 前端模块化开发探索与网站性能优化实践
SeaJS - 前端模块化开发探索与网站性能优化实践SeaJS - 前端模块化开发探索与网站性能优化实践
SeaJS - 前端模块化开发探索与网站性能优化实践
 
Node.js 淺談socket.io
Node.js   淺談socket.ioNode.js   淺談socket.io
Node.js 淺談socket.io
 
Intro-to-SeaJS
Intro-to-SeaJSIntro-to-SeaJS
Intro-to-SeaJS
 
Kissy design
Kissy designKissy design
Kissy design
 
Asp.net identity overview
Asp.net identity overviewAsp.net identity overview
Asp.net identity overview
 
KISSY Mechanism
KISSY MechanismKISSY Mechanism
KISSY Mechanism
 
淘宝网前端开发面试题
淘宝网前端开发面试题 淘宝网前端开发面试题
淘宝网前端开发面试题
 
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
 
程式人雜誌 2015年五月
程式人雜誌 2015年五月程式人雜誌 2015年五月
程式人雜誌 2015年五月
 
前端性能测试
前端性能测试前端性能测试
前端性能测试
 
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctech
 
安卓中的设计模式举例 by hjm1fb
安卓中的设计模式举例 by hjm1fb安卓中的设计模式举例 by hjm1fb
安卓中的设计模式举例 by hjm1fb
 
第三方内容开发最佳实践
第三方内容开发最佳实践第三方内容开发最佳实践
第三方内容开发最佳实践
 

Semelhante a D2-ETao-show

Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程yiditushe
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程appollo0312
 
Web前端标准在各浏览器中的实现差异
Web前端标准在各浏览器中的实现差异Web前端标准在各浏览器中的实现差异
Web前端标准在各浏览器中的实现差异cleverpig
 
MobileWebAppFramework_V5_design
MobileWebAppFramework_V5_designMobileWebAppFramework_V5_design
MobileWebAppFramework_V5_designJackson Tian
 
移动Web开发框架jqm探讨
移动Web开发框架jqm探讨移动Web开发框架jqm探讨
移动Web开发框架jqm探讨newker
 
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型Jackson Tian
 
GlassFish特性介绍
GlassFish特性介绍GlassFish特性介绍
GlassFish特性介绍Jim Jiang
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文Guo Albert
 
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit TestingASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing江華 奚
 
2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0Anthony Chen
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Wade Huang
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介Allen Lsy
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plusDongxu Yao
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京Joseph Chiang
 
Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2twMVC
 
twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有twMVC
 
Exam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development FundamentalsExam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development FundamentalsChieh Lin
 
Web爬虫那点事
Web爬虫那点事Web爬虫那点事
Web爬虫那点事Yihua Huang
 
建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)Joseph Chiang
 

Semelhante a D2-ETao-show (20)

Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
Web前端标准在各浏览器中的实现差异
Web前端标准在各浏览器中的实现差异Web前端标准在各浏览器中的实现差异
Web前端标准在各浏览器中的实现差异
 
MobileWebAppFramework_V5_design
MobileWebAppFramework_V5_designMobileWebAppFramework_V5_design
MobileWebAppFramework_V5_design
 
移动Web开发框架jqm探讨
移动Web开发框架jqm探讨移动Web开发框架jqm探讨
移动Web开发框架jqm探讨
 
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 
GlassFish特性介绍
GlassFish特性介绍GlassFish特性介绍
GlassFish特性介绍
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文
 
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit TestingASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
 
2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京
 
Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2
 
twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有
 
Exam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development FundamentalsExam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development Fundamentals
 
Web爬虫那点事
Web爬虫那点事Web爬虫那点事
Web爬虫那点事
 
建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)
 

D2-ETao-show