亿级流量高并发春晚互动前端技术揭秘 - 学习笔记

本文主要是介绍亿级流量高并发春晚互动前端技术揭秘 - 学习笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

主要学习到在面对大规模、高并发的场景下,确保系统的稳定性和性能,为用户提供稳定流畅的互动体验。前端都用到那些技术,做了哪些努力和创新。
文章链接:https://my.oschina.net/u/4090830/blog/11032956

一、静态资源优化

1.首屏资源加载策略

为了降低页面打开时的请求次数和资源体积,根据页面交互,将所需资源分为三类:首屏、次屏以及操作后。
首屏资源主要包括:HTML 文档、JavaScript、CSS 以及样式图片。由于这是单页面应用,可以通过常规技术将 JS 和 CSS 进行打包。对于样式图片,通过按需加载的方式,显著减小首屏资源体积。
下面将进一步讲解具体的优化方法

1-1.动画图片低损压缩

设计团队将3D 动画转化为精灵图,并将不变部分(如鼓架)单独抽离。精灵图仅包含运动部分(如鼓面敲击动画),有效降低资源消耗。
精灵图进行进一步优化,通过抽帧方式将击鼓精灵图从 24 帧降至 4 帧,结合降质参数和WebP格式,精灵图下降了 93%。此外,将主光效换成放大一倍的一倍图,并通过 CSS 属性 scale 实现放大,进一步节省资源。

1-2.标题雪碧图方案的演进

元素背景图使用雪碧图模式,是前端基本优化手段,可以显著降低请求次数。相较于常规方案,春晚红包还扩展了 2 个功能:
1、css 雪碧图在运行时为图片 URL 添加CDN降质参数和 webp 格式转换参数(someimage.png!q70.webp)

极限降低 CDN 带宽。因为并不是所有环境都支持webp,所以还需要通过运行时检测 webp 支持特性,切换 HTML 标签上的 class 名,来使对应的后代选择器的background-image属性生效。
关于特性检测,有两种技术方案:
a、通过版本判断,从 caniuse 看,可以按照只有 iOS14 以下不支持 webp 来作为判断依据。这个方案的优势是:通过 UA 判断系统版本是同步执行的,可以在调用渲染页面前的任意地方执行并修改 HTML 标签的 class 属性。确保内容渲染后有正确的背景图 css 生效。不会对原有渲染逻辑产生入侵性修改。
b、通过创建一个 Image 对象,其 src 为一个基于 base64 的 webp 图片,根据 load 是否成功来判断是否支持 webp。优势是经过大规模实践,判断逻辑的可靠性较高,缺点是异步逻辑的,需要修改原来的渲染逻辑。
2、动态雪碧图
有些图片需要通过接口调取后再获取。所以无法使用编译时雪碧图方案。为了将图片请求次数减少到 1 次,设计同学根据产品提前确认图片位置将多张图片拼到一张雪碧图上,通过固定的background-position属性,动态设置className和背景图,可实现动态背景图。

二、 降低服务器成本及风险

1.流量削峰

找到流量最大的接口,进行削峰

1-1. 初始化接口

在页面加载之前,即资源位入口,配置一个 “加载中” 页面链接。这个页面随机加载 1-3 秒后跳转到活动页面。当流量超过系统承载能力时,开启灰度开关,部分用户进入此页面,然后等待几秒后进入活动页面。

1-2. 击鼓抽奖接口

本次活动的核心玩法接口。如果仅仅是简单地随机延时几秒请求,会极大地影响用户体验。我们采用更精细化的处理方式。已知击鼓交互在用户敲击满次数或倒计时结束时触发抽奖接口,因此,随机设定敲鼓次数,将原本集中在 1-2 秒内的请求打散至 10 秒区间,用户几乎无感知。

2.即时状态的本地存储

前端可以通过本地存储一些状态,提升性能和优化用户体验,前端本地存储机制的优缺点:

  1. cookie存储空间较小(4K),且在与服务端通信时会占用请求头部,可能导致请求头过大,超过服务端设置的最大值,进而引发报错,并增加不必要的网络消耗。
  2. sessionStorage生命周期较短,仅适用于会话期间。
  3. localStorage具有较长的生命周期和较大的储存空间(2.5M-4M),能满足业务需求。

采用localStorage缓存数据,不仅可以简化调用链路、降低风险和节约成本,还能直接从本地读取券的领取状态,避免网络延迟导致的响应时间过长,提升用户体验。

这篇关于亿级流量高并发春晚互动前端技术揭秘 - 学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

html 滚动条滚动过快会留下边框线的解决方案

《html滚动条滚动过快会留下边框线的解决方案》:本文主要介绍了html滚动条滚动过快会留下边框线的解决方案,解决方法很简单,详细内容请阅读本文,希望能对你有所帮助... 滚动条滚动过快时,会留下边框线但其实大部分时候是这样的,没有多出边框线的滚动条滚动过快时留下边框线的问题通常与滚动条样式和滚动行

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

使用Python和Tkinter实现html标签去除工具

《使用Python和Tkinter实现html标签去除工具》本文介绍用Python和Tkinter开发的HTML标签去除工具,支持去除HTML标签、转义实体并输出纯文本,提供图形界面操作及复制功能,需... 目录html 标签去除工具功能介绍创作过程1. 技术选型2. 核心实现逻辑3. 用户体验增强如何运行