SlideShare a Scribd company logo
1 of 47
Download to read offline
美团前端架构简介
  潘魏增@美团
关于我
• 工作经历
  -  2006 年毕业开始从事前端开发,沉迷至今
 - 2008 年加入现在的创业团队,小宇宙爆发
• 性格爱好
  -  INTJ型处女座,完美主义者
 - javascript/css/html/php/python/shell
 - 健身、跑步、游泳
• 更多信息
  -  http://panweizeng.com/about
 -   http://weibo.com/panweizeng
我的代表作品
我的代表作品
内容
• 代码框架
 - 通用基础库
 - 通用组件
 - 组件框架
 - 移动应用
 - loader
 - combo
内容
• 代码框架 • 开发工具
 - 通用基础库    - 运行监测
 - 通用组件      ✓ 性能数据

 - 组件框架      ✓ 错误日志
             ✓ 性能优化
 - 移动应用     - 测试工具
 - loader   - 代码检查
 - combo    - 静态文件预编译
内容
• 代码框架 • 开发工具 • 知识管理
 - 通用基础库    - 运行监测      - 代码风格和规范
 - 通用组件      ✓ 性能数据     - 技术文档
 - 组件框架      ✓ 错误日志
             ✓ 性能优化
                        - 培训资料
 - 移动应用     - 测试工具
 - loader   - 代码检查
 - combo    - 静态文件预编译
背景
• 前端人力紧缺
  -
  没有精力独立开发底层基础框架
 - 后端需要写前端代码,后期维护成本由前端承担

• 业务飞速发展,市场竞争激烈
  -
  快
 - 可持续开发,可扩展性好
 - 稳定可靠,某些开源框架还不适用于严肃的前端开发
基础框架
• 主力基础框架 - YUI3
  -
  绝大部分面向消费者、商家和业务相关的系统


• 辅助类库 - jQuery
  -
  智能手机版本 i.meituan.com
 - 第三方组件如统计系统的图表
现有代码规模
javascript                   css

85, 000                  10, 000
             html template
             160, 000
YUI3的特点

• 真正的框架,强劲的持续开发能力,可以
 应对快速的业务发展
YUI3的特点

• 真正的框架,强劲的持续开发能力,可以
 应对快速的业务发展

• 帮助工程师成长,培养良好的工程思维
YUI3的特点

• 真正的框架,强劲的持续开发能力,可以
 应对快速的业务发展

• 帮助工程师成长,培养良好的工程思维
• 代码规范整齐,容易维护,适合有洁癖的
 工程师
不懂YUI的人注定最终还要
 重复发明一个蹩脚的YUI
通用基础库


• 提供二次开发所需要的各种通用方法
• 定义全局变量M,分配命名空间Y.mt
组件框架
YUI3 Widget Infrastructure
CSS模块化


• 组件支持换肤,每个站点可以自定义自
 己的样式

• 组件粒度更小,便于扩展维护
组件框架的思想
•   优秀的开发范式,统一、规范的api
组件框架的思想
•   优秀的开发范式,统一、规范的api

•   状态与表现分离,之间通过自定义事件、AOP
    进行交互
组件框架的思想
•   优秀的开发范式,统一、规范的api

•   状态与表现分离,之间通过自定义事件、AOP
    进行交互

•   自定义事件的广泛应用,来源包括:ATTRS变
    动、生存周期切换、widget本身定义等方面
组件框架的思想
•   优秀的开发范式,统一、规范的api

•   状态与表现分离,之间通过自定义事件、AOP
    进行交互

•   自定义事件的广泛应用,来源包括:ATTRS变
    动、生存周期切换、widget本身定义等方面

•   灵活的功能整合,可以获取基础类的原型方法
    和插件
应用框架

• 用于单页应用的MVC框架
• Controller, Model, Model List, View
• 将在未来的业务系统中使用
通用组件
                 CommonDialog
      mutiSelect                  tree Collapse
               FlashCopy     tab    table
   AjaxForm
             date  core base                  PopUp
                                     validate
ProvinceCitySelect                         paginator
                      autocomplete
            uploader
  PopulateForm         buttonToPost        HeaderTip
          linkDialog      liveSearch      cascade
                     HelpTip
