GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | |||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | |||||||||||||||
GeezerVison is showing github.com — Vue ExceptionlessErrorHandler serializes the whole component instance and freezes the page · Issue #203 · exceptionless/Exceptionless.JavaScript Open Labels Description
Where
What happens Measured in Node 22 with jsdom, Vue 3.5 and
Results are the same with The handler's signature Expected A component error is reported quickly, with a small amount of data that identifies the component, and the page stays responsive. Steps to reproduce
Minimal Node repro of the serialization cost (uses import { JSDOM } from "jsdom"; const dom = new JSDOM("<!doctype html><div id=app></div>", { url: "http://localhost/" }); Object.assign(globalThis, { window: dom.window, document: dom.window.document, Element: dom.window.Element, SVGElement: dom.window.SVGElement }); const { createApp, h } = await import("vue"); const { ExceptionlessClient } = await import("@exceptionless/core"); const client = new ExceptionlessClient(); const Broken = { render() { throw new Error("boom"); } }; const app = createApp({ render: () => h("div", [h("span", "hi"), h(Broken)]) }); app.config.errorHandler = (err, vm, info) => { const start = Date.now(); const builder = client.createException(err).setProperty("vm", vm).setProperty("info", info); console.log(`${Date.now() - start}ms, ${JSON.stringify(builder.target.data.vm).length} bytes`); }; app.mount("#app"); Suggested fix Don't serialize the instance. Record a few safe fields instead, such as the component name ( ActivityMetadataMetadataAssigneesLabelsTypeProjectsMilestoneRelationshipsDevelopmentIssue actions | |||||||||||||||
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |