vue开发中出现警告Forced reflow while executing JavaScript took

30 篇文章 0 订阅
7 篇文章 0 订阅

这个问题我们用中文翻译一下:

执行JavaScript时强制回流

也就是哪里的操作 导致页面回流从而卡顿

什么是强制回流??

点我了解强制回流

我遇到的情况

我写了一个试题列表,列表里面有300题,每个题目有4个选项。起初我觉得有点卡,但是觉得数据量才这么点就卡很不合理就先放着没管。
直到我数据量到了500以上,那页面我滴天,真的迟钝!!

开始排查

首先判断是否哪里频繁使用v-if等导致的,我一块块注释重复运行发现并不是他的问题。
其次判断是否是数据渲染问题,因为我抽出了好几个组件以及v-for去循环渲染数据。在我一重重注释发现,只要把列表数据删了就不会卡顿了,但这不行啊。不能手有病我们就把手砍了对吧,我们需要找到到底哪里出现的问题。
最后在我刨根问底的过程中发现了我v-for了el-radio,看着是一点问题也没有,都是常规用法。但是一注释掉, 竟然不卡了??!!!

找到凶手

注释掉el-radio后不卡,这让我十分愤怒和发狂哈。因为我一直以为是我哪里渲染的问题,浪费我几个小时的时间。

寻找平替

不如简简单单input哈

上代码: 注释掉的是曾经的代码

    <ul class="topic-card-radio-wrapper">
          <!-- <el-radio-group v-model="radio"> -->
          <li v-for="item in topicData.answerVOList" :key="item.id" class="topic-card-item">
            <!-- <el-radio :label="item.id" :disabled="topicSettings && topicSettings.isDisabled">
                {{ item.sort }}
                <span>.</span>
                {{ item.optionTitle }}
              </el-radio> -->

            <input @change="checkedAnswer(item.id);" type="radio" :id="`exam-answer-${item.id}`"
              :name="topicData.questionId" :value="item.id" v-model="radio"
              :disabled="topicSettings && topicSettings.isDisabled" />
            <label :for="`exam-answer-${item.id}`"> <span>
                {{ item.sort }}
                <span>.</span>
                {{ item.optionTitle }}
              </span>
            </label>
          </li>
          <!-- </el-radio-group> -->
        </ul>

完结, 如果使用el-raidio也可以解决这个问题 请指教!!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
`requestAnimationFrame`是浏览器提供的一种高效绘制动画的方法。它可以让浏览器在下一次重绘之前调用指定的回调函数,从而实现更流畅的动画效果。 关于你提到的"Violation requestAnimationFrame handler took 157ms",这个警告信息表示你的`requestAnimationFrame`回调函数执行时间过长,超过了16.7毫秒(约等于1000/60≈16.7ms)。这可能会导致动画性能下降,影响用户体验。 为了解决这个问题,你可以尝试以下方法: 1. 优化回调函数的执行效率。检查回调函数的代码,看是否有可以优化的部分,例如减少不必要的计算、避免使用高开销的API等。 2. 使用`cancelAnimationFrame`取消已经安排的回调。如果回调函数执行时间过长,可以考虑在合适的时候取消已经安排的回调,以避免过度消耗性能。 3. 调整动画帧率。如果你的动画需要更高的帧率,可以尝试使用`window.requestAnimationFrame`的第二个参数来设置帧率。例如,将帧率设置为60fps: ```javascript function loop(timestamp) { if (timestamp < lastTime) { return; // 跳过前一个循环 } lastTime = timestamp; // 更新动画状态并请求下一帧 render(); window.requestAnimationFrame(loop); // 设置帧率为60fps } window.requestAnimationFrame(loop); // 开始动画循环 ``` 总之,要解决"Violation requestAnimationFrame handler took 157ms"的问题,需要关注回调函数的执行效率和动画帧率的设置。通过优化代码和调整参数,可以提高动画性能,提升用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值