【Bug】ERROR ResizeObserver loop completed with undelivered notifications.

【Bug】ERROR ResizeObserver loop completed with undelivered notifications.

报错如下:

bash 复制代码
ERROR
ResizeObserver loop completed with undelivered notifications.
    at handleError (webpack-internal:///./node_modules/webpack-dev-server/client/overlay.js:299:58)
    at eval (webpack-internal:///./node_modules/webpack-dev-server/client/overlay.js:318:7)


报错的原因:在页面绘制的时候,页面突然发生调整大小的事件,导致了样式和布局都需要重新评估,这个调整大小导致的布局变化,将延迟到下一帧来绘制。

解决方案:
在App.vue文件中添加以下代码:

bash 复制代码
<script >
// 解决ERROR ResizeObserver loop completed with undelivered notifications.

//问题的

const debounce = (fn, delay) => {
  let timer = null;

  return function () {
    let context = this;

    let args = arguments;

    clearTimeout(timer);

    timer = setTimeout(function () {
      fn.apply(context, args);
    }, delay);
  };
};

// 解决ERROR ResizeObserver loop completed with undelivered notifications.

const _ResizeObserver = window.ResizeObserver;

window.ResizeObserver = class ResizeObserver extends _ResizeObserver {
  constructor(callback) {
    callback = debounce(callback, 16);

    super(callback);
  }
};
</script>

下面是对这个代码的解释:

首先,debounce函数用于限制一个函数的执行频率,确保在一定时间间隔内只执行一次。它接受两个参数,一个是要执行的函数fn,另一个是延迟时间delay。函数内部使用setTimeout来实现延迟执行,每次调用时会清除之前的定时器,然后设置一个新的定时器来延迟执行目标函数。

接下来,代码对window.ResizeObserver进行了扩展。它将原始的ResizeObserver保存为_ResizeObserver,然后定义了一个新的ResizeObserver类,重写了其构造函数。在新的构造函数中,传入的回调函数被用debounce函数处理,确保回调函数在16毫秒的间隔内执行一次。这样做是为了限制ResizeObserver的回调频率,以避免过多的触发,提高性能。

这段代码实现了对ResizeObserver的改写,通过限制回调函数的执行频率来优化性能。

通过调整回调频率能解决上面讲解的问题报错原因。

相关推荐
何事误红尘11 小时前
全志A40i学习笔记():开发资料、启用串口
学习
for_ever_love__11 小时前
python基础语法学习: 异常的传递性
开发语言·python·学习
PC2005-cloud12 小时前
DeepSeek Harness 创建 skill 指南:结构、安装、使用
笔记·学习
YM52e12 小时前
分页查询的基石:ArkTS 为鸿蒙商品列表设计 LIMIT/OFFSET 的表
android·学习·华为·harmonyos
math_hongfan12 小时前
主从嵌套层次分明:ArkUI 订单卡片内嵌明细的鸿蒙界面
学习·华为·harmonyos
还不秃顶的计科生14 小时前
具身智能论文学习8:Octo: An Open-Source Generalist Robot Policy
人工智能·深度学习·学习·机器学习·语言模型·vla·vlm
woshihuanglaoshi15 小时前
事务加持防超卖:ArkTS 在鸿蒙里玩转 TRANSACTION 出入库
学习·华为·harmonyos
世人万千丶15 小时前
去重插入与超限淘汰:ArkTS 实现鸿蒙搜索历史的 LIMIT 艺术
运维·服务器·学习·华为·harmonyos·鸿蒙
猫不易15 小时前
从 Virtual DOM 到 Vapor:Vue 3.6 的另一条路
前端·vue.js
2601_9499506316 小时前
在线练题更方便,用练题簿打造属于自己的移动题库
学习·考研·刷题·小程序推荐