From aed1e2d46518bd15f5fd514bc15c6d1d759b470f Mon Sep 17 00:00:00 2001 From: Richard Harris Date: Sat, 25 May 2019 17:03:12 +0100 Subject: [PATCH] idea for tracking too-frequent updates --- src/compile/render-dom/index.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/compile/render-dom/index.ts b/src/compile/render-dom/index.ts index 0fd0d4b172..6e14d5d160 100644 --- a/src/compile/render-dom/index.ts +++ b/src/compile/render-dom/index.ts @@ -415,8 +415,20 @@ export default function dom( ${injected.length && `let ${injected.join(', ')};`} - ${reactive_declarations.length > 0 && deindent` + ${component.compile_options.dev && `let $$update_count = 0; let $$changed = new Set();`} + ${(component.compile_options.dev || reactive_declarations.length > 0) && deindent` $$self.$$.update = ($$dirty = { ${Array.from(all_reactive_dependencies).map(n => `${n}: 1`).join(', ')} }) => { + ${component.compile_options.dev && deindent` + $$update_count += 1; + Object.keys($$dirty).forEach(x => { if ($$dirty[x]) $$changed.add(x); }); + @raf(() => { + if ($$update_count > 1) { + const changed = Array.from($$changed); + console.warn('<${component.tag}> was updated ' + $$update_count + ' times in a single frame (' + changed.join(', ') + '). This may cause degraded performance'); + } + $$update_count = 0; + $$changed.clear(); + });`} ${reactive_declarations} }; `}