【发布时间】:2009-03-23 23:22:10
【问题描述】:
我正在为一个 JavaScript 项目做一些研究,其中绘制简单基元(即线条)的性能是迄今为止最优先考虑的。
this question 的答案提供了一个很棒的 JS 图形库列表。虽然我意识到浏览器的选择比库的影响更大,但在选择浏览器之前,我想知道它们之间是否有任何区别。
有没有人对这些中的任何一个进行过性能比较?
【问题讨论】:
标签: javascript graphics
我正在为一个 JavaScript 项目做一些研究,其中绘制简单基元(即线条)的性能是迄今为止最优先考虑的。
this question 的答案提供了一个很棒的 JS 图形库列表。虽然我意识到浏览器的选择比库的影响更大,但在选择浏览器之前,我想知道它们之间是否有任何区别。
有没有人对这些中的任何一个进行过性能比较?
【问题讨论】:
标签: javascript graphics
更新答案(2019 年):
核心建议还是一样:为了获得最大性能,使用瘦包装器或使用原始浏览器 API,同时避免使用 DOM 或任何类似 DOM 的结构。在 2019 年,这意味着避免使用 SVG(以及基于它构建的任何库),因为在尝试快速更改 DOM 时可能会导致性能问题。
Canvas 是高性能 Web 图形的首选解决方案,适用于 2d 和 3d (webgl) 上下文。 Flash 已死,因此不再是一种选择,但即使它不是,它的性能最终也能与原生浏览器 API 相匹敌。
原始答案(2009 年):
如果您不使用 3d,只需使用原始画布和 excanvas 作为资源管理器后备。您的瓶颈将是 javascript 执行速度,而不是行渲染速度。除了 IE,当场景变得过于复杂时,IE 会陷入困境,因为 VML 实际上是构建一个 dom。
如果您真的担心性能问题,请务必使用 flash 并在 actionscript 中编写整个内容。您将获得一个数量级的更好性能,并且使用 flex sdk,您甚至不需要购买任何东西。在 flash/flex 中有几个不错的 3d 库可用。
【讨论】:
Raphael JavaScript 库
【讨论】:
它们都没有很好的性能。现在是 2009 年,Web 浏览器中可编程图形渲染的状态确实令人沮丧。 25 年前,我可以在 vt125 终端上进行更快的交互。如果您正在做任何互动,请考虑使用 Flash...否则我会根据您的需要选择一些服务器端的重型解决方案
【讨论】:
到目前为止 - 使用 processing.js(“处理”语言的 javascript 画布实现)和/或 raphael.js(小巧方便的 VML/SVG javascript 库)。
性能建议取决于任务:
高度动态、复杂的基元(或大量基元) - 画布(像素、低级 API)
基元数量较少,高度可扩展,集成在 DOM - SVG/VML(矢量,高级 API)中
【讨论】:
我知道你说浏览器的影响更大,那么为什么不坚持使用优化的 SVG 调用呢?然后,它“可以”在所有浏览器中工作,但是......
Chrome 足够强大,可以高效地进行 3D 建模:
【讨论】:
http://www.jsgl.org 怎么样?它使用 SVG/VML。
【讨论】:
对于基本绘图(例如线、圆和多边形),我会推荐Walter Zorn's Graphics Library。它在构建时考虑了性能,可在大量浏览器中使用。
【讨论】: