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开发简介web开发是做什么的Web开发简介 Web开发定义 Web开发是一种创造性的技术活动,旨在构建和维护网站和Web应用程序。这一过程涉及两个关键方面: 前端开发:专注于用户界面的设计和实现,使用HTML、CSS和JavaScript等技术来创建直观、美观的网页体验。 后端开发:负责处理服务器端的逻辑,包括数据管理和业务规则的实现,确保网站的功能性和可靠性。https://blog.csdn.net/snjx_tutou/article/details/142978739
2.计算机web技术介绍Web 客户端的主要任务是展现信息内容。Web客户端设计技术主要包括:HTML语言、Java Applets、 脚本程序、 CSS、 DHTML、插件技术以及VRML技术。下面是YJBYS小编给你带来的web技术相关知识,欢迎阅读! 1) HTML语言。 HTML是Hypertext Markup Language(超文本标记语言)的缩写,它是构成Web页面的主要工具。 https://www.yjbys.com/edu/wangluojishu/244684.html
3.什么是web腾讯云开发者社区Contents 1 什么是Web安全 1.1 前言 1.2 XSS 1.2.1 非持久型XSS(反射型)漏洞 1.2.1.1 简介 1.2.1.2 特点 1.2.1.3 解决方法 1.2.2 持久型XSS1.3.2 解法 1.4 SQL注入 1.4.1 原理 1.4.2 预防方法 1.5 命令行注入 1.6 Dhttps://cloud.tencent.com/developer/information/%E4%BB%80%E4%B9%88%E6%98%AFweb
4.Web开发概述简介:Web开发是创建和开发基于互联网的应用程序的过程,涉及前端和后端开发等多个方面。本文将介绍Web开发的主要概念和组成部分,帮助读者了解这个领域的基本知识。 即刻调用文心一言能力 开通百度智能云千帆大模型平台服务自动获取1000000+免费tokens 立即体验 Web开发是创建和开发基于互联网的应用程序的过程,它涵盖了多个方https://developer.baidu.com/article/details/2767930
5.面向开发者的Web技术MDN开放的 Web 为开发者提供了巨大的机遇,为了充分利用这些技术,你需要知道如何使用它们。在下方你可以找到这些 Web 技术文档的链接。http://developer.mozilla.org/zh-CN/docs/Web
6.WebRTC技术简介WebRTC技术简介 一、关键词 二、WebRTC WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流、音频流或者其他任意数据的传输。 WebRTC必须在HTTPS环境下运行,你可以在https://appr.tc/、https://https://zhuanlan.zhihu.com/p/421503695
7.Web开发中的基本概念和用到的技术简介HTML/Xhtml网页制作今天,本文向初学者介绍一些 Web 开发中的基本概念和用到的技术,从A到Z总共26项,每项对应一个概念或者技术。 A— AJAX AJAX 全称为“ Asynchronous JavaScript and XML ”(异步 JavaScript 和 XML ),是一种创建交互式网页应用的 网页开发 技术。根据Ajax提出者Jesse James Garrett建议,AJAX: https://www.jb51.net/web/198518.html
8.《Web前端技术》课程介绍《Web前端技术》课程介绍 2020-06-12审核人:(已浏览1544) 课程号:IC206037 课程名:Web前端技术 英文课程名:Web technologies 开课单位:人工智能学院 授课教师:祖明 责任教师:侯彪 学分/学时:1学分/16学时 教师简介: 祖明,2008年 课程简介: 本课程主要介绍Web前端技术的基本原理、发展历史及趋势以及作为Web前端工https://jwc.xidian.edu.cn/info/1104/8686.htm
9.web安全之点击劫持攻击与防御技术简介点击劫持漏洞也会随着社交网站和移动互联网的发展,越来越多的被关注,如果利用点击劫持漏洞与其它已有的 Web 漏洞相结合,会产生更大的危害性,也是需要安全研究人员要进一步研究的问题。 转载自:攻防:点击劫持攻击与防御技术简介 六、推荐资料 基于HTML5的Web前端安全性研究 web安全相关书籍: 1、白帽子讲Web安全https://www.jianshu.com/p/251704d8ff18
10.SAPWebDynproForJAVA开发技术详解简介,目录书摘内容简介: 《SAP Web Dynpro For JAVA开发技术详解》详细介绍了Web Dynpro for Java的相关开发技术、底层架构及周边拓展应用,以实例贯穿全书,配以丰富的理论说明。前半部分集中对Web Dynpro for Java开发技术、底层架构进行详细的描述和讲解,不仅说明了怎么开发,更阐述了为什么这样开发。后半部分主要介绍与WebDynpro fohttps://www.jd.com/nrjs/ca4bffacf72dcfb2.html
11.《WebRTC技术详解:从0到1构建多人视频会议系统》(栗伟)简介当当网图书频道在线销售正版《WebRTC技术详解:从0到1构建多人视频会议系统》,作者:栗伟,出版社:机械工业出版社。最新《WebRTC技术详解:从0到1构建多人视频会议系统》简介、书评、试读、价格、图片等相关信息,尽在DangDang.com,网购《WebRTC技术详解:从0到1构建多人http://product.dangdang.com/29233728.html
12.nat技术简介(转载)webcenterolnat技术简介(转载) NAT(Network Address Translation,网络地址转换)是将IP数据报文头中的IP地址转换为另一个IP地址的过程。在实际应用中,NAT主要用于实现私有网络访问公共网络的功能。这种通过使用少量的公网IP地址代表较多的私网IP地址的方式,将有助于减缓可用IP地址空间的枯竭。https://www.iteye.com/blog/1232088
13.WebGIS——万维网地理信息系统开源地理空间基金会中文分会开放WebGIS简介? Web技术和GIS技术相结合,最为激动人心的产物就是WebGIS(万维网地理信息系统)。WebGIS,简言之,就是利用Web技术来扩展和完善地理信息系统的一项新技术。由于HTTP协议采用基于C/S的请求/应答机制,具有较强的用户交互能力,可以传输并在浏览器上显示多媒体数据,而GIS中的信息主要是需要以图形、图像方式表https://www.osgeo.cn/tutorial/k2063
14.实验室&工艺研发用切向流过滤技术简介分析方法生物在线Lab简介 切向流过滤(TFF)是对生物分子进行快速、高效分离和纯化的技术,可广泛应用于免疫学、蛋白质化学、分子生物学、生物化学及微生物学等生物学领域。TFF可对10ml至数千升体积的样品进行浓缩和脱盐,也可以用于不同规格物质的分离、收获细胞悬液、澄清发酵液或细胞裂解液。本文将简单介绍TFF的基本原理及其在实验室和工艺https://www.bioon.com.cn/doc/showarticle.asp?newsid=49718
15.Web前端开发技术实验与实践HTML5CSS3JavaScript(第4版项目11Web前端技术新书推荐 项目12万维网简介 项目13“专业课程简介”页面 课外拓展训练3 第二部分页面布局技术 实训4DIV+CSS综合应用 项目14设计“《中国教育网络》杂志简介”页面 项目15设计“京东商品导购”页面 课外拓展训练4 实训5DIV+CSS布局规划 项目16DIV+CSS页面布局设计 https://item.winxuan.com/1202796760
16.WebRTC技术详解:从0到1构建多人视频会议系统(豆瓣)内容简介· ··· (1)资深音视频技术专家撰写,详解WebRTC规范和API、信令系统、底层技术、移动端和服务端实现,集大成之作; (2)开源可商用视频会议系统,书中示例可直接应用于视频会议、在线教育等实时音视频场景 。 这是一本全面、详细讲解WebRTC技术以及如何使用它构建一个可商用的视频会议系统的著作。 在技术https://book.douban.com/subject/35433901/
17.基于JavaWeb企业门户网站的设计(SpringBoot,Thymeleaf,Bootstrap经过多年发展,企业门户网站无论在规模还是种类方面,都在不断多元化,复杂化,网页数量及丰富度也随之增加,数据安全和用户隐私成为了越来越值得关注的问题。因此,网站开发与维护成本也随之急剧增加。针对以上问题,JAVAWeb技术的发展极大解决了这些难题。 本文综合应用Spring Boot、Thymeleaf、HTML5、Bootstrap开发技术,采用https://www.2bysj.cn/Article/jsp/202101/19224.html
18.Web开发技术重庆大学在学习Web开发基本概念、Web开发环境搭建和Web开发工具的使用基础上,通过实际案例讲授HTML、CSS、DHTML、Jquery、XML、ASP.NET动态服务器页面技术(包括Web form控件、内置服务器对象、ADO.NET数据库访问、Web service)、Ajax等技术,使学生掌握开发一个完整的Web应用系统的基本原则、方法和步骤,提高学生应用Web技术进行https://www.xuetangx.com/course/CQU08091000603/10318356
19.javaweb客户端和服务端mob6454cc6bcf40的技术博客一、JavaWeb简介 1、Java Web是用Java技术来解决相关web互联网领域的技术总和 2、Web包括web服务器和web客户端两部分 Java在客户端的应用有java applet(使用的很少) java在服务器端的应用有比如Servlet,JSP和第三方框架等等 二、应用最多的两种网络应用程序开发体系 https://blog.51cto.com/u_16099238/8032832