ResizeObserver?loop?limit?exceeded報錯原因及解決方案
背景
? 公司內部搭建了前端監(jiān)控系統(tǒng)Sentry,我把一些項目接入進去,一周后發(fā)現(xiàn)上報數(shù)量最多的事件是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,就會觸發(fā)這個
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時,給回調進行節(jié)流,使其1幀內最多執(zhí)行一次。代碼如下:
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之前執(zhí)行此函數(shù) 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報錯內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
element根據(jù)輸入動態(tài)生成表格的示例代碼
在現(xiàn)代電商系統(tǒng)開發(fā)中,后臺管理界面經常需要根據(jù)商品規(guī)格和規(guī)格值動態(tài)生成SKU表格,本文通過element-ui框架,展示了如何在Vue.js的環(huán)境下,利用子組件和動態(tài)綁定的方式,實現(xiàn)SKU表格的增刪改查功能2024-11-11
使用elementUI實現(xiàn)將圖片上傳到本地的示例
今天小編就為大家分享一篇使用elementUI實現(xiàn)將圖片上傳到本地的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09
關于Vue Router中路由守衛(wèi)的應用及在全局導航守衛(wèi)中檢查元字段的方法
這篇文章主要介紹了關于Vue Router中路由守衛(wèi)的應用及在全局導航守衛(wèi)中檢查元字段的方法,實現(xiàn)方法有兩種,本文通過實例代碼對每種方法介紹的很詳細,需要的朋友參考下2018-12-12

