【QCon2018】Flutter & Dart三端一体化开发

QCon2018上海全球软件开发大会上,来自阿里巴巴闲鱼技术的新新为你们带来主题为“Flutter & Dart三端一体化开发”的演讲。做为三端一体化的“布道者”,展现后移动互联网时代一种全新的开发模式,为听众带来进一步提升移动应用开发效率的思路。android

本次分享从“懒”和“效率”引入,分析Flutter的特色,简单介绍闲鱼经过Flutter统一iOS和Android两端的移动应用开发的经历。而后提出Dart Server“胶水层”的概念,“胶水层”是由客户端开发作简单数据拼装的一个“薄”服务端,用Dart统一语言,再经过开发All-in-IDE(建立接口框架、快速隔离部署、本地测试、无冲突调度等)统一开发模式,让写服务端“胶水层”的体验和写客户端基本一致,并尝试经过服务集合和代码生成等方式,不断下降“胶水层”的学习成本,最后实现三端一体化开发的思考和实践经历。编程

提问环节

现场听众很是踊跃热情,有很多同窗对Flutter的运用前景比较乐观,并表示引入Flutter开发的强烈欲望。有同窗兴奋的说,他们以前8个月的开发时间,选择Flutter之后降成1.5个月,效率不只仅是成倍的提高。另外有很多同窗对Dart“胶水层”服务端和三端一体化开发这个新模式表示兴趣。观众提问主要围绕如下几个点: (1)闲鱼在Flutter的经验:包括混合开发的问题;包大小优化;复用现有的Native基础组件;复杂的动画;怎样链接OpenGL;数据流怎么管理等等。 (2)Dart Server的一些疑问:和NodeJS的方案比较、Dart Server开发阶段用Hot Reload快速部署,上线后代码怎么管理。 (3)闲鱼一些技术的开源计划:Dart Server Framework和工具集开源是否有具体日程,UI2Code是否有开源的计划。后端

从提问反馈状况咱们也得到下一步思考方向: Flutter再进一步深刻要作什么? 胶水层是否从微服务到Serverless化? Dart Server Framework开源什么,哪一些是适合闲鱼本身的业务,哪一些是通用的?数据结构

内容摘要:

在闲鱼APP中,咱们经过Flutter混合开发,实现商品详情页和发布页,从体验来看,Flutter表现出很是接近Native的流畅性和交互效果。

在经过Flutter统一iOS和Android的两端开发后,咱们想尝试进一步提升开发效率,提出一我的写三端的想法,可是客户端写服务端会有一些问题: (1)客户端的开发方式和思惟方式和服务端开发有不少不一样点。客户端是本地程序,服务端是分布式系统;客户端开发注重细节和检验,服务端关注性能和容灾。 (2)服务端的部署很麻烦,机器不少,运维也很麻烦,客户端同窗很难掌握。 (3)这种作法纯粹给客户端同窗加工做量,影响需求进度。

咱们想让客户端同窗简单的实现服务接口,像搭乐高积木同样方便。 由此提出“胶水层”的概念,在客户端和服务端中间加一层“胶水层”,它主要作的事情是调用后端服务,拼装客户端所须要的数据。 客户端是Flutter,用的是Dart语言,为了让客户端同窗快速上手,“胶水层”优先考虑Dart。

Dart Server实现“胶水层”业务逻辑,框架提供了高性能的HTTP服务、服务路由、代码隔离、动态部署等基础服务。经过C++扩展或Service Mesh接入原有的JAVA中间件。而原有的后端服务下沉为领域服务,每一个具体的领域由固定的服务端同窗维护。 须要注意“胶水层多变、领域层少变”的原则,才能真正的提升开发效率。 咱们选用闲鱼流量最大的商品详情接口在线上实验,运行三个多月,没任何线上问题,内存占用稳定。RT和最大QPS基本和原有JAVA服务持平。

只是统一先后端语言是不够的,怎么让Flutter开发同窗快速上手。 (1)可否像写客户端程序同样写服务端胶水层?作到本地开发、运行、调试。 All-IN-IDE,经过IDE Plugins,支持一键建立接口框架,快速部署本地代码到服务端,在开发机器直接调用远程服务并把结果和日志同步回来…… (2)怎样才能快速的找到所须要的服务?可否像调用本地方法同样调用后端服务? 在服务接口和方法加注解,经过注解生成文档,能够在文档平台上搜索查询。 经过本身实现的JAVA2Dart的代码转换工具,能够把一个定义了接口和数据结构的Jar包转成Dart代码,同步也生成服务注册和发现的代码。 (3)在写代码的时候基本可否不考虑埋运维数据? 在代码生成中预埋了日志和降级开关。

移级部署是经过Dart Isolate来实现。

经过不一样技术栈的同窗实验。 没有任何Dart基础的Java后端开发和有Flutter基础的移动应用开发同窗,基本均可以在1小时内搭好环境并把Hello World写好部署,最多半天能够写一个带有真正业务涵义的接口上线。 由于Dart Server是单线程异步开发模型,很容易写出高性能的并发请求代码。 客户端同窗对后端服务理解要必定的过程,因此接口设计清晰很重要。

三端一体化开发的模式,一我的写了iOS、Android和它们所依赖的服务接口。 (1)之前在客户端拿到后端实现协议数据后,通常还要作从数据模型到视图模型的转换,如今不须要了,能够定义符合客户端展现需求的数据结构,在胶水层实现数据填充。因为先后端都是Dart语言,定义的数据结构代码是通用的,不存在兼容问题,不须要引入第三方协议定义语言。 (2)原来在客户端写的一些业务逻辑,能够根据须要转移到胶水层。 (3)Flutter实现iOS和Android两端UI。能够经过动态Widget管理框架,配合胶水层下发模板数据,让Flutter有必定的UI动态性。 三端一体化开发的一些好处: (1)减小先后端沟通成本,减小因协同引发的时间等待成本。 (2)开发更加灵活,部分逻辑在服务端实现让客户端扩展性更好。 (3)一体化开发、全链路日志、无冲突调试,让错误排查成本下降。 (4)能够更关注领域服务的性能、通用性等问题。

将来能够经过机器学习作到UI2Flutter,客户端开发只须要写交互逻辑和胶水层数据拼装,作到开发半自动化。

加入闲鱼,一块儿玩些“酷”的

闲鱼技术团队是一只短小精悍的工程技术团队。咱们不只关注于业务问题的有效解决,同时咱们在推进打破技术栈分工限制(android/iOS/Html5/Server 编程模型和语言的统一)、计算机视觉技术在移动终端上的前沿实践工做。做为闲鱼技术团队的软件工程师,您有机会去展现您全部的才能和勇气,在整个产品的演进和用户问题解决中证实技术发展是改变生活方式的动力。 简历投递:guicai.gxy@alibaba-inc.com并发

相关文章
相关标签/搜索