美团扫码付小程序的优化实践

短短几年的时间,微信小程序已经从一颗小小的萌芽成长为参天大树,形成了较大规模的开发者生态系统,尤其是在支付、线下垂直领域潜力巨大。

作为领先的生活服务平台,美团的技术团队在小程序领域也进行了很多的探索和实践。像mpvue就是一款使用Vue.js开发微信小程序的前端框架,而且已经在美团点评多个实际业务项目中得到了验证,详细介绍大家可以阅读《用Vue.js开发微信小程序:开源框架mpvue解析》一文。目前,mpvue已经开源,项目地址是:https://github.com/Meituan-Dianping/mpvue。

本文将介绍扫码付小程序的实践,根据美团前端工程师陈瑶在美团第31期技术沙龙(点击可以查看这次沙龙四场演讲的Slides和视频)的演讲《金融扫码付H5迁移小程序拓荒之旅》整理而成。

什么是扫码付小程序?

美团扫码付是一款面向C端消费者推出的线下收单业务,相信大家已经在线下很多餐馆和其他生活服务商家体验过了。这项业务主要就是通过小程序提供服务的,而在实际场景中,用户先使用微信“扫一扫”功能,扫描商家二维码,系统会自动调用扫码付小程序,进入支付页面,最后输入金额完成商品的支付。

目标及数据分析

支付服务最核心的指标,显然就是用户支付成功的占比,我们称之为支付转化率。对扫码付业务而言,支付转化率的百分比越高,扫码付业务的营业额也就越高,其带来的收益是正相关的。因此提升扫码付小程序的支付转化率,就成为我们技术团队的重要工作。经过数据分析,我们发现转化率流失主要存在于以下两个环节:

  • 扫码到进入小程序环节(外部环节)
  • 进入小程序到支付环节(内部环节)

从扫码到进入小程序环节,微信会完成小程序基本信息获取、资源准备(代码下载或更新)等准备事项。在准备事项中,如果准备失败或等待时间过长,就会导致用户离开,这部分由微信控制的环节,我们称之为外部环节。

在进入小程序到支付环节,页面会进行渲染、数据请求等,如果渲染时间长、数据请求时间长也容易导致用户离开,同样,如果数据请求失败也会造成用户使用过程的终止,这部分由我们美团扫码付技术团队控制的环节,称之为内部环节。

如何提升外部环节转化率?

对于小程序开发者而言,扫码到小程序调起这个环节是黑盒的,我们无法得知其中的细节。而我们在扫码付小程序中尝试和微信的同学做了一次梳理,发现扫码付小程序在外部环节的丢失率较高,查询数据后,我们发现其中大部分用户手动点击了右上角的退出。

从业务视角出发,用户使用扫码付小程序,可认为他们有强需求进行支付,而造成用户手动点击退出的部分原因可能是等待时间过长。而在这个环节对时间造成影响更多的是资源准备,即小程序代码下载或者更新的行为。根据经验,影响下载和更新时间可能的因素包括两个方面:一个是网络,另一个是代码包。

因为用户的网络是我们无法控制的,只能尝试从代码包开始下手。而在当时未使用分包的情况下,我们的主包大小约为3M,这意味着新用户和无缓存小程序用户均需要在首次使用时等待下载3M左右的包。在这种情况下,虽然用户享受了小程序离线缓存包的福利,却丢失了大部分新用户的体验。于是我们尝试从包代码层面做一些优化:

  • 增加分包加载机制。用户在使用扫码付业务时会按需进行加载,优化小程序首次启动的下载时间。
  • 减小主包和分包大小。按照空主包的概念进行优化。在进行分包加载机制后,主包因为无法最小化而影响首次下载时间。一方面,原有的3M整包中,图片大小占用了50%大小,我们将所有的内含二进制和Base64图片分发到了CDN;另一方面,部分可移出的业务分发到了其他分包。

在做了这些事情后,扫码付分包从原先的整包3M缩减到了361K(主包300K+分包61K),而外部环节的转化率也提升了3%。虽然转化率提升了,但前置环节的转化率仍然有部分丢失,理论上继续缩减300K的主包能有效提升,但由于业务性质的原因无法再继续缩减,于是我们向微信小程序提出了独立分包的概念:用户在使用独立分包时无需下载主包。

