SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Postoffer前端架构设计
       市场开发部-前端组   徐琳
目录 CONTENTS


              1   产品线特点



              2   前端架构设计



              3   规划和展望
产品线特点

    什么是Offer?

•    Offer是指会员在网站上发布的信息。
•    Offer线是中文站最基础也是最核心的产品线之一,任何在线交易都依赖
于offer。

                     Offer


       发布Offer                    管理Offer


                 Offer detail展示
产品线特点

Offer发布线结构


                     A
     发布一体化入口页面


                         B
       选择类目页面


                             C
         填写信息详细页


                                 D
             发布成功页
产品线特点

你对Offer发布线有什么样的印象?
产品线特点

Offer发布线重构前

• 产品线迭代频繁
• 业务逻辑复杂(牵一发而动全身)
• 代码耦合度太高
• 不满足服务化需求
产品线特点

重构组件分割
产品线特点

重构组件分割
产品线特点

重构组件分割
前端架构设计

目录设计

• css 文件目录:
   app
      platform
           postoffer
• js 文件目录:
   app
      platform
           postoffer
前端架构设计

css目录结构说明

• global
           base.css 页面公用样式,如layout。
           postoffer-merge.css 公用css merge文件,3个页面公用。
• module
           widget 业务无关公用样式。
           mod 模块相关样式。
           unit 业务相关的公用样式。
• page
           页面级样式以及merge文件。
前端架构设计

css目录结构说明

• global
           base.css 页面公用样式,如layout。
           postoffer-merge.css 公用css merge文件,3个页面公用。
• module
           widget 业务无关公用样式。
           mod 模块相关样式。
           unit 业务相关的公用样式。
• page
           页面级样式以及merge文件。
前端架构设计

js目录结构说明

• global
           base.js 名字空间声明,申明名字空间
           postoffer-merge.js 公用js merge文件,被两个页面都引用
• module
           widget无关公用js,如 Dialog, Tips等。
           mod板块相关js文件,每个板块(mod)对应于一个或多个js文件,如果对应于多个js文
  件,这些js文件需要位于板块名称相同的文件夹下。
           unit 业务相关的公用js文件。

• page
           页面级js以及merge文件。如:表单提交publish
前端架构设计

模块初始化管理

• Html
    所有模块需要包含两个class,mod和模块名称。
    板块相关的数据(如:初始化数据,异步验证接口地址等) 以
     json格式配置在 data-mod-config中。
   以交易信息为例:
前端架构设计

模块初始化管理

• Css
   以上模块对应的css结构为:
    mod
         trade-info
             trade-info.css
前端架构设计

css编码规则

• css名称需要和它描述的节点名称一致。


• widget,mod,unit都对应于页面中的区块,每一区块都将分配一个class
 名称,且有固定前缀。


• 各部分可允许依赖的关系为:
 base < widget < unit < mod < page,后者可根据需要覆盖前者规则
前端架构设计

模块初始化管理

• Js
  如果一个mod比较复杂,那么需要有几个类来完成它的功能, 需要为这个mod申明一个名
  字空间。
前端架构设计

模块初始化管理

 一个mod对应于一个主类,由它来完成mod的初始化,定义后需要注册
 到ModContext中。
前端架构设计

模块初始化管理

 部分代码:
前端架构设计

模块间交互


           模块间交互




   基于数据模           基于页面元
    型的交互            素的交互
前端架构设计

模块间交互

• 基于数据模型的交互
   每个板块在初始化前会被ModContext注入一个接口,通过这个接口可以“通知”,“监听”
   和“查询”offer数据。
   该接口的一个实现会在初始化时注入到Mod对象中所以在Mod中可以通过this.
   formDataProvider取得。
前端架构设计

模块间交互

• 基于数据模型的交互
前端架构设计

模块间交互

• 基于页面元素的交互
   板块的有些事件不是基于offer数据的,比如类目选择板块(当前类目发生变化,而其他
 板块可能也需要同步做变化),此类交互使用 jQuery事件机制
 事件统一挂接在模块点上:



 感兴趣的地方可以这样获得通知:




   如果是全局事件,则事件统一挂接在window上。
前端架构设计

事件bind在trigger之后怎么办?
前端架构设计

事件bind在trigger之后怎么办?

• 框架给出nodeallready事件,将在所有mod的init执行完毕以后抛出。
 所以有特殊要求的trigger可以这样用:


  //触发规格属性事件
  PO.ModContext.bind('nodeallready', function() {
      self.handleSpecaProDiv();
  });
前端架构设计

表单提交
前端架构设计

改进情况对比

• Yslow评分
前端架构设计

改进情况对比

• Keepfast
  类目为“电子元器件 > 开关 > 流量开关”的发布页页面加载时间:
  组件化前:




  组件化后:
规划和展望


• 独角兽部署
 实现真正意义上的组件化,style可以按需加载。
• 业务逻辑上的清理优化
• 满足行业化需求
Q&A
The end

Weitere ähnliche Inhalte

Ähnlich wie Postoffer前端架构设计

N-layer design & development
N-layer design & developmentN-layer design & development
N-layer design & developmentXuefeng Zhang
 
基于Seajs的项目构建
基于Seajs的项目构建基于Seajs的项目构建
基于Seajs的项目构建Zhang Xiaoxue
 
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例Will Huang
 
移动端跨平台技术原理
移动端跨平台技术原理移动端跨平台技术原理
移动端跨平台技术原理gorillazf
 
[2008]网站重构 -who am i
[2008]网站重构 -who am i[2008]网站重构 -who am i
[2008]网站重构 -who am iTwinsen Liang
 
达尔文信息云平台
达尔文信息云平台达尔文信息云平台
达尔文信息云平台SmartData
 
淘宝网前端应用与发展
淘宝网前端应用与发展淘宝网前端应用与发展
淘宝网前端应用与发展taobao.com
 
01.web sphere培训 j2ee服务器简介
01.web sphere培训 j2ee服务器简介01.web sphere培训 j2ee服务器简介
01.web sphere培训 j2ee服务器简介littlecong
 
淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)vanadies10
 
微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open Camp微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open CampAndrew Wu
 
Html&css培训 舒克
Html&css培训 舒克Html&css培训 舒克
Html&css培训 舒克jay li
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平drewz lin
 
设计高性能mysql应用-TechClub技术沙龙
设计高性能mysql应用-TechClub技术沙龙设计高性能mysql应用-TechClub技术沙龙
设计高性能mysql应用-TechClub技术沙龙banping
 
白玉磊 Webrebuild
白玉磊 Webrebuild白玉磊 Webrebuild
白玉磊 Webrebuild裕波 周
 
石玉磊 Web rebuild
石玉磊 Web rebuild石玉磊 Web rebuild
石玉磊 Web rebuildWebrebuild
 
广告投放代码和创意代码持续优化
广告投放代码和创意代码持续优化广告投放代码和创意代码持续优化
广告投放代码和创意代码持续优化taobao.com
 
4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdfssuserd6c7621
 
赵泽欣 - 淘宝网前端应用与发展
赵泽欣 - 淘宝网前端应用与发展赵泽欣 - 淘宝网前端应用与发展
赵泽欣 - 淘宝网前端应用与发展d0nn9n
 

Ähnlich wie Postoffer前端架构设计 (20)

N-layer design & development
N-layer design & developmentN-layer design & development
N-layer design & development
 
基于Seajs的项目构建
基于Seajs的项目构建基于Seajs的项目构建
基于Seajs的项目构建
 
Fl介绍
Fl介绍Fl介绍
Fl介绍
 
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
 
移动端跨平台技术原理
移动端跨平台技术原理移动端跨平台技术原理
移动端跨平台技术原理
 
[2008]网站重构 -who am i
[2008]网站重构 -who am i[2008]网站重构 -who am i
[2008]网站重构 -who am i
 
达尔文信息云平台
达尔文信息云平台达尔文信息云平台
达尔文信息云平台
 
淘宝网前端应用与发展
淘宝网前端应用与发展淘宝网前端应用与发展
淘宝网前端应用与发展
 
前端总结
前端总结前端总结
前端总结
 
01.web sphere培训 j2ee服务器简介
01.web sphere培训 j2ee服务器简介01.web sphere培训 j2ee服务器简介
01.web sphere培训 j2ee服务器简介
 
淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)
 
微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open Camp微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open Camp
 
Html&css培训 舒克
Html&css培训 舒克Html&css培训 舒克
Html&css培训 舒克
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平
 
设计高性能mysql应用-TechClub技术沙龙
设计高性能mysql应用-TechClub技术沙龙设计高性能mysql应用-TechClub技术沙龙
设计高性能mysql应用-TechClub技术沙龙
 
白玉磊 Webrebuild
白玉磊 Webrebuild白玉磊 Webrebuild
白玉磊 Webrebuild
 
石玉磊 Web rebuild
石玉磊 Web rebuild石玉磊 Web rebuild
石玉磊 Web rebuild
 
广告投放代码和创意代码持续优化
广告投放代码和创意代码持续优化广告投放代码和创意代码持续优化
广告投放代码和创意代码持续优化
 
4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf
 
赵泽欣 - 淘宝网前端应用与发展
赵泽欣 - 淘宝网前端应用与发展赵泽欣 - 淘宝网前端应用与发展
赵泽欣 - 淘宝网前端应用与发展
 

Mehr von fangdeng

jQuery底层架构
jQuery底层架构jQuery底层架构
jQuery底层架构fangdeng
 
Building an event driven web
Building an event driven webBuilding an event driven web
Building an event driven webfangdeng
 
浅尝jQuery
浅尝jQuery浅尝jQuery
浅尝jQueryfangdeng
 
Html基础培训
Html基础培训Html基础培训
Html基础培训fangdeng
 
前端开发之Js
前端开发之Js前端开发之Js
前端开发之Jsfangdeng
 
Javascript代码注释及文档生成
Javascript代码注释及文档生成Javascript代码注释及文档生成
Javascript代码注释及文档生成fangdeng
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架fangdeng
 
前端单元测试初体验
前端单元测试初体验前端单元测试初体验
前端单元测试初体验fangdeng
 
Java script测试之js unit ut
Java script测试之js unit utJava script测试之js unit ut
Java script测试之js unit utfangdeng
 
2011年方凳年度总结及颁奖
2011年方凳年度总结及颁奖2011年方凳年度总结及颁奖
2011年方凳年度总结及颁奖fangdeng
 
产品线中的思考
产品线中的思考产品线中的思考
产品线中的思考fangdeng
 
产品线中的思考
产品线中的思考产品线中的思考
产品线中的思考fangdeng
 
Varnish简介
Varnish简介Varnish简介
Varnish简介fangdeng
 
Let's talk about date in javascript
Let's talk about  date  in javascriptLet's talk about  date  in javascript
Let's talk about date in javascriptfangdeng
 
Test driven-frontend-develop
Test driven-frontend-developTest driven-frontend-develop
Test driven-frontend-developfangdeng
 
方凳良品1期
方凳良品1期方凳良品1期
方凳良品1期fangdeng
 
方凳良品2期
方凳良品2期方凳良品2期
方凳良品2期fangdeng
 
魏琪君-重构-关于可读性、原则和模式
魏琪君-重构-关于可读性、原则和模式魏琪君-重构-关于可读性、原则和模式
魏琪君-重构-关于可读性、原则和模式fangdeng
 
Datalazyload
DatalazyloadDatalazyload
Datalazyloadfangdeng
 

Mehr von fangdeng (20)

jQuery底层架构
jQuery底层架构jQuery底层架构
jQuery底层架构
 
Building an event driven web
Building an event driven webBuilding an event driven web
Building an event driven web
 
浅尝jQuery
浅尝jQuery浅尝jQuery
浅尝jQuery
 
Html基础培训
Html基础培训Html基础培训
Html基础培训
 
前端开发之Js
前端开发之Js前端开发之Js
前端开发之Js
 
Javascript代码注释及文档生成
Javascript代码注释及文档生成Javascript代码注释及文档生成
Javascript代码注释及文档生成
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架
 
前端单元测试初体验
前端单元测试初体验前端单元测试初体验
前端单元测试初体验
 
Java script测试之js unit ut
Java script测试之js unit utJava script测试之js unit ut
Java script测试之js unit ut
 
2011年方凳年度总结及颁奖
2011年方凳年度总结及颁奖2011年方凳年度总结及颁奖
2011年方凳年度总结及颁奖
 
产品线中的思考
产品线中的思考产品线中的思考
产品线中的思考
 
产品线中的思考
产品线中的思考产品线中的思考
产品线中的思考
 
Varnish简介
Varnish简介Varnish简介
Varnish简介
 
Websocket
WebsocketWebsocket
Websocket
 
Let's talk about date in javascript
Let's talk about  date  in javascriptLet's talk about  date  in javascript
Let's talk about date in javascript
 
Test driven-frontend-develop
Test driven-frontend-developTest driven-frontend-develop
Test driven-frontend-develop
 
方凳良品1期
方凳良品1期方凳良品1期
方凳良品1期
 
方凳良品2期
方凳良品2期方凳良品2期
方凳良品2期
 
魏琪君-重构-关于可读性、原则和模式
魏琪君-重构-关于可读性、原则和模式魏琪君-重构-关于可读性、原则和模式
魏琪君-重构-关于可读性、原则和模式
 
Datalazyload
DatalazyloadDatalazyload
Datalazyload
 

Postoffer前端架构设计