ResizeObserver loop limit exceeded报错解决方案

这篇具有很好参考价值的文章主要介绍了ResizeObserver loop limit exceeded报错解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ResizeObserver loop limit exceeded报错解决方案

背景

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

问题原因

  1. 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);
};
  1. 如果在一个动画帧内,ResizeObserver不能处理所有的observations,就会触发这个ResizeObserver loop limit exceeded

解决方案

  1. 阻止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>
    
  2. 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),
    });
    
    
  3. element ui 在最新的版本中已经使用decounce方法修复了这个问题,源码如下:文章来源地址https://www.toymoban.com/news/detail-589666.html

    /* 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报错解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Property xxx was accessed during render but is not defined on instance. 和 ResizeObserver loop limit

    问题出现,在Vue3中引入了elementui相关报错 关于今天在Vue3中遇到的Property \\\"size\\\" was accessed during render but is not defined on instance. 然后还报错了ResizeObserver loop limit /(ㄒoㄒ)/~~ 出现的报错意思是 \\\" 属性\\\'xxx(size)\\\'在渲染期间被访问,但未在实例上定义 \\\" 引入elementui中Vue3template里的相关代

    2024年02月13日
    浏览(28)
  • 项目启动报错RMI TCP Accept-0: accept loop for ServerSocket[addr=0.0.0.0/0.0.0.0,localport=53137]的解决方案之一

    IDEA启动项目时不时就会出现一些奇怪的问题,如以下错误代码 解决方案: 1、打开IDEA右上角Edit Configurations 2、在VM options处填写 -Djava.rmi.server.hostname=localhost 3、重新启动项目,成功

    2024年02月12日
    浏览(28)
  • 解决GateWay报错:Exceeded limit on max bytes to buffer : 262144

    场景: 前端传来了一个大的字符串 发现请求不通 一番调试发现SpringGateway 默认内存缓冲区262144字节 网上查了很多种常见的解决方案无效之后 直接重写底层 网友的解决方案 方案1(无效) 直接修改缓冲区大小 方案2(无效) 方案3 无效 gateway-2.2.3以上版本修复了该bug,在Gat

    2024年02月04日
    浏览(36)
  • 解决Elasticsearch索引报错问题之Limit of total fields 1000 has been exceeded ...

    在Kibana上查询生产环境的日志时,发现某个一直无法查询到,怀疑想要的日志被丢弃了,遂登录服务器查询原始日志,果然发现日志存在被丢弃的问题。经定位,在Logstash的日志中发现问题所在: Elasticsearch的Mapping做了映射保护,为了防止索引中错误的内容导致Mapping

    2024年02月11日
    浏览(27)
  • Spring Cloud Gateway 彻底解决Exceeded limit on max bytes to buffer : 262144报错问题

    使用Spring Cloud Gateway开发内部API网关时,当业务的Http请求体大小超过256K时,会出现如下报错:Exceeded limit on max bytes to buffer : 262144。 Spring Boot框架给了两种方式来修改这个大小的方式: 方式一:使用修改配置参数值,spring.max-in-memory-size: 1024 * 1024 的方式 方式二:使用WebFluxC

    2024年02月10日
    浏览(33)
  • OpenText Exceed TurboX(ETX)—— 适用于 UNIX、Linux 和 Windows 的远程桌面解决方案

    由于新技术的采用,以及商业全球化和全球协作的现实,几乎所有企业(无论其规模和所处行业)的员工的工作方式、时间和地点都发生了重大变化。业务领导者正在推动其 IT 部门提出解决方案,以帮助其远程员工提高工作效率,同时确保公司系统安全可用并提供卓越的用户

    2024年02月09日
    浏览(25)
  • 微信小程序报错“navigateTo:fail webview count limit exceed”

    今天在开发微信小程序时遇到一个不常见的报错,今天教大家如何一分钟解决下图报错。 当微信小程序中使用了过多的 webview 组件时,会导致报错 “navigateTo:fail webview count limit exceed” 。这是因为微信小程序对 webview 组件的数量有限制,超过限制就会报错。具体的限制数量可

    2024年02月11日
    浏览(41)
  • elasticsearch报错:exceeds the [index.highlight.max_analyzed_offset] limit [1000000]

    The length [27277624] of field [content] in doc[2]/index[1234567890abcdefg] exceeds the [index.highlight.max_analyzed_offset] limit [1000000]. To avoid this error, set the query parameter [max_analyzed_offset] to a value less than index setting [1000000] and this will tolerate long field values by truncating them. ********************************************

    2023年04月25日
    浏览(32)
  • torch.hub.load报错urllib.error.HTTPError: HTTP Error 403: rate limit exceeded

    在运行DINOv2的示例代码时,需要载入预训练的模型,比如: torch.hub.load报错“urllib.error.HTTPError: HTTP Error 403: rate limit exceeded”,具体报错信息如下: Traceback (most recent call last):   File \\\"/data1/domainnet/dinov2/demo.py\\\", line 15, in module     backbone_model = torch.hub.load(repo_or_dir=\\\"facebookresearch/

    2024年02月04日
    浏览(37)
  • doris查询报错err: Error 1105: errCode = 2, detailMessage = Memory limit exceeded:<consuming tracker:...

    为了防止用户的一个查询可能因为消耗内存过大。查询进行了内存控制,一个查询任务,在单个 BE 节点上默认使用不超过 2GB 内存。 用户在使用时,如果发现报 Memory limit exceeded 错误,一般是超过内存限制了。 遇到内存超限时,用户应该尽量通过优化自己的 sql 语句来解决。

    2024年02月10日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包