通过独立分包加载,程序使用期间下载更新阶段,只需要加载61K的分包大小。目前这个功能还在灰度阶段,扫码付小程序团队也在作为第一批的内测用户进行体验,优化效果在之后的实践中,我们也会分享出来,大家可关注美团技术团队公众号,持续关注我们。

如何提升内部环节转化率?

在进入小程序到支付这个环节,属于我们的业务流程。在这个环节中的转化率丢失虽然我们能够掌控,但是必须有所依据,才能对症下药。所以我们做了一些数据监控:

  • 业务核心流程监控。业务核心流程指用户进入小程序后所涉及的影响最终支付的中间流程,中间流程的丢失会直接影响业务整个转化率丢失,所以这里必须进行监控。而业务核心流程监控需要可监控的具体指标,我们对进入小程序和支付进行了关键动作拆解,从开始扫码到用户看到页面,再到点击支付、初始化订单、支付成功。拆解完这些关键动作,再针对每一步可控环节,进行技术指标的拆解。从入口到出口的每一步制定关键指标(扫码加载转化率、点击意愿等,见下图),形成一个至上而下的漏斗,产出多个可量化指标,来做业务流程的监控。对于这部分可量化指标,可以通过长期的观察分析来提升转化率。

  • 异常监控。页面的任何异常都可能导致支付页面的渲染失败,从而无法正常支付。我们对页面的接口异常、微信API异常进行了监控。接口异常可在API(wx.request)的fail函数中直接捕获,从而上报监控;对于接口超时,则只能通过全局的app.json进行全局设置(默认60s,时间过长,对用户体验较差),此前我们曾尝试在小程序中设置全局的5s请求超时,但实际应用中并非所有场景需要设置统一的超时,最终我们单独封装了接口请求超时。微信API的异常通过微信的一些fail中进行监控即可。

  • 性能监控。小程序内部转化环节中关注进入小程序后的白屏时间和可交互时间。内部白屏时间从onLoad处打点,到页面onReady处结束;内部可交互时间从onLoad处打点,到页面数据请求结束后的可点击支付时间截止。
  • 日常监控中,我们也发现了一些问题,例如接口调用超时、接口调用失败,这些问题会导致页面流程终止。针对这些问题我们做了一些优化:
    • 接口合并。支付页面的外网链路接口请求数量较多,任意一个接口的失败都会导致问题,合并接口则可以减少问题出现概率,提升中间流程的转化率。
    • 增加重试机制。在出现接口异常的情况下,会直接导致页面阻塞,如果通过重试能成功,则可以提升转化率。整个流程中可重试的有两类:自有的接口请求异常,小程序API调用异常。

对于这两类异常,在接口超时、调用失败时采取重试。而为了避免在极端情况下服务端流量陡增、峰值倍数增加,页面的可重试次数会在前置获取全局配置时根据“可重试次数”进行控制,并且每次重试需要在一段时间后用户手动触发。超过重试次数时,则流程终止。

如何监控内部和外部环节?

前面我们也提到,对于小程序开发者而言,扫码到小程序调起这个环节是黑盒的,我们开发者无法得知此处的细节,所以说在监控外部环节这方面我们开发者似乎可做的事情屈指可数。但是,不知道细心的同学有没有发现,微信在每次扫码后会给我们在query参数上附带一个scancode_time字段。其实这个字段表示的是用户在使用扫一扫时微信服务端记录的时间,所以基于这个字段的考量,我们做了如下尝试,针对以下两个参数值分别做了实时监控:

  • 支付页面的白屏时间(用户看到首屏的客户端时间—用户微信扫一扫服务端时间+服务端客户端差额时间)。
  • 支付页面的用户可交互时间(页面Loading完毕时间—用户微信扫一扫服务端时间+服务端客户端差额时间)。

由于客户端的时间戳是获取本地手机系统的时间,可能存在差异。所以为了保证上报的准确性,我们在每次onLoad的时候取了一次我们服务端的时间,记录了客户端的时间与服务端的一个时间差额,并且在后续所有涉及到服务端的时间都参照这个时间差额做计算(网络100-200ms级别的传输时延,暂可忽略)。

