Picasso开启大前端的未来

“道生一,一生二,二生三,三生万物。”——《道德经》

Picasso是大众点评移动研发团队自研的高性能跨平台动态化框架,经过两年多的孕育和发展,目前在美团多个事业群已经实现了大规模的应用。

2007年,苹果公司第一代iPhone发布,它的出现“重新定义了手机”,并开启了移动互联网蓬勃发展的序幕。Android、iOS等移动技术,打破了Web应用开发技术即将一统江湖的局面,之后海量的应用如雨后春笋般涌现出来。移动开发技术给用户提供了更好的移动端使用和交互体验,但其“静态”的开发模式却给需要快速迭代的互联网团队带来了沉重的负担。

从空间上看需要集成发布,美团App承载业务众多,是跨业务合流,横向涉及开发人员最多的公司,虽然开发人员付出了巨大的心血完成了业务间的组件化解耦拆分,但依然无可避免的造成了以下问题:

这种“静态”的开发模式,会对研发效率和运营质量产生负面影响。对于传统的桌面应用软件开发而言,静态的研发模式也许是相对可以接受的。但对于业务蓬勃发展的移动互联网行业来说,静态开发模式和敏捷迭代发布需求的矛盾日益突出。

如何解决客户端“静态”开发模式带来的问题?

业界最早给出的答案是使用Web技术

但Web技术与Native平台相比存在性能和交互体验上的差距。在一些性能和交互体验可以妥协的场景,Web技术可以在定制容器、离线化等技术的支持下,承载运营性质的需要快速迭代试错的页面。

另一个业界给出的思路是优化Web实现

利用移动客户端技术的灵活性与高性能,再造一个“标准Web浏览器”,使得“Web技术”同时具有高性能、良好的交互体验以及Web技术的动态性。这次技术浪潮中Facebook再次成为先驱,推出了ReactNative技术(简称RN)。不过RN的设计取向有些奇怪,RN不兼容标准Web,甚至不为Android、iOS双端行为对齐做努力。产生的后果就是所有“吃螃蟹”的公司都需要做二次开发才能基本对齐双端的诉求。同时还需要尽最大努力为RN的兼容性问题、稳定性问题甚至是性能问题买单。

而我们给出的答案是Picasso

Picasso另辟蹊径,在实现高性能动态化能力的同时,还以较强的适应能力,以动态页面、动态模块甚至是动态视图的形式融入到业务开发代码体系中,赢得了许多移动研发团队的认同。

Picasso框架跨Web端和小程序端的实践也已经取得了突破性进展,除了达成四端统一的大前端融合目标,Picasso的布局理念有望支持四端的高性能渲染,同时配合Picasso代码生成技术以及Picasso的强表达能力,生产力在大前端统一的基础之上得到了进一步的提升。

Picasso应用程序开发者使用基于通用编程语言的布局DSL代码编写布局逻辑。布局逻辑根据给定的屏幕宽高和业务数据,计算出精准适配屏幕和业务数据的布局信息、视图结构信息和文本、图片URL等必要的业务渲染信息,我们称这些视图渲染信息为PModel。PModel作为Picasso布局渲染的中间结果,和最终渲染出的视图结构一一对应;Picasso渲染引擎根据PModel的信息,递归构建出Native视图树,并完成业务渲染信息的填充,从而完成Picasso渲染过程。需要指出的是,渲染引擎不做适配计算,使用布局DSL表达布局需求的同时完成布局计算,既所谓“表达即计算”。

从更大的图景上看,Picasso开发人员用TypeScript在VSCode中编写Picasso应用程序;提交代码后可以通过Picasso持续集成系统自动化的完成Lint检查和打包,在Picasso分发系统进行灰度发布,Picasso应用程序最终以JavaScript包的形式下发到客户端,由PicassoSDK解释执行,达成客户端业务逻辑动态化的目的。

在应用程序开发过程中,TypeScript的静态类型系统,搭配VSCode以及PicassoDebug插件,可以获得媲美传统移动客户端开发IDE的智能感知和断点调试的开发体验。PicassoCI系统配合TypeScript的类型系统,可以避免低级错误,助力多端和多团队的配合;同时可以通过“兼容计算”有效的解决能力支持的长尾问题。

Picasso针对移动端主流的布局引擎和系统做了系统的对比分析,这些系统包括:

首先从性能上看,AutoLayout系统是表现最差的,随着需求复杂度的增加“布局计算”耗时成指数级的增长。FlexBox和LinearLayout相比较AutoLayout而言会在性能表现上有较大优势。但是LinearLayout和FlexBox会让开发者为了布局方面需要的概念增加不必要的视图层级,进而带来渲染性能问题。

Picasso布局DSL的核心在于:

