有没有办法在 Web Worker 中将 SVG 字符串渲染到 OffscreenCanvas?
Is there a way to render an SVG string to an OffscreenCanvas in a web worker?
我正在开发一个网页,该网页对 SVG 字符串数据进行相当繁重的处理。因为这些字符串的大小可能会达到 m/bs,所以我想将 SVG(依赖于浏览器)的渲染移动到工作人员,以避免阻塞 UI.
我的问题是工作人员无法访问任何 DOM 元素 - 是否有任何方法可以单独使用 SVG 字符串将 SVG 绘制到 OffscreenCanvas 的 2D 上下文?或者有没有办法将字符串转换为可以传递给工作人员的数据格式?
还没有原生方式。
根据规范,即使在 Worker 中,您也应该能够从保存 SVG 图像的 Blob 创建 ImageBitmap。
实际上,还没有浏览器实现它,当我与实现者讨论它时,似乎没有人在这样做。
在 Chrome 中,您可以访问 Path2D 构造函数,它可以以某种方式帮助 <path>
的 d
属性,但这实际上只是渲染 SVG 的一小部分.
所以最好的办法可能是为此使用一个库。
值得注意的是,我认为 canvg 在这里最合适。我自己不使用它,但它们已经存在很长时间了,而且最新版本似乎可以在 Worker 中使用 OffscreenCanvas(在 Chrome)。
我正在开发一个网页,该网页对 SVG 字符串数据进行相当繁重的处理。因为这些字符串的大小可能会达到 m/bs,所以我想将 SVG(依赖于浏览器)的渲染移动到工作人员,以避免阻塞 UI.
我的问题是工作人员无法访问任何 DOM 元素 - 是否有任何方法可以单独使用 SVG 字符串将 SVG 绘制到 OffscreenCanvas 的 2D 上下文?或者有没有办法将字符串转换为可以传递给工作人员的数据格式?
还没有原生方式。
根据规范,即使在 Worker 中,您也应该能够从保存 SVG 图像的 Blob 创建 ImageBitmap。
实际上,还没有浏览器实现它,当我与实现者讨论它时,似乎没有人在这样做。
在 Chrome 中,您可以访问 Path2D 构造函数,它可以以某种方式帮助 <path>
的 d
属性,但这实际上只是渲染 SVG 的一小部分.
所以最好的办法可能是为此使用一个库。
值得注意的是,我认为 canvg 在这里最合适。我自己不使用它,但它们已经存在很长时间了,而且最新版本似乎可以在 Worker 中使用 OffscreenCanvas(在 Chrome)。