但由于我们扫码付小程序的特殊应用场景就是为了保障用户进行快速可靠的支付,既然在外部环节可控度不高,那是不是可以考虑在内部的业务流程方面把监控统计做的细粒度一点,做到能对每一个可能影响到支付的环节有数据可循呢?我们针对这个方向,区别于传统的PV、UV统计,并对业务上报做了如下分类:

  • 根据上报的场景划分:实时性监控部分与统计部分。
  • 根据上报的类型划分:Error类型、Event类型(普通生命周期事件)、Metric类型(自定义Event类型,维度可自定义)、自定义测速类型(延时趋势与分布)。

基于上述方案的探索,我们团队基本上做到了对可能影响支付环节的很多业务指标,进行了整体的把控。从而在下一步,针对每个潜在的可优化点做进一步思考与考量,然后作出及时的策略优化与更新。通过对扫码付小程序的探索,我们积累了很多优化经验。美团的价值观是追求卓越,对于能优化的方面,我们还会进一步去探索,也欢迎更多的同学跟我们一起讨论。

作者简介

  • 陈瑶,2015年校招入职美团,此前参与过美团平台移动端触屏版的前端开发工作,从0到1参与了智能支付应用层的前端建设工作,现负责美团收单业务扫码付小程序业务。

招聘

如果对我们“智能支付大前端团队”感兴趣,可直接简历发送给(chenxuan03@meituan.com)。欢迎加入美团,跟我们一起探索未来。

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

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

相关文章

谈谈算法岗简历优化与面试技巧!

秋招已经开始,许多同学都在为简历和面试发愁。我跟BAT某lab高级算法研究员、担任过多次技术面试官的Sunny师兄聊了聊,跟他请教了简历撰写和面试准备的方法。重磅福利在文末↓Sunny 目前在BAT某lab担任高级算法研究员,有多年的简历筛选和面试经…

LintCode 386. 最多有k个不同字符的最长子字符串(双指针)

1. 题目 给定字符串S,找到最多有k个不同字符的最长子串T。 样例 1: 输入: S "eceba" 并且 k 3 输出: 4 解释: T "eceb"样例 2: 输入: S "WORLD" 并且 k 4 输出: 4 解释: T "WORL" 或 "ORLD"挑战 O(n) 时…

院士发声:科研人也要养家,非升即走只能做短平快的研究

源 | 募格课堂综合自上游新闻、澎湃新闻、百度百科如今,59岁的中国科学院院士马大为,他也感慨科技界的“内卷”,“很多大学和研究单位没有按照科研的规律招PI(Principal Investigator,学术带头人、首席研究员&#xff…

镣铐之舞:美团安全工程师Black Hat USA演讲

背景 2018年8月9日,全球顶级安全会议——Black Hat USA在美国拉斯维加斯的曼德勒海湾会议中心落下了帷幕,这场盛会在全球黑客心中几乎等同于“世界杯”和“奥斯卡”一样的存在。这场一年一度的盛会已经有着21年的悠久历史,也被公认为世界信息…

LintCode 550. 最常使用的K个单词II(自定义set(可修改数据的优先队列) + map)

1. 题目 在实时数据流中找到最常使用的k个单词. 实现TopK类中的三个方法: TopK(k), 构造方法add(word), 增加一个新单词topk(), 得到当前最常使用的k个单词. 样例 1: 输入: TopK(2) add("lint") add("code") add("code") topk() 输…

Pix2Seq:谷歌大脑提出 CV 任务统一接口!

文 | 青豆最近一个大趋势就是将各类任务统一在一个大一统框架下。大规模预训练语言模型已成功打通各类文本任务,使得不同的NLP任务上,都可以用这种统一的sequence生成框架作为基础模型,只需要通过prompt的方式,指导模型生成目标结…

美团针对Redis Rehash机制的探索和实践

背景 Squirrel(松鼠)是美团技术团队基于Redis Cluster打造的缓存系统。经过不断的迭代研发,目前已形成一整套自动化运维体系:涵盖一键运维集群、细粒度的监控、支持自动扩缩容以及热点Key监控等完整的解决方案。同时服务端通过Doc…

剑指Offer - 面试题59 - II. 队列的最大值(deque模拟单调栈)

1. 题目 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的时间复杂度都是O(1)。 若队列为空,pop_front 和 max_value 需要返回 -1 示例 1: 输入: ["MaxQueue","push…

行业现状令人失望,工作之后我又回到UC伯克利读博了

文 | SHREYA SHANKAR编 | 小舟、陈萍源 | 机器之心很多同学在面临读博和工作的选择时会犹豫不决,这篇文章也许能给你一点启发。机器学习领域近来受到大模型的冲击,很多小公司表示难以承担大模型的训练费用。但行业中机器学习工程的发展具体是怎样的&…

前端遇上Go: 静态资源增量更新的新实践

为什么要做增量更新 美团金融的业务在过去的一段时间里发展非常快速。在业务增长的同时,我们也注意到,很多用户的支付环境,其实是在弱网环境中的。 大家知道,前端能够服务用户的前提是 JavaScript 和 CSS 等静态资源能够正确加载。…

剑指Offer - 面试题26. 树的子结构(双重递归)

1. 题目 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A:3/ \4 5/ \1 2 给定的树 B:4 /1 返回 true,因为 B 与 A 的一…

给1万帧视频做目标分割,显存占用还不到1.4GB | ECCV2022

文 | 明敏 发自 凹非寺源 | 量子位 | 公众号 QbitAI咦,怎么好好的藤原千花,突然变成了“高温红色版”?这大紫手,难道是灭霸在世??如果你以为上面的这些效果只是对物体后期上色了,那还真是被AI给…

互联网公司数据安全保护新探索

近年来,数据安全形势越发严峻,各种数据安全事件层出不穷。在当前形势下,互联网公司也基本达成了一个共识:虽然无法完全阻止攻击,但底线是敏感数据不能泄漏。也即是说,服务器可以被挂马,但敏感数…

剑指Offer - 面试题47. 礼物的最大价值(动态规划)

1. 题目 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值&#…

大佬在线复盘:我在训练 DALL·E 时犯过的错

文 | jxyxiangyu在写了一周的业务代码后,沏一杯绿茶,总算可以有时间看看鸽了一个月的素材了。好的,小伙伴们,废话不多说,今天我们将跟随 Boris Dayma 大佬,看看他在训练 DALLE-Mega 时遇到的一系列问题。据…

Toast与Snackbar的那点事

背景 Toast是Android平台上的常用技术。从用户角度来看,Toast是用户与App交互最基本的提示控件;从开发者角度来看,Toast是开发过程中常用的调试手段之一。此外,Toast语法也非常简单,仅需一行代码。基于简单易用的优点&…

LintCode 1683. 杀怪兽(队列)

1. 题目 有 n 只怪兽和一个奥特曼,奥特曼和怪兽都有5个属性值。 当且仅当奥特曼的5个属性值都不小于怪兽时,奥特曼可以杀死怪兽。 当一个怪兽被杀掉时,这个怪兽的5个属性会增加到奥特曼身上。 请问奥特曼最多可以杀死多少怪兽? 样例 1: 输…

聊聊大火的多模态

多模态机器学习,英文全称 MultiModal Machine Learning (MMML),旨在通过机器学习的方法实现处理和理解多源模态信息的能力。每一种信息的来源或者形式,都可以称为一种模态。例如,人有触觉,听觉,视觉&#x…

2018开春大礼:750页电子书 + 33场技术沙龙资料 + 17场线上课程分享

2017年,美团成长为中国领先的生活服务电子商务平台,在吃喝玩乐住行等200多个品类,2800多个城区县,服务了亿万消费者、数百万商家,日订单数超过2200万,年度交易总额达到了3600亿。2017年10月,美团…

LintCode 1677. 石头(自定义优先队列)

1. 题目 给定数组 p 代表 n 个石头的位置和数组 d 代表这 n 块石头能够扔的距离。 从左(0位置)往右走。当你第 k 次碰到一个石头时, 如果 k 是奇数, 把这个石头往右扔; 如果 k 是偶数,跳过这个石头。 返回不再会碰到石头时&…