使用锚点概念可以简单清晰的设置非同一个坐标轴方向的两个锚点“锚定”好的视图位置。同时锚点可以提供描述“相对”位置关系语义支持。事实上,针对布局的需求更符合人类思维的描述是类似于“B位于A的右边,间距10,顶对齐”,而不应该是“A和B在一个水平布局容器中……”。锚点概念通过极简的实现消除了需求描述和视图系统底层实现之间的语义差距。

下面举几个典型的例子说明锚点的用法:

1居中对齐:

view.centerX=bgView.width/2view.centerY=bgView.height/22右对齐:

view.right=bgView.width-10view.centerY=bgView.height/23相对排列:

viewB.top=viewA.topviewB.left=viewA.right+104“花式”布局:

viewB.top=viewA.centerYviewB.left=viewA.centerXPicasso锚点布局逻辑具有理论上最为灵活的的表达能力,可以做到“所想即所得”的表达布局需求。但是有些时候我们会发现在特定的场景下这样的表达能力是“过剩的”。类似于下图的布局需求,需要水平排布4个视图元素、间距10、顶对齐;可能会有如下的锚点布局逻辑代码:

v1.top=10v1.left=10v2.top=v1.topv3.top=v2.topv4.top=v3.topv2.left=v1.right+10v3.left=v2.right+10v4.left=v3.right+10显然这样的代码不是特别理想,其中有较多可抽象的重复的逻辑,针对这样的需求场景,Picasso提供了hlayout布局函数,完美的解决了水平排布的问题:

hlayout([v1,v2,v3,v4],{top:10,left:10,divideSpace:10})有心人可以发现,这和Android平台经典的LinearLayout如出一辙。对应hlayout函数的还有vlayout,这一对几乎完整实现AndroidLinearLayout语义的兄弟函数,实现逻辑不足300行,这里强调的重点其实不在于两个layout函数,而是Picasso布局DSL无限制的抽象表达能力。如果业务场景中需要类似于Flexbox或其他的概念模型,业务应用方都可以按需快速的做出实现。

由此可见,Picasso布局DSL,无论在性能潜力和表达能力方面都优于以上布局系统。Picasso布局DSL的设计是Picasso得以构建高性能四端动态化框架的基石。

同时得益于Picasso布局DSL的表达能力和扩展能力,Picasso在自动化生成布局代码方面也具有得天独厚的优势,生成的代码更具有可维护性和扩展性。伴随着Picasso的普及,当前前端研发过程中“视觉还原”的过程会成为历史,前端开发者的经历也会从“复制”视觉稿的重复劳动中解脱出来。

业界对于动态化方案的期待一直是“接近原生性能”,但是Picasso却做到了等同于原生的渲染效率,在复杂业务场景可以达成超越原生技术基本实践的效果。就目前Picasso在美团移动团队实践来看,同一个页面使用Picasso技术实现会获得更好的性能表现。

Picasso实现高性能的基础是宿主端高效的原生渲染,但实现“青出于蓝而胜于蓝”的效果却有些反直觉,在这背后是有理论上的必然性的:

在常规的原生业务编码中,很难将这些优化做到最好,因为对比每个小点所带来的性能提升而言,应用逻辑复杂度的提升是不能接受的。而Picasso渲染引擎,将传统原生业务逻辑开发所能做的性能优化做到了“统一复用”,实现了一次优化,全线受益的目标。

通过Picasso的桥接能力,基于Picasso的上层应用程序仍然可以利用集团内部移动技术团队积累的高质量基础建设,同时已经形成初步的公司内部大生态,多个部门已经向Picasso生态贡献了动画能力、动态模块能力、复用Web容器桥接基建能力、大量业务组件和通用组件。

Picasso团队除了持续维护PicassoSDK,Picasso持续集成系统、包括基于VSCode的断点调试,Liveload等核心开发工具链,还为集团提供了统一的分发系统,为集团内部大前端团队开展Picasso动态化实践奠定了坚实的基础。

列举Picasso在美团的部分应用案例:

Picasso在实践客户端动态化的方向取得了成功,解决了传统客户端“静态”研发模式导致的种种痛点。总结下来:

业界对大前端融合的未来有很多想象和憧憬,Picasso动态化实践已经开启大前端未来的一种新的可能。

Picasso暂时还未开源,如对Picasso有兴趣,欢迎加入大众点评的大家庭。