loader

• 模块依赖关系管理
• 自动加载模块
• 编写应用时只需要use,其他事情交给
 loader
loader应用

• yui3 loader
• FileHelper
• footer.php
combo

• 只做好一件事情:文件合并
• 具有自主知识产权:)
• 增加文件缓存、别名、线下测试支持
Live Demo
开发工具
运行监测

• 错误日志
  -收集用户浏览器的错误信息进行分析


• 性能数据
  -DomReady time
 - PageLoad time
 - 首屏时间 todo
性能优化
• cdn
  - {s0,s1,p0,p1,c}.meituan.net
  - trade-off
• combo
  - 根据URL的md5缓存合并后的文件


• lazyloading
  - 根据需要才显示图片或载入更多的项目
  - 多加载一屏,滚动更平滑,用户基本感觉不到
• gahost
  - use local ga.js to speed up google analytics
测试工具
•   兼容性                    •   调试
    - vmware server            - firebug
    - vmware fusion            - fiddler
    - vmware player            - ie developer toolbar
    - vmware workstation       - chrome developer tools
代码检查

• -jslint
    command line tool
  - vim plugin
  - git pre-commit & post-update hook
• -csslint
    todo
静态文件预编译

• Shrinksafe
• YUI Compressor
• Todo
  - 切分CSS图片的域名
  - 自动图片优化
  - Google Closure Compiler
部署

• 检出代码
• 压缩js/css
• 替换版本号
• 分发
• 重启服务
知识管理


• wiki
• evernote
编码风格

• CodingStyle - 全局编码风格
• HtmlCodingStyle - html编码风格
• CssCodingStyle - css编码风格
• JsCodingStyle - javascript编码风格
• UIGuideLine - UI规范
技术文档

• FrontEndQuickStart 前端快速入门
• JqueryOnTouch 触屏手机版二次开发
• YUI3环境搭建
• YUI3简介
• ...
培训
•   前端相关               •   普适性
    - 浅谈设计的CRAP原则          - Shell basics
    - 业务系统前端实践总结           - oAuth in meituan
    - Javascript核心概念       - 后端基础知识
    - Javascript基础         - Git基础
    - CSS技术分享              - VIM入门与进阶
    - HTML5设计原理            - 工程师的非技术能力
    - YUI3在美团              - 用MBTI理解性格差异
    - ...                  - ...
开发流程
1. 产品出需求文档
 - 去年年末才开始有,敏捷需求跳过此步
2. 设计师出设计稿
 - 大部分时候不需要设计稿
3. 前后端协作开发
4. 线下环境测试
 - 工程师负责逻辑,产品负责交互
5. 预上线环境
 - 非大feature跳过此步
6. 上线(一般需要20秒)
 - 重复测试,观察日志,如有故障则快速修复,只有loser才rollback!
协作开发模式
• 中央服务器集中式开发
 - 前后端工程师通过SSH连接到统一的开发服务器编程
 - 开发环境较复杂,需要自行配置,一般是入职第一天的第一个任务
 - 没有接口文档,靠吼来沟通,部分任务会在jira中有接口说明
 - 协作速度快,开发即联调,不需要合并工作
 - 美团的PHP项目多采用此模式
协作开发模式
• 单机分布式开发
 - 前后端工程师在个人工作机分别各使用一套开发环境
 - 通过远程分支合并工作成果,有线下公用的测试环境
 - 开发互不影响,更有节奏,以预定好的版本号发布,比较稳定
 - 美团的JAVA项目多采用此模式
Q &A

More Related Content

What's hot

ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介Allen Lsy
 
美团点评技术沙龙05 - Node.js业务应用实践和服务监控
美团点评技术沙龙05 - Node.js业务应用实践和服务监控美团点评技术沙龙05 - Node.js业务应用实践和服务监控
美团点评技术沙龙05 - Node.js业务应用实践和服务监控美团点评技术团队
 
美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙05 - 前后端联调方案探索与应用美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙05 - 前后端联调方案探索与应用美团点评技术团队
 
Web development overview
Web development overviewWeb development overview
Web development overviewWei Sun
 
Team Foundation Server
Team Foundation ServerTeam Foundation Server
Team Foundation Server國昭 張
 
領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)Jeff Chu
 
你的 JS 該減肥了!5個提升網頁載入速度的技巧 - Modern Web 2020
你的 JS 該減肥了!5個提升網頁載入速度的技巧 - Modern Web 2020你的 JS 該減肥了!5個提升網頁載入速度的技巧 - Modern Web 2020
你的 JS 該減肥了!5個提升網頁載入速度的技巧 - Modern Web 2020Shubo Chao
 
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)锐 张
 
Web coding principle
Web coding principleWeb coding principle
Web coding principleZongYing Lyu
 
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計Andrew Wu
 
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)Jeff Chu
 
Web爬虫那点事
Web爬虫那点事Web爬虫那点事
Web爬虫那点事Yihua Huang
 
ASP.Net MVC Framework
ASP.Net MVC FrameworkASP.Net MVC Framework
ASP.Net MVC Framework國昭 張
 
前端工程師與室內裝修師傅的相似之處-twMVC#16
前端工程師與室內裝修師傅的相似之處-twMVC#16前端工程師與室內裝修師傅的相似之處-twMVC#16
前端工程師與室內裝修師傅的相似之處-twMVC#16twMVC
 
Monitoring Tools 大亂鬥 - Consul
Monitoring Tools 大亂鬥 - ConsulMonitoring Tools 大亂鬥 - Consul
Monitoring Tools 大亂鬥 - ConsulAndrew Wu
 
How to ASP.NET MVC4
How to ASP.NET MVC4How to ASP.NET MVC4
How to ASP.NET MVC4Daniel Chou
 
SignalR實戰技巧 twmvc#17
SignalR實戰技巧 twmvc#17 SignalR實戰技巧 twmvc#17
SignalR實戰技巧 twmvc#17 twMVC
 
大規模微服務導入 - #1, 從零開始的系統架構設計概觀
大規模微服務導入 - #1, 從零開始的系統架構設計概觀大規模微服務導入 - #1, 從零開始的系統架構設計概觀
大規模微服務導入 - #1, 從零開始的系統架構設計概觀Andrew Wu
 

What's hot (20)

Berserk js
Berserk jsBerserk js
Berserk js
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介
 
美团点评技术沙龙05 - Node.js业务应用实践和服务监控
美团点评技术沙龙05 - Node.js业务应用实践和服务监控美团点评技术沙龙05 - Node.js业务应用实践和服务监控
美团点评技术沙龙05 - Node.js业务应用实践和服务监控
 
美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙05 - 前后端联调方案探索与应用美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙05 - 前后端联调方案探索与应用
 
Web development overview
Web development overviewWeb development overview
Web development overview
 
Team Foundation Server
Team Foundation ServerTeam Foundation Server
Team Foundation Server
 
領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)
 
你的 JS 該減肥了!5個提升網頁載入速度的技巧 - Modern Web 2020
你的 JS 該減肥了!5個提升網頁載入速度的技巧 - Modern Web 2020你的 JS 該減肥了!5個提升網頁載入速度的技巧 - Modern Web 2020
你的 JS 該減肥了!5個提升網頁載入速度的技巧 - Modern Web 2020
 
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
 
Web coding principle
Web coding principleWeb coding principle
Web coding principle
 
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
 
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
 
Web爬虫那点事
Web爬虫那点事Web爬虫那点事
Web爬虫那点事
 
ASP.Net MVC Framework
ASP.Net MVC FrameworkASP.Net MVC Framework
ASP.Net MVC Framework
 
前端工程師與室內裝修師傅的相似之處-twMVC#16
前端工程師與室內裝修師傅的相似之處-twMVC#16前端工程師與室內裝修師傅的相似之處-twMVC#16
前端工程師與室內裝修師傅的相似之處-twMVC#16
 
Monitoring Tools 大亂鬥 - Consul
Monitoring Tools 大亂鬥 - ConsulMonitoring Tools 大亂鬥 - Consul
Monitoring Tools 大亂鬥 - Consul
 
How to ASP.NET MVC4
How to ASP.NET MVC4How to ASP.NET MVC4
How to ASP.NET MVC4
 
SignalR實戰技巧 twmvc#17
SignalR實戰技巧 twmvc#17 SignalR實戰技巧 twmvc#17
SignalR實戰技巧 twmvc#17
 
大規模微服務導入 - #1, 從零開始的系統架構設計概觀
大規模微服務導入 - #1, 從零開始的系統架構設計概觀大規模微服務導入 - #1, 從零開始的系統架構設計概觀
大規模微服務導入 - #1, 從零開始的系統架構設計概觀
 
React js
React jsReact js
React js
 

Similar to 美团前端架构简介

一步一步开发Html5 mobile apps
一步一步开发Html5 mobile apps一步一步开发Html5 mobile apps
一步一步开发Html5 mobile appsAdam Lu
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
百度前端性能监控与优化实践
百度前端性能监控与优化实践百度前端性能监控与优化实践
百度前端性能监控与优化实践taobao.com
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAEq3boy
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平drewz lin
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
2011新版首页总结 技术篇
2011新版首页总结 技术篇2011新版首页总结 技术篇
2011新版首页总结 技术篇传贵 谢
 
去哪儿Ugc平台设计经验
去哪儿Ugc平台设计经验去哪儿Ugc平台设计经验
去哪儿Ugc平台设计经验mysqlops
 
构建可维护的Javascript 小米网
构建可维护的Javascript 小米网构建可维护的Javascript 小米网
构建可维护的Javascript 小米网yang alex
 
Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超drewz lin
 
张勇 搜搜前端架构
张勇 搜搜前端架构张勇 搜搜前端架构
张勇 搜搜前端架构isnull
 
前端性能测试
前端性能测试前端性能测试
前端性能测试tbmallf2e
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)Will Huang
 
基于Seajs的项目构建
基于Seajs的项目构建基于Seajs的项目构建
基于Seajs的项目构建Zhang Xiaoxue
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统klandor
 
前端性能优化&测试
前端性能优化&测试前端性能优化&测试
前端性能优化&测试tbmallf2e
 
百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化tiantianli
 
[Baidu web frontend_conference_2010]_[soso_frontend_architecture]
[Baidu web frontend_conference_2010]_[soso_frontend_architecture][Baidu web frontend_conference_2010]_[soso_frontend_architecture]
[Baidu web frontend_conference_2010]_[soso_frontend_architecture]思念 青青
 
Axure RP Prototyping Tool
Axure RP Prototyping ToolAxure RP Prototyping Tool
Axure RP Prototyping ToolSouyi Yang
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plusDongxu Yao
 

Similar to 美团前端架构简介 (20)

一步一步开发Html5 mobile apps
一步一步开发Html5 mobile apps一步一步开发Html5 mobile apps
一步一步开发Html5 mobile apps
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
百度前端性能监控与优化实践
百度前端性能监控与优化实践百度前端性能监控与优化实践
百度前端性能监控与优化实践
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
2011新版首页总结 技术篇
2011新版首页总结 技术篇2011新版首页总结 技术篇
2011新版首页总结 技术篇
 
去哪儿Ugc平台设计经验
去哪儿Ugc平台设计经验去哪儿Ugc平台设计经验
去哪儿Ugc平台设计经验
 
构建可维护的Javascript 小米网
构建可维护的Javascript 小米网构建可维护的Javascript 小米网
构建可维护的Javascript 小米网
 
Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超
 
张勇 搜搜前端架构
张勇 搜搜前端架构张勇 搜搜前端架构
张勇 搜搜前端架构
 
前端性能测试
前端性能测试前端性能测试
前端性能测试
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
 
基于Seajs的项目构建
基于Seajs的项目构建基于Seajs的项目构建
基于Seajs的项目构建
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统
 
前端性能优化&测试
前端性能优化&测试前端性能优化&测试
前端性能优化&测试
 
百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化
 
[Baidu web frontend_conference_2010]_[soso_frontend_architecture]
[Baidu web frontend_conference_2010]_[soso_frontend_architecture][Baidu web frontend_conference_2010]_[soso_frontend_architecture]
[Baidu web frontend_conference_2010]_[soso_frontend_architecture]
 
Axure RP Prototyping Tool
Axure RP Prototyping ToolAxure RP Prototyping Tool
Axure RP Prototyping Tool
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
 

美团前端架构简介