快成物流科技 x mPaaS | 小程序容器加持下的技术架构“提质增效”

简介: 大前端团队如何选型技术?如何快速上手?如何高效协同?让我们看看快成科技如何解决这一问题。

2.35.png

导言

 

从 2017 年开始,GMTC“移动技术大会”就更名为“大前端技术大会”。发展至今,混合开发、原生开发、前端开发等概念正在深度融合,组成“大前端”团队。

 

大前端团队如何选型技术?如何快速上手?如何高效协同?让我们看看快成科技如何解决这一问题。

 

缘起两地三团队

快成科技是网络货运领域的领军科技企业,领域排名市场前三,平台有 3w+ 大宗商品货主,将货单发布到平台,由 60w+ 的卡车司机接单承运,每年产生 120亿 的运费交易额。

 

以司机端为例,需要承载从发单抢单到从进出场管理,从在途路径监控到金融白条加油加气等一系列相互强关联、流程链条长的业务。这些任务由两地三个研发团队,共同分工协作完成。

 

在 7*24 小时不间断的客户服务和每月 2-3 次发版的高度迭代中,技术框架瓶颈逐渐凸显,具体包括:

  • 在系统框架方面,初始框架是原生 App+HTML5,传统 web 存在启动白屏和性能响应不流畅,大大降低了用户体验;
  • 在发版周期方面,研发部门多,产品链条长,部分企业需要更多的个性定制化服务导致发版期待周期不一致,频繁的发包更新不仅降低了运营效率,也给客户带来了频繁更新的困扰;
  • 在体验一致性方面,原生开发依赖系统框架,因为原生特性不同,而导致各厂商多渠道平台中差异化凸显,多平台性能、体验差别较大;
  • 在多部门协作方面,常用开发语言、前端 JavaScript 框架等不尽相同,不能及时根据需求张弛和上线 DDL 来灵活调配技术人员协作开发。

 

在快成科技业务持续高速发展的背景下,优秀的技术架构是“提质增效”的保障,系统重构势在必行。快成的小伙伴们开始寻觅优秀的架构,解决场景问题。

 

选型四维度

快成小伙伴针对发现的问题,讨论出四个选型维度:

  • 框架成熟度:简单来说,就是这个新技术是否靠谱,百亿的业务压力,没有太多的试错空间;
  • 迁移成本:如果想得到新技术带来的收益,需要我们付出什么代价,例如新技术的学习成本、原来架构的改造成本等;
  • 社区氛围:主要是看跟进这个技术的人够不够多、文档资料是否丰富、遇到问题能否得到帮助等;
  • 考量基础上兼顾性能、跨平台和动态性

 

定好技术选型考量目标之后,团队对常见的跨平台方案诸如 React Native、Weex、Flutter 和小程序进行了一系列的调研以及 Demo 制作,横向比较如下:

技术选型

调研结果

React Native 和 Weex

  • 启动时间慢、帧率不如原生;
  • 迁移成本较大,开发者需封装一层较重的中间层,对研发人员要求较高。

Flutter

性能和效率至上但是动态化能力非常有限。

小程序

本身并非一种跨平台开发方案,无法利用自身 app 打开,更看重渠道优势。

 

正在进入技术选型困境的时候,快成物流科技偶然接触到了源自支付宝技术框架的mPaaS,通过使用 mPaaS 小程序容器,整合 mPaaS 框架、离线包和复用 h5 插件,依托于性能强劲的 web 渲染引擎,完美符合了我们对技术选型的期望与要求。

 

动手试试看

选定技术选型之后,在重构初期,针对项目工程建立以及划分上,我们同事之间进行了一场激烈的头脑风暴,最终选定了在多部门协作前提下进行轻量组件化并行开发多个小程序并进行动态下发的方案。

 

快成团队从协同、技术等多角度,进行框架的逐步导入。

 

🎞如需了解完整内容详情,欢迎观看 CodeHub#5 全程回放

 

1. 多团队协同

1.png

 

2. 真实场景测试

真机预览与调试问题,首先要设置好白名单,设置方式可参考文档,然后在原生端根据文档进行相应的配置和代码书写,最后需要注意的是 IDE 生成的二维码需要使用我们 App 的扫码能力扫描(可接入 mPaaS 的扫码组件),用支付宝扫一扫是打不开的。

