在浏览器中渲染巨大的交互式SVG

时间:2016-04-13 23:54:22

标签: javascript svg web buffer autocad

我们必须在Web应用程序中显示巨大的SVG文档(大约20mb)。用户应该能够放大并移动图像。

直接将SVG渲染为DOM对象太慢而且性能不一致。这同样适用于在画布上绘画。

通常,在客户端处理SVG似乎很弱。所以我想到了实现一个服务器端解决方案,以非传统格式提供小块数据。如果用户没有与文档交互,则缓冲区开始延迟加载更高详细的部分。我对这个解决方案的关注是,网络流量可能很关键。

我们将渲染2D DWG / DXF文件,这些文件将转换为SVG。

AutoCAD API似乎很慢。 DWG示例不适用于我们的任何设备。此外,应用程序必须在没有互联网连接的情况下运行,因此我们无法使用AutoCAD REST API。

你会如何解决这个问题?浏览器甚至是为处理巨大的矢量图形而构建的吗?

2 个答案:

答案 0 :(得分:1)

当谈到SVG时,它取决于节点数,渐变,不透明度和模糊效果;但是,为什么不使用最终用户的图形加速器来处理这个?

大多数现代网络浏览器都支持通过WebGL进行图形加速 - 您可以使用它来构建非常复杂的(和#34;巨大的")丰富的2D(或3D)图形,处理速度与图形一样快加速器可以处理它;就像现代游戏一样。

建议在已经为您完成大量工作的地方使用WebGL库:

  • PlayCanvas https://playcanvas.com/ - 您可以导入其他格式,构建和播放使用友好的界面编写场景脚本。 PlayCanvas有很好的文档记录。

  • Three.js http://threejs.org/ - 一个针对编码员的高级WebGL库。 ThreeJS还可以处理许多不同类型的3D格式,这个库也有很好的文档记录。

使用Three.js,您还可以将图形渲染为SVG,但是,建议使用WebGL在速度和质量方面具有明显的优势。

这两个库都非常强大,拥有一个活跃的社区,并且在现代Web浏览器中得到很好的支持;但是你可以尝试很多其他的。

有关上述图书馆的更多信息,最好访问提供大量信息和示例的网站。

答案 1 :(得分:1)

相反,我会建议您使用Autodesk Viewer,也可以使用完整REST + JavaScript APIs的开发人员。

这个库基本上会将DWG文件(2D或3D)转换为JSON流,并根据浏览器/设备功能调整数据量。它使用Three.js,但您不需要直接处理几何(但您可以)。

查看Forge Github的样本。我更喜欢Galley

您也可以使用NodeJS在本地运行它以将其服务器提供给浏览器。 Extract sample执行整个过程。