淘宝大促页面性能监控和优化实践

2024-03-17 04:08

本文主要是介绍淘宝大促页面性能监控和优化实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2020年618大促已经过去,作为淘系每年重要的大促活动,淘系前端在其中扮演着什么样的角色,如何保证大促的平稳进行?又在其中应用了哪些新技术?淘系前端团队特此推出「618 系列|淘系前端技术分享」,为大家介绍 618 中的前端身影。

本篇的作者是来自于淘系技术部 前端营销活动团队的森郎,为大家介绍今年的618会场是如何做到顺滑体验。

前言


作为一名前端工程师,更高的性能、更流畅的体验是长久不变的追求目标。而作为大促锋线,会场页面的性能表现直接影响了亿万消费者的购买体验。那么在今年的天猫618,我们是如何让消费者们在各个会场中能够逛的知心、挑的称心、买的开心呢?

本文将简要介绍今年的618,我们是如何通过缓存优化、请求优化等方案来应对性能挑战,并如何通过监控测试等手段来保障大规模的会场页面的性能。


变化与挑战


今年的618大促,在终端渲染方案上,淘系营销活动团队与终端架构团队深入合作,第一次大规模在会场域落地了PHA(Progressive Hybrid App)方案,并在主会场使用了web方案。这一变化对页面的资源加载、执行耗时都带来了挑战。而在业务玩法上,今年的会场在内容化、本地化等方向发力,短视频、红人直播等在H5页面上同层播放,这对页面的内存占用等提出了一定的要求。

说到挑战,首先,新用户、低端机、弱网络等在大促期间的占比明显增加,带来了较大的劣化长尾影响。其次,天猫、淘宝的小二们在618期间创建了大量的会场页面,如何在大规模的体量下仍然整体保持高性能水位,这对业务配套的检测监控方案也提出了一定的要求。


方案详解


在性能优化的落地过程中,我们根据会场页面的前端时序(如下图所示),将会场的性能优化拆分为了资源加载、数据请求、模块渲染等环节。

当前的会场所使用的渲染方案是一套页面、模块、数据相分离的异步式方案。在资源请求上,可分为三个部分:一是HTML文档(不同页面之间相同),二是包含了rax、loader、render等在内的基础JS(不同页面之间相同),三是页面所使用的各个UI模块的JS+CSS资源(不同页面之间不同)。数据请求由页面的render统一发起,并在数据网关层将当前页面的不同模块的商品列表、店铺信息等数据在组装后合并返回。

结合上述的变化挑战与实际线上的性能情况,今年618会场的性能保障方案可主要概括为上图的三个环节。下面将简要介绍各个环节的策略与实现。

 资源请求优化

✎  页面预缓存

在手机淘宝、天猫等app内,我们利用了端侧提供的静态资源缓存方案,将HTML和基础JS等资源,推送下发至客户端。在客户端的webview请求资源时,端侧可根据域名来匹配已下发的缓存包,在匹配成功后直接从本地缓存中读取对应的HTML和JS资源,而无需每次都请求网络、大大缩短了页面的初始化时间。例如,主会场的html加载耗时在推送缓存后可平均减少70+%、命中率可达到97%。

✎  模块资源缓存

模块的JS+CSS资源,因为不同页面所使用的模块不同(例如男装会场和家装会场),并且总计有上百个模块,无法做到全量的提前缓存。这里我们通过捞取top流量页面的方式,仅将首屏相关的核心模块做了模块缓存下发,较好的缓解了模块请求的耗时。

✎  模块按需加载

除了刚提到的模块缓存下发,今年的618会场还通过“模块按需加载”的优化方式,最小化的控制了当前页面的模块数量,这对首屏的JS资源请求、数据请求都有一定的缩减。在实现方案上,通过在数据网关层先读取服务端所缓存的定向投放条件,判断当前访问的URL参数、客户端信息等是否满足模块的展示条件(例如,搜索框模块仅在手淘内才展示)。不满足条件时,则直接从页面中移除这一模块。例如,在外部浏览器里打开618超酷数码会场时,页面所加载的JS资源大小可因此减少40+%。


 数据请求优化

为了给消费者们推荐最贴心的好物,现在的大促会场使用的更多是千人千面、个性化的算法推荐数据。但推荐所带来的算法耗时增加,使得数据请求成为了当前会场性能的耗时最长板。如果能够降低当前会场的数据请求耗时,那么首屏时间也会随之明显减少。