ScanService service = LauncherApplicationAgent.getInstance().getMicroApplicationContext().findServiceByInterface(ScanService.class.getName());
ScanRequest scanRequest = new ScanRequest();
scanRequest.setScanType(ScanRequest.ScanType.QRCODE);
service.scan(this, scanRequest, new ScanCallback() {@Overridepublic void onScanResult(boolean success, Intent result) {if (result == null || !success) {showScanError();return;}Uri uri = result.getData();if (uri == null) {showScanError();return;}// 启动预览或调试小程序,第二个参数为小程序启动参数MPTinyHelper.getInstance().launchIdeQRCode(uri, new Bundle());}
});

 

3. 核心问题解决

在同一小程序不同页面跳转传参的时候我们遇到了大参数传递被截断的问题。

2.png

 

经过分析是小程序对路由跳转 API 进行了参数携带长度的限制,后来我们选择使用缓存 my.setStorage 来进行大批量参数的存取使用,这里需要注意的是同一小程序缓存上限为 10MB,在合适的地方使用 my.clearStorage 清除缓存尤为重要。

 

4. 优雅的交互提升

在 UI 开发上,我们希望小程序页面更接近于原生,所以我们进行了小程序的自定义导航栏的开发,这部分是需要原生端来实现的,建议下载官方 Demo 配合文档来进行开发。

 

我们还遇到过一个令人印象比较深刻的 UI 问题,在 iOS 设备上进行表单类多 input 组件页面开发时,会出现输入错行的情况:

3.jpg

 

通过查阅文档,发现这是个兼容性问题,对于需要启动键盘的组件,如 input、textarea 等,目前默认使用的是原生键盘。

 

如果键盘和组件的交互存在异常,可在组件中添加 enableNative="{{false}}" 属性,即可恢复到使用 WKWebview 的键盘。

 

同时由于使用的是系统键盘,也就不能使用 mPaaS 提供的数字键盘等,键盘相关目前不再专门适配。

 

未来可期

应用界面.png

使用 mPaaS 小程序容器下的「快成司机」界面预览

 

随着技术的不断演进和升级,看似开发变得越来越简单便捷,减少了重复无意义的工作,实际反而特别考验开发人员分析定位解决问题的能力,创新能力和学习能力。

 

但目前 mPaaS 小程序对比支付宝小程序还是存在一定的差距,在兼容性和 H5 框架上还存在一些小问题,也希望 mPaaS 及小程序框架能不断演进,未来可期!

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

直接 root Android 设备,会「隐身」的恶意软件 AbstractEmu 正在偷偷作恶

整理 | 梦依丹出品 | CSDN(ID:CSDNnews)“我就点一下,钱就没了”!手机不仅给我们带来便利,而且还记录着我们方方面面的信息,甚至是一言一行。正因此,它成了漏洞制作者、恶意软件黑客…

进入中国内地第31年的麦当劳 ,为什么还能不断吸引新消费人群?

简介: 麦当劳的数字化转型从2016年开始全面推行,力求无论何时何地何种方式,消费者都能随心享受麦当劳的产品与服务,数字化转型在过去几年取得显著效果!而阿里云数据中台的引入,将成为麦当劳数字化转型在拓展…

tomcat jsvc java_opts_Tomcat 学习笔记(2) - 使用 jsvc 启动tomcat

jsvc 是个什么是么高端武器呢全称:Java Service还是没有弄明白是什么,那就继续往下看。我们赞不讨论 tomcat 应不应该运行在80端口上。假如我们有需求,需要 tomcat 运行在 80 端口上。那么一个限制就出现了。*nix操作系统只用root权限才能监听…

python 元类 type_python Class:面向对象高级编程 元类:type

type的用法:1、普通的type用法:检查类型class my(object):def hello(self, nameworld):print(Hello, %s. % name)h my()print(type(my))print(type(h))运行结果:my是class, 所以它的类型是type,h是class的实例,所以它的类型是cla…

配置审计(Config)变配报警设置

简介: 本文作者【紫极zj】,本篇将主要介绍通过配置审计的自定义规则等服务,对负载均衡进行预警行为的相关介绍。 前言 配置审计(Config)将您分散在各地域的资源整合为全局资源列表,可便捷地搜索全局资源&…

漫画:什么是 “元宇宙” ?

作者|小灰来源|程序员小灰什么是更高的自由度呢?或许有人觉得,我们在网络游戏当中,不是也很自由吗?想怎么玩就怎么玩。但是,无论一款网络游戏的元素有多么丰富,游戏当中的角色、任务、职业、道具、场景&…

程序员写好技术文章的几点小技巧

简介: 去年成为了内网技术分享平台的年度作者,受邀写一篇关于“如何写好文章”的文章。我本身并不喜欢写字,去年写的几篇文章,涉及的话题自带流量,所以阅读量多了一些,谈不上有多擅长。不过还是决定分享一下…

js传中文参数 java取_js中文转码传输java后台 适用于用url传递中文参数

第一种方法: 解决方法如下: 1、在JS里对中文参数进行两次转码 var login_name document.getElementById("loginname").value;login_name encodeURI(login_name);login_name encodeURI(login_name);2、在服务器端对参数进行解码 String logi…

python信用卡违约预测分析_Python数据分析及可视化实例之银行信用卡违约预测(24)...

1.项目背景:银行体系对于信用可违约进行预测,原始数据集如下:2.分析步骤:(1)数据清洗(Data Cleaning)(2) 探索性可视化(Exploratory Visualization)(3) 特征工程(Feature Engineering)(4)基本建模&评估(Basic Modeling& E…

雅虎、领英接连退出中国,GitHub 会受到影响吗?

整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)继半个月前微软宣布关闭领英(即 LinkedIn)在华业务后,本周二,雅虎也宣布了最新消息:自 2021 年 11 月 1 日起,用户将无法从中国大…

高德打车构建可观测性系统实践

简介: 互联网工程的高速发展,分布式、微服务、容器化架构的流行,互联网已全面进入云原生时代。构建系统的方式由最初的单体大应用演变为分布式架构,一台服务器可能仅存几小时甚至几分钟,这种复杂性大大增加了把系统运行…

java script 代码放在jsp 还是放在servlet_ServletContext JSP

会话:四种:1 :Session–保存在服务器上默认的30分2:Cookie 客户端的,maxAge3:重写 url - > url;jsessionidxxxxxxx - > response.encodeRedirectUri(url);4:隐藏表单 1:Serv…

飞猪基于 Serverless 的云+端实践与思考

简介: 过去两年,飞猪前端一直在积极地进行 Serverless 建设和实践,2019 年 - 2020 年我们和集团 Node 架构组、研发平台一起完成了基础能力的建设和业务试点,成为集团率先落地 Serverless 实践的 BU,2020 年 - 2021 年…

unc 目录不受支持_Shopify平台对于店铺模版都提供哪些支持

在自定义Shopify模版之前,请确保您了解可用的支持级别。如果您要进行基本的自定义,则可以从模版开发人员处获取支持。如果您要对模版进行大量更改,请参阅我们的模版支持的其他资源列表。若要了解 Shopify 不支持的自定义,请参阅我…

CSS——定位、CSS高级技巧、修饰属性

1、定位 作用&#xff1a;灵活的改变盒子在网页中的位置 实现&#xff1a; 定位模式&#xff1a;position边偏移&#xff1a;设置盒子的位置 leftrighttopbottom 1.1 相对定位 position&#xff1a;relative <!DOCTYPE html> <html lang"en"> <…

数百万行自研代码都捐了,华为将欧拉捐赠给开放原子开源基金会

今天&#xff0c;操作系统产业峰会2021在北京国家会议中心线上线下同步举办。会上&#xff0c;华为携手社区全体伙伴共同将欧拉开源操作系统&#xff08;openEuler, 简称“欧拉”&#xff09;正式捐赠给开放原子开源基金会。这标志着欧拉从创始企业主导的开源项目演进到产业共建…

Hologres如何支持亿级用户UV计算

简介&#xff1a; 本文将介绍阿里云Hologres如何基于RoaringBitmap进行UV等高复杂度计算的方案&#xff0c;实现亿级用户万级标签亚秒级分析&#xff0c;帮助用户从Kylin平滑迁移到Hologres&#xff0c;实现更实时、开发更灵活、功能更完善的多维分析能力。 背景介绍 在用户行…

location 拦截所有_电脑广告拦截软件 Adguard Premium

每日一谈我们上个网的时候经常会遇到很多烦人的广告、在线跟踪等&#xff0c;不仅导致你的网站加载速度非常的慢&#xff0c;并且还可能会导致你遇到一些恶意软件和威胁。为了避免这种情况的产生&#xff0c;今天我为大家推荐这款广告拦截软件来阻止你浏览器中的广告&#xff0…

事务消息应用场景、实现原理与项目实战(附全部源码)

简介&#xff1a; 从应用场景出发&#xff0c;给出解决方案与实现原理&#xff0c;并提供整套工业级实现源码。 作者&#xff1a;丁威 活动中心场景介绍 在电商系统上线初期&#xff0c;往往会进行一些“拉新”活动&#xff0c;例如活动部门提出新用户注册送积分、送优惠券活…

mysql 别名 metadata_获取数据库元数据:DatabaseMetaData与ParameterMetaData与ResultSetMetaData...

(1)Meta-Data&#xff1a;关于数据的数据&#xff0c;在此是有关数据库和数据库表等数据库对象的信息&#xff1b;通过Connection的getMetaData()方法获得包含数据库元数据的DatabaseMetaData对象&#xff0c;然后在此对象上调用相关的方法获得对应的信息&#xff1b;(2)Databa…