在不冻结 GUI 的情况下呈现 plotly.js 图形(Web Worker?)

Render plotly.js graph without GUI freezing (Web Worker?)

我正在开发一个仪表板,用户可以在其中构建自己的可视化效果(plotly.js)。 有时,这些可视化的复杂性会导致渲染时间过长,从而导致浏览器冻结 UI。

我已经为仪表板中的其他任务创建了网络工作者。也许有一种方法可以在 web-worker 中渲染 plotly.js 图表并将它们 return 渲染到主线程?

我知道 web-workers 没有 DOM/Canvas 能力。但是也许有技巧或者您知道更好的方法来防止 GUI 冻结?也许使用 phantomjs 将渲染外包给服务器(我从未使用过它,所以只是猜测它可以与 pjs 一起使用)。

您的问题的可能解决方案是 OffscreenCanvas API:https://developer.mozilla.org/de/docs/Web/API/OffscreenCanvas

您可以从工作人员处访问此 API,也可以直接将其与您提到的库一起使用。

但是由于浏览器支持真的很差(至少在 Firefox 中,我不知道其他浏览器目前如何,https://bugzilla.mozilla.org/show_bug.cgi?id=801176)不支持 2d canvas 上下文(但是如果您使用使用 WebGL 的库,那将不是问题)。

作为替代方案,您可以使用 canvas 的纯 javascript polyfill(它是重新实现),它适用于 WebWorkers: https://www.npmjs.com/package/canvas-webworker 值得一提的是,这种方式不适用硬件加速。

结合起来,可以创建一个很好的解决方案。