根据土著刷题共建群里的一个小伙伴反馈,刷题会出现切题卡顿的情况,有时会出现滑不动的情况。
定位问题
为了定位切题卡顿问题的具体原因,测试了高低端手机📱、切换2G、3G、4G低网络状态等各种影响切题的现实情况,经过借助工具和性能面板的辅助分析,大致把切题卡顿性能问题定位到【题目池体积】上!
由于题目池会参与到页面的渲染上,虽然之前已经做了几重的优化,但是当题目池一旦加载数据过多,积累到1500+的时候,在切题时就会有明显卡顿的感觉。
解决问题
定位出问题所在了,那咱们就要解决问题!既然目前切题的问题是因为题目池体积导致的,那咱们就要解决这个体积问题。那有什么方案可以解决呢?目前的题目池是用数组来存储的,那能否换一种数据结构??或者分而治之,把它给拆片??
👉最近chatgpt很火,那咱们就问问chatgpt如何解决这个问题,有什么优化方案
给出了五个优化方案,但是咱们之前的版本都已经做了,然后我又换了几种方式问,给出的优化方案还是差不多。
OK😯不要被带偏了,咱还是回到【题目池体积】上,目前题目池是用数组来存储的,那有没有性能更高的数据结构呢?然后我又问了chatgpt,然后我得到两个推荐的数据结构:Map 或 Set,对比之下 Map 数据结构更适合一些。
👉咱们还能有什么其它的优化处理吗?经过查看业务代码,发现题目池参与了页面渲染有好几个地方,特别是刷题结果和答题卡这两处,那就得把题目池剥离出页面渲染。
按此前的实现方案,答题卡是严重依赖题目池的,为了把题目池剥离出页面渲染,咱们可以为答题卡做一个滚动加载方案,只要把这两者的数据映射上就可以了。
总结一下以上的分析并制定具体的优化处理:
1️⃣. 把题目池的数据结构更改为 Map
2️⃣. 页面渲染涉及到题目池的,更改成从 虚拟列表 内获取数据
3️⃣. 答题卡改用浮层弹出,滚动加载
优化结果
经过几天的时间💪成功把切题渲染耗时从【58毫秒】拉低到【2毫秒】
进一步优化空间
chatgpt给出的第五个点【减少不必要的计算】,其实从另一个角度想这个方案,咱们可以使用异步来对一些必要的计算进行处理,比如使用【线程】进行处理计算。
目前土著刷题一个题库的题目数上限是1000,VIP的话是2500,暂时还不用使用【线程】做进一步的优化,一切的优化措施都是得在现实需要的情况进行,不能为了优化而优化。
当然了,以后的企业定制版肯定是得上【线程】优化的,后续会再做进一步的优化,提高用户的体验~
使用ChatGPT的小感悟
ChatGPT,总体上使用感觉不错,特别是对于在某一个领域知识储备不足的情况下,可以极大的拓宽解决问题的思路,当然了,在【如何调教ChatGPT】方面也是下点功夫的,网上很多调教的套路~
ChatGPT很强大,基本代替了搜索引擎,但是就目前而言,ChatGPT更多的是作为辅助我们解决问题的一个工具~