所以在今年的618会场中,我们落地了一套基于线上实时埋点的请求优化方案,通过更精简的首屏模块数量来实现了对首屏接口耗时的直接优化。

在方案中,通过采样上报的方式获取到了模块高度,并结合设备信息、页面模块排序、个性化数据等条件,个性化的控制了每次访问的首屏模块加载数量。例如,小明在访问数码会场时只需要加载5个模块,而小强只需要加载4个模块。以线上RT情况为例,针对于单个会场,方案可使得首屏耗时平均减少100+ms。

 监控检测

这次的618使用了两套检测机制来保障会场性能。第一套是模块级检测,通过与H5自动化测试平台等打通,批量化的对所有大促模块进行了性能检测,从中发现了例如部分模块的引用图片未压缩、资源域名未收敛等问题。

第二套则是页面级检测,在小二们完成了会场页面的配置填写后,批量化的对所有的618会场进行了自动检测,使得一些页面加载、数据请求、模块渲染等相关性能问题,可在上线前得以被发现和修复。

而性能监控上,与双11整体保持一致,今年618使用了一套接近于FMP的性能指标,以自定义采集上报的方式、联动前端监控平台,实现了分钟级的性能看板,帮助我们更快的发现线上性能问题、并作出针对性的调整。

 降级策略

同层播放组件的引入对会场页面的内存占用提出了较高的要求,尤其是低端机、老系统等。针对这个问题,今年的618会场域统一接入了客户端所提供的降级平台,可直接根据机型、系统版本、客户端版本等条件动态的执行降级策略。例如,可设置在手淘版本≤9.5.0 + iOS版本≤10时不播放商品短视频等等。

今年的618会场,线上整体稳定性良好,未出现因会场内存占用过高而导致的客户端crash飙高情况。


整体回顾


性能优化,功在平时,成在大促。在今年的618大促中,通过上述的优化方案和保障手段,最终达成了预期的体验目标。

但在过程中,也发现了一些可继续深挖的性能优化点。例如,可以结合端智能等客户端的能力帮助大促主会场提前完成页面数据、依赖资源的预加载,甚至是页面的预渲染。我们会在后面的一场场大促中持续迭代优化,为消费者们提供没有最好、只有更好的购物体验。

总结


618,这一场持续了20多天的年中促销活动,对于亿万消费者们来说是一场狂欢盛宴,而对于在背后默默支撑这一场大促的所有工程师们,则更像是一场极客马拉松,痛并快乐着。

淘系前端团队

618虽然已经结束,但更大规模的双11全球狂欢节马上就要启动。高复杂度、大规模的营销活动业务场景持续推动着淘系前端技术体系朝着极致方向迭代演进,期待更多的同学加入阿里淘系前端团队,一起来创造618、双11的新历史,此时此刻,非你莫属!

简历投递????:senlang.ls@alibaba-inc.com

✿  拓展阅读

作者|森郎

编辑|橙子君

出品|阿里巴巴新零售淘系技术

这篇关于淘宝大促页面性能监控和优化实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/817746

相关文章

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

在Java中使用OpenCV实践

《在Java中使用OpenCV实践》用户分享了在Java项目中集成OpenCV4.10.0的实践经验,涵盖库简介、Windows安装、依赖配置及灰度图测试,强调其在图像处理领域的多功能性,并计划后续探... 目录前言一 、OpenCV1.简介2.下载与安装3.目录说明二、在Java项目中使用三 、测试1.测

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

小白也能轻松上手! 路由器设置优化指南

《小白也能轻松上手!路由器设置优化指南》在日常生活中,我们常常会遇到WiFi网速慢的问题,这主要受到三个方面的影响,首要原因是WiFi产品的配置优化不合理,其次是硬件性能的不足,以及宽带线路本身的质... 在数字化时代,网络已成为生活必需品,追剧、游戏、办公、学习都离不开稳定高速的网络。但很多人面对新路由器

Olingo分析和实践之EDM 辅助序列化器详解(最佳实践)

《Olingo分析和实践之EDM辅助序列化器详解(最佳实践)》EDM辅助序列化器是ApacheOlingoOData框架中无需完整EDM模型的智能序列化工具,通过运行时类型推断实现灵活数据转换,适用... 目录概念与定义什么是 EDM 辅助序列化器?核心概念设计目标核心特点1. EDM 信息可选2. 智能类

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1