前端BUG录- audio 意外的 Pending 挂起状态

简介: 最近公司一直在做众审平台相关的功能,大多数还都和音视频有关,前端终究还是逃不过这一劫。疯狂遇到 BUG, 今天来说说其中一个:audio 加载时意外的长时间 Pending 问题。

BUG 场景


  1. vue 框架


  1. 移动端(android 和 ios 的兼容也挺坑,尤其是低版本)


  1. 偶现(测试数据很难复现)


  1. 资源是 cdn,存在海外节点。(意味着不是海外用户访问慢)


BUG 原因猜测


  1. cdn 回源慢,报错快。未监听报错。


因为测试环境数据很难复现。线上数据比较新,怀疑是首次使用回源导致。
但是经过排查并不是,因为线上数据推到了第二天,还是存在问题。
而且也监听了报错事件。


  1. 访问达到限制,导致后续请求挂起。

首先我们都知道 chrome 同一域名并行加载资源的数量是 6 个。那么我们来尝试复现一下这个问题。 (的确可以复现)


// 设置一个计数器,可以用控制台的过滤功能看日志。
// count = 0;
// tag = `${Date.now()}-${Math.random()}-count${count++}`
tag = `${Date.now()}-${Math.random()}`
// 初始化一个 audio 标签
audio = new Audio()
// 设置资源地址
audio.src= "http://chuangshicdn.file.m.mvbox.cn/upload/1cfd8d964385aeb8d3b3051396146314_927674570_1.m4a?" + tag
// 获取 audio 所有事件,触发事件就打日志
audioEventList = [];
for(var i in audio) /^on/.test(i) && audioEventList.push(i)
audioEventList.forEach(v=>{
    audio[v] = console.log.bind(console, v, tag)
})
// 可以尝试播放音频,这样播放完毕之后会继续加载。
// audio.play()


  1. 那么基于这个测试,我就有理由怀疑,vue 异常的更新了节点,导致 audio 被阻塞。 类似于 .lazy 异常状态的 input。


  1. https://www.lilnong.top/static/html/bug-vue-audio-pending-status.html 但是又没有成功复现。


问题总结



问题复现不稳定,所以只能盲猜。目前来看是修复了,方案用的是 reload


解决方案



  1. 刷新页面 location.reload(),基于我们上面定位的问题,我们可以刷新页面来规避资源阻塞的问题。


  1. 因为默认的 audio 标签是会自动中止资源加载的。所以我们可以把 audio 标签移出 Vue 环境。


  1. 资源加载超时时,提示用户刷新页面。


  1. ajax 加载资源,然后做控制。但是需要跨域支持,而且加载也比较慢。为了好的体验还得上 AudioContext 有点太复杂了。
相关文章
|
前端开发 测试技术
你发现一个bug,如何定位这个是前端还是后端缺陷?建议收藏
你发现一个bug,如何定位这个是前端还是后端缺陷?建议收藏
864 0
|
Web App开发 前端开发 开发者
|
前端开发 安全 程序员
测试大姐趁我下班点又提了个bug!前端你咋多个options请求?
测试大姐趁我下班点又提了个bug!前端你咋多个options请求?
139 0
|
9月前
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
308 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
11月前
|
前端开发 JavaScript 开发者
前端开发的终极技巧:如何让你的代码既简洁又高效,还能减少bug?
【10月更文挑战第30天】前端开发充满挑战与创新,如何编写简洁高效且少bug的代码是开发者关注的重点。本文介绍五大技巧:1. 模块化,提高代码复用性;2. 组件化,降低代码耦合度;3. 使用现代框架,提高开发效率;4. 统一代码规范,降低沟通成本;5. 利用工具,优化代码质量。掌握这些技巧,让前端开发更高效。
463 1
|
前端开发 安全 JavaScript
如何区分是前端BUG还是后端BUG
1 基于经验 前端BUG特点: (1)界面排版、布局错误、兼容性问题 (2)网络不稳定导致JS或CSS未完全加载或请求超时(一般不需要提BUG),正常网络下加载超时 后端BUG特点: 业务逻辑、性能问题、数据问题、安全性问题 2 通过HTTP请求和响应信息 可以通过浏览器开发者工具(F12)、postman、fiddler(移动端可通过该工具抓包)、Charles、Proxyman、Wireshark、HttpCanary、tcpdump等工具。
340 1
|
前端开发 JavaScript 流计算
前端 JS 经典:打印对象的 bug
前端 JS 经典:打印对象的 bug
96 0
|
前端开发 安全 JavaScript
怎么判断bug是前端问题还是后端问题?
怎么判断bug是前端问题还是后端问题?
378 0
|
前端开发
elementui-upload组件自定义样式上传(upload中常用的属性,但是网络上却找不到教程)(解决bug删除之后再次上传会上传删除的图片)专注后端工程师的前端速成
elementui-upload组件自定义样式上传(upload中常用的属性,但是网络上却找不到教程)(解决bug删除之后再次上传会上传删除的图片)专注后端工程师的前端速成
1745 0
|
JSON 缓存 前端开发
编写代码前,如何规避尽可能多的前端bug?
编写代码前,如何规避尽可能多的前端bug?
142 0