您当前的位置:首页 > 百宝箱

投稿008期 - 我以为

2024-11-08 10:48:02 作者:石家庄人才网

身为一个富有激情与探索精神的开发者,我有着无尽的故事要分享。今天,我要讲述的并非关于策划的秘密或是与项目经理的情感纠葛,而是我在写前端项目时的一段尴尬经历。希望通过这段经历,能为大家带来启示,避免犯下类似的错误。

一、事件起源

故事发生在年初,当时我负责一个直播项目的前端开发。项目中的页面需要展示大量数据,在初始化时就要加载很多页面数据。请求数据的代码看起来像这样(对http封装感兴趣的朋友,请期待我后续的文章):

```javascript

this.$okhttp(apis.rosterApi.getstate, {lessonid: this.mylessonid})

.then(res => {

// dosomething...

})

.catch(res => {

this.$message.error(res)

})

```

获取数据后,因为不只一个组件需要使用这些数据,我考虑到了全局事件和vuex。考虑到全局事件的穿透性和不可控性,我选择了vuex来管理这些数据。我写了action、mutations来保存和处理这些数据,并在每次初始化vuex时从localStorage中获取。

为什么要这么做呢?主要是受到一套需求的影响,为了减少http请求,借鉴了Android的缓存思想。

二、问题出现了

项目匆匆忙忙地上线,我在本地没有经过充分测试就推到了生产环境。一开始,开直播的人数不多,一切似乎都在正常进行。当第二周直播人数增多时,问题出现了。当两个直播同时打开并尝试切换时,播放器依然播放的是上一个直播间的流地址。只有刷新页面后,播放器才会恢复正常,播放新的流地址。

三、排查问题

面对这个问题,我首先怀疑是自己的代码有问题。我自信地认为可能是缓存没有清理。于是我查询了videojs的官方文档,找到了一个释放资源的接口dispose。我在组件销毁前调用这个接口,结果问题真的解决了。这让我开始怀疑videojs插件有问题。

当我深入阅读videojs的文档和源码时,并没有发现任何漏洞。我不得不重新调试我的代码。我在网络请求返回值那里打印了数据,确实是新的流地址。我也检查了videojs的播放器组件,一切正常。

我意识到问题可能不在videojs身上,而是在我自己的代码中。我在全局状态管理的地方找到了问题所在。原来我在保存新的流地址时,没有正确地更新vuex中的状态,导致播放器依然使用旧的流地址。解决这个问题后,一切恢复正常。

这段经历让我深刻认识到编程中的细节问题的重要性。一个小小的疏忽可能会导致严重的问题。希望通过这个故事,能提醒大家注重细节,避免犯下类似的错误。经过一段时间的等待,广东地区突然迎来了台风。公司的网络环境似乎受到了太阳黑子与龙卷风的双重影响,网速变得异常缓慢,简直让人无法忍受。就在公司迎来了一批享有盛誉的教师,我不得不暂时放下手中的工作,频繁进出直播间进行调试。

问题在这个时候出现了。我注意到在直播间的数据会在新直播间中一闪而过。我当时正在忙于调试另一个问题,并且暂时移除了加载功能。这个现象让我突然想到了一个重要的问题。讲师在后台开启直播间时才会申请流地址,所以在未开启直播间的时候切换是没有问题的。当我真正打开直播间时,我发现原来是我在每次进入直播间时都会将上一次的数据保存到本地存储中。当再次进入直播间时,系统会优先使用之前保存的流地址,这就导致了问题的出现。当页面刷新时,使用前一次的流地址就会恢复正常。解决这个问题其实并不复杂:只需要分离出需要缓存的数据,用另一个字段进行存储,去掉 mutations 中的逻辑以及在初始化时的缓存代码即可。

// 存储数据:window.localStorage.setItem('tableData', JSON.stringify(state.tableData))

// 获取数据:state.tableData = JSON.parse(window.localStorage.getItem('tableData'))

说在其实这件事情虽然看似微小,但却让我深感羞愧。作为一个程序员,我们不仅要善于学习,更要对自己的代码有严格的把控。有时候,问题虽然看似微不足道,但却能反映出深层次的智慧。对自己编写的代码有自信是一件好事,但过度自信却可能让他人和整个团队对你的评价降低。智者千虑,必有一失;人非圣贤,孰能无过。对于我们编写的代码,还是要谨慎求证,追求完美。只有不断地修正和改进,我们的代码才能越来越优秀,我们的技术才能越来越精湛。

版权声明:《投稿008期 - 我以为》来自【石家庄人才网】收集整理于网络,不代表本站立场,所有图片文章版权属于原作者,如有侵略,联系删除。
https://www.ymil.cn/baibaoxiang/27480.html