ResizeObserver loop limit exceeded报错原因及解决方案

 更新时间:2023年09月21日 11:41:44   作者:只爱喝白开水  
这篇文章主要给大家介绍了关于ResizeObserver loop limit exceeded报错原因及解决的相关资料,公司项目监听系统中发现一个高频错误ResizeObserver loop limit exceeded,而浏览器的console中却没有提示,需要的朋友可以参考下

背景

​ 公司内部搭建了前端监控系统Sentry,我把一些项目接入进去,一周后发现上报数量最多的事件是ResizeObserver loop limit exceeded。这些事件上报得太多,给Sentry服务造成很大压力,于是研究一番准备解决之。

问题原因

  • element ui中table组件的resize回调代码如下
/* istanbul ignore next */
export const addResizeListener = function(element, fn) {
  if (isServer) return;
  if (!element.__resizeListeners__) {
    element.__resizeListeners__ = [];
    element.__ro__ = new ResizeObserver(resizeHandler);
    element.__ro__.observe(element);
  }
  element.__resizeListeners__.push(fn);
};
  • 如果在一个动画帧内,ResizeObserver不能处理所有的observations,就会触发这个ResizeObserver loop limit exceeded

解决方案

  • 阻止table的重绘,例如给所有列都增加width,但是这个方案不好,无法自适应宽度。

    <el-table :data="tableData" style="width: 100%">
      <el-table-column prop="date" label="日期" width="180"> </el-table-column>
      <el-table-column prop="name" label="姓名" width="180"> </el-table-column>
      <el-table-column prop="address" label="地址" width="180"> </el-table-column>
      <el-table-column prop="address" label="地址" width="180"> </el-table-column>
      <el-table-column prop="address" label="地址" width="180"> </el-table-column>
    </el-table>
  • resize时,给回调进行节流,使其1帧内最多执行一次。代码如下:

    import Vue from 'vue';
    import ElementUI, { Table } from 'element-ui';
    import 'element-ui/lib/theme-chalk/index.css';
    import App from './App.vue';
    // 解决 ElTable 自动宽度高度导致的「ResizeObserver loop limit exceeded」问题
    const fixElTableErr = (table) => {
        const oldResizeListener = table.methods.resizeListener;
        table.methods.resizeListener = function () {
            window.requestAnimationFrame(oldResizeListener.bind(this));
        };
    };
    // 一定要在Vue.use之前执行此函数
    fixElTableErr(Table);
    Vue.use(ElementUI);
    new Vue({
        el: '#app',
        render: (h) => h(App),
    });
  • element ui 在最新的版本中已经使用decounce方法修复了这个问题,源码如下:

    /* istanbul ignore next */
    export const addResizeListener = function(element, fn) {
      if (isServer) return;
      if (!element.__resizeListeners__) {
        element.__resizeListeners__ = [];
        element.__ro__ = new ResizeObserver(debounce(16, resizeHandler));
        element.__ro__.observe(element);
      }
      element.__resizeListeners__.push(fn);
    };

总结 

到此这篇关于ResizeObserver loop limit exceeded报错原因及解决方案的文章就介绍到这了,更多相关ResizeObserver loop limit exceeded报错内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vuex模块化编码使用详解

    Vuex模块化编码使用详解

    本文介绍了 Vuex 的模块化和命名空间功能,通过对 store.js 进行模块划分,提高代码维护性和数据分类的明确性,并讲解了在组件中读取和操作模块化 state、getters、actions、mutations 的具体方法
    2025-10-10
  • vue中的axios配置及接口请求路径api配置

    vue中的axios配置及接口请求路径api配置

    这篇文章主要介绍了vue中的axios配置及接口请求路径api配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • element根据输入动态生成表格的示例代码

    element根据输入动态生成表格的示例代码

    在现代电商系统开发中,后台管理界面经常需要根据商品规格和规格值动态生成SKU表格,本文通过element-ui框架,展示了如何在Vue.js的环境下,利用子组件和动态绑定的方式,实现SKU表格的增删改查功能
    2024-11-11
  • 详解Vue与VueComponent的关系

    详解Vue与VueComponent的关系

    这篇文章主要为大家介绍了Vue与VueComponent的关系,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • 使用elementUI实现将图片上传到本地的示例

    使用elementUI实现将图片上传到本地的示例

    今天小编就为大家分享一篇使用elementUI实现将图片上传到本地的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • 关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法

    关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法

    这篇文章主要介绍了关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法,实现方法有两种,本文通过实例代码对每种方法介绍的很详细,需要的朋友参考下
    2018-12-12
  • vue项目基于WebRTC实现一对一音视频通话

    vue项目基于WebRTC实现一对一音视频通话

    这篇文章主要介绍了vue项目基于WebRTC实现一对一音视频通话效果,实现代码分为前端和后端两部分代码,需要的朋友可以参考下
    2024-05-05
  • Vuejs第十三篇之组件——杂项

    Vuejs第十三篇之组件——杂项

    组件(Component)是 Vue.js 最强大的功能之一。本文重点给大家介绍vuejs组件相关知识,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-09-09
  • Vue前端利用slice()方法实现分页器

    Vue前端利用slice()方法实现分页器

    分页功能是常见的需求之一,本文主要介绍了Vue前端利用slice()方法实现分页器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • vue webpack重写cookie路径的方法

    vue webpack重写cookie路径的方法

    webpack提供的反向代理服务器在开发阶段非常方便,几行简单的代码配置就可以使用反向代理功能,包括路径重写、cookie处理等。这篇文章主要介绍了vue webpack重写cookie路径,需要的朋友可以参考下
    2019-07-07

最新评论