THE END
1.移动web开发(01)移动端web移动web开发流式布局 1. 移动端基础 1.1 浏览器现状 国内的UC和QQ,百度等手机浏览器都是根据Webkit修改过来的内核,国内尚无自主研发的内核,就像国内的手机操作系统都是基于Android修改开发的一样。 总结:兼容移动端主流浏览器,处理Webkit内核浏览器即可。 https://blog.csdn.net/m0_56947432/article/details/140349421
2.移动Web应用开发现状与未来腾讯云开发者社区移动Web应用开发现状与未来 随着移动设备的普及,移动Web应用开发得到了快速发展。移动Web应用能够兼容多种设备,包括智能手机和平板电脑,为开发者提供了一个方便的开发平台。当前移动Web应用开发的https://cloud.tencent.com/developer/information/%E7%A7%BB%E5%8A%A8Web%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E7%8E%B0%E7%8A%B6%E4%B8%8E%E6%9C%AA%E6%9D%A5
3.简述pc端应用webapp移动端应用的区别简述pc端应用、webapp、 移动端应用的区别 一、什么是Web App(基于Web的应用程序) WebApp,也称为Web应用程序,是存储在远程服务器上并由其用户通过Web浏览器运行的计算机程序。 1.WebApp的优势和特点主要包括以下几个方面: 跨平台兼容性好:WebApp可以在不同的设备和平台上运行,无需针对不同的操作系统进行开发和https://blog.51cto.com/Itstars/10933376
4.说说你对移动端和web前端开发的主要区别是什么?王铁柱6移动端和 Web 前端开发虽然都属于前端开发的范畴,但它们之间存在一些关键区别: 1. 平台和环境差异: 移动端: 面向各种移动操作系统(iOS、Android、HarmonyOS 等),需要考虑不同系统的特性、屏幕尺寸、硬件性能等。开发需要针对不同平台进行适配,例如使用不同的开发语言 https://www.cnblogs.com/ai888/p/18566969
5.PC端/web端/移动端开发的区别在于什么?但即使大家都知道移动互联网红利没了,我发现现在许多身边的互联网从业者都,如果做产品研发仍然是会首先考虑移动端,因为这里用户更近,可以更容易获得用户。用小程序或者APP,来作为产品主要的形态。要么就是用网页端的SaaS产品来替代,很少有产品经理会去负责客户端的产品设计工作。 https://www.niaogebiji.com/article-558675-1.html
6.PCweb前端和移动端的webapp的区别在哪里?4.开发工具。移动端开发有一些jquery for mobile一类的库是专用的,不用于PC端。反过来也一样,有些PC端的工具在移动端不好用。 等等很多。其实移动端web app,很接近移动端原生的app的外观和行为模式。比照移动原生app开发来理解web app就容易得多。 嘉兴雷鸟是一家集企业软件开发,WEB网站建设,移动APP制作等综合型http://www.lei-niao.com/news_5014.html
7.移动端web开发技巧4、移动端click屏幕产生200-300 ms的延迟响应 移动设备上的web网页是有300ms延迟的,玩玩会造成按钮点击延迟甚至是点击失效。 以下是历史原因: 2007年苹果发布首款iphone上IOS系统搭载的safari为了将适用于PC端上大屏幕的网页能比较好的展示在手机端上,使用了双击缩放(double tap to zoom)的方案,比如你在手机上用浏https://www.imooc.com/article/1115
8.前端开发移动端开发和后端开发都有哪些区别首先,从技术结构上来看,Web前端开发涉及到Html、CSS、JavaScript以及众多的前端开发框架技术;后端开发技术主要完成业务逻辑的处理过程,涉及到存储管理、安全管理、并发处理和其他资源调度方面的内容,有多种编程语言可以从事后端开发,包括Java、Python、PHP、C#、Go等;移动端开发涉及到Android开发、iOS开发以及各种移动端设备http://www.situedu.com/news/uid/2976.html
9.FlutterForWeb实践Tech 导读 Flutter For Web已经发布一年多时间,它的发布意味着我们可以真正地使用一套代码、一套资源部署整个大前端系统(包括ios、Android、Web)。经过一段时间的探索,使用Flutter For Web技术开发了移动端可视化编程平台——Flutter乐高,在此分享使用Flutter For Webhttps://maimai.cn/article/detail?fid=1649349645&efid=2w3JI3L2-3Bmlv-WDCnXkQ
10.前端岗位职责15篇百度UFO团队前端开发职责分析 一般的中小型互联网公司,前端开发工程师的主要职责大多集中与页面重构,简单的或者单个的JS功能实现,大中型的互联网公司,如百度等,则专注于百度各产品线Web端功能设计、开发和实现,百度各产品线易用性改进和Web界面技术优化 ,Web前沿技术研究和新技术调研。Web端功能设计和开发,很大程度上https://www.yjbys.com/hr/gangwei/4020783.html
11.响应式webPC端web与移动端web(H5)兼容适配选型方案背景 项目需要,公司已经有一套PC端web,需要做一套手机端浏览器可用的,但是又想兼容pc端,适配的web项目。 以下是查阅到响应布局现成的开源模版。根据自己技术栈,vue2,js来搜索相关的开源https://www.jindouyun.cn/document/industry/article/162875
12.移动Web前端高效开发实战(iKcamp著)中文pdf完整版[16MB]电子书下载移动Web前端高效开发实战 (iKcamp著) 中文pdf完整版[16MB],这是一本梳理移动前端和Native客户端技术体系的入门实战书,讲述HTML 5、CSS 3、JavaScript的ECMAScript 5和ECMAScript 6版本、移动端常用布局方案等方面全面https://www.jb51.net/books/640146.html
13.「成都移动web前端开发工程师招聘」1、利用前端技术开发PC端、移动端Web前端框架、操作界面、报表等展示工作;2、配合后台开发人员实现产品功能、独立完成web前端开发任务;3、很好理解用户需求和UI设计,设计开发出符合用户习惯的前端操作界面,持续提升用户体验;任职条件1. 3年左右前端开发工作经验;2. 精通HTML、JavaScript、Ajax、CSS等Web开发技术;3. 必https://m.zhaopin.com/jobs/CCL1210796580J00436015007.htm
14.Web前端Web前端入门Web前端培训Web前端视频教程Web前端开发专业方向主要专注于PC端和移动端H5相应技术的全面运用,以解决企业在用户交互与前后端通信之间的关键问题。主要包括HTML5,CSS3,JavaScript,ES6规范,Node.js后台开发,JQuery,Bootstrap,VUE,React,微信小程序等框架的运用。实战项目丰富,涵盖主流行业的https://www.woniuxy.com/major/2
15.山东Web前端培训班网页设计培训网页设计培训学校新视觉实训web前端开发培训专业,业界口碑优异的web前端培训班,专业教授HTML5培训,移动开发培训,web前端工程师培训,网页设计制作,名企就业,待遇优厚。https://edu.newsight.cn/m/web.html
16.IMSDK的H5端基本介绍MobileIMSDK/解决方案区MobileIMSDK是一套专为移动端开发的原创开源IM通信层框架:1)历经8年、久经考验;2)超轻量级、高度http://www.52im.net/forum.php?mod=viewthread&tid=3682
17.H5缓存机制浅析移动端Web加载性能优化下面我们首先分析各种缓存机制的原理、用法及特点;然后针对Anroid移动端Web性能加载优化的需求,看如果利用适当缓存机制来提高Web的加载性能。 2 H5缓存机制原理分析 2.1 浏览器缓存机制 浏览器缓存机制是指通过HTTP协议头里的Cache-Control(或Expires)和Last-Modified(或Etag)等字段来控制文件缓存的机制。这应该是WEB中最https://www.thinkphp.cn/topic/66501.html
18.web前端开发工程师工作的主要职责描述(通用31篇)web前端开发工程师工作的主要职责描述 篇1 职责: 1、结合页面和系统功能,完成桌面或移动端页面/微信H5/小程序的开发、调试等工作,高效、高质地完成代码编写,确保符合前端代码规范; 2、与后端开发团队紧密配合,完成接口对接,确保前后端有效交互; 3、综合运用客户端和服务器端构建与优化方案、模块化开发等手段,提升开https://www.diyifanwen.com/fanwen/gangweizhize/14683350.html
19.贵州电视文化传媒有限公司招聘启事(三)Web前端开发工程师(2人) 1.参与项目前期的规划构思,完善产品概念,参与原型策划与设计; 2.负责前端业务PC端/移动端系统、大屏系统、后台系统和工具的开发与维护; 3.参与前端页面开发与维护、与UI合作实现移动web前端特效及完美的交互效果; 4.对前端体验、页面响应速度的持续优化,保证其兼容性及执行效率; https://movement.gzstv.com/news/detail/qXrqe/
20.web前端培训web前端培训班纯面授web前端培训机构能够实现多端开发并拥有多端开发能力,整合资源,实现跨平台跨设备的架构能力。 可从事岗位 混合APP开发工程师 小程序开发工程师 高级Web前端开发工程师 主讲内容 1、ReactNative 2、Flutter 3、HarmonyOS鸿蒙开发 掌握能力 获得大前端高级开发工程师水平,主要涉猎原生APP开发。主导移动端多元产品项目实现。能够跨平台http://www.qfedu.com/html5/
21.Web前端开发与iOS终端开发有什么区别?移动端那些做得很像原生APP的Web 应用就跟终端开发一样了,数据同样保存到SQLite,存储逻辑以及要处理的问题都差不多。 框架 在第三方框架上Web前端和iOS开发完全相反,Web原生弱小又十分开放,让大量第三方框架和类库可以施展拳脚,而iOS原生强大又十分封闭,导致第三方框架没有多少生存空间。https://www.bwie.com/jsgh/298.html