Windows7上IE 9中的HTML5画布性能

Windows7上IE 9中的HTML5画布性能,html,internet-explorer,windows-7,internet-explorer-9,html5-canvas,Html,Internet Explorer,Windows 7,Internet Explorer 9,Html5 Canvas,这是一个HTML5画布应用程序。这是一个非常标准的“设计器”应用程序,用户可以在其中向布局中添加对象,移动对象,并编辑其属性 它工作得很好,但在Windows7上的IE9中却出现了真正的性能问题。如果有任何想法,我将不胜感激 操作通常需要10秒,而不是通常的2秒 另外,在使用应用程序一段时间后,浏览器会显示一条错误消息,表明主机“没有响应”,并提供“恢复网页”和“X”选项。一旦开始出现这种情况,包括“文件”菜单在内的每个用户操作都会出现这种情况,我只能通过编辑URL位置文本来摆脱这种情况。特别

这是一个HTML5画布应用程序。这是一个非常标准的“设计器”应用程序,用户可以在其中向布局中添加对象,移动对象,并编辑其属性

它工作得很好,但在Windows7上的IE9中却出现了真正的性能问题。如果有任何想法,我将不胜感激

  • 操作通常需要10秒,而不是通常的2秒

  • 另外,在使用应用程序一段时间后,浏览器会显示一条错误消息,表明主机“没有响应”,并提供“恢复网页”和“X”选项。一旦开始出现这种情况,包括“文件”菜单在内的每个用户操作都会出现这种情况,我只能通过编辑URL位置文本来摆脱这种情况。特别是,它通常发生在任何尝试在开发人员工具中使用浏览器的探查器时。这显然令人沮丧,但也可能是一个线索。我想知道是否会有挂起的同步AJAX调用,正如此错误消息所建议的那样,但是使用开发人员工具捕获网络流量表明所有调用都已完成

  • 这个问题似乎与浏览器和操作系统的结合有关。WindowsServer2008上的IE9表现正常,Windows7上的Firefox和Chrome也一样。32位或64位IE的问题也是如此

  • 大多数操作也有一个服务器端组件。例如,添加一个文本对象会调用AJAX为该对象提供一个图像。服务器API作为一个小型TurboGears应用程序实现,该应用程序使用ImageMagick进行图像处理。但是粗略的分析表明服务器端没有发生异常情况。这表明问题确实出在JavaScript中

  • 当应用程序运行时,“任务管理器”显示使用90%或更多CPU的浏览器。这适用于任何浏览器,而不仅仅是IE 9。这可能是因为应用程序中的渲染循环很紧,所以我们的一个想法是减少重新绘制画布的频率。不幸的是,这似乎没有帮助。requestAnimationFrame似乎是个好主意,但在IE9中不受支持

  • 一位同事建议使用Google Chrome框架插件可能会有所帮助。这可能是一个可以接受的解决方案,但我还没有尝试过

  • 我找到了一些关于打开控制面板选项“使用软件渲染而不是GPU渲染”的建议,但这似乎没有帮助


我注意到一件事:如果在文档中没有画布的情况下开始绘制画布,那么IE中的画布速度似乎要慢得多

所以我在画画之前要做
document.body.appendChild(canvasEl)
。您甚至可以使canvas元素
dislay:none但至少它应该在主体中


更新:对于Chrome和Firefox,将画布附加到主体上的速度似乎较慢。因此,如果您不需要将其添加到正文中,请不要将其添加到Chrome和Firefox中。

Link?IE 10更新,因此速度更快。Chrome框架应该会有所帮助,因为它使用了Chrome更快的Javascript实现。如果看不到代码或其“操作”,就不可能知道为什么会这么慢。我建议您在jsfiddle.net上用一个独立的测试用例重复这个问题。您可能需要将绘图操作分解为几个步骤,并为浏览器主线程提供CPU时间。或者。。。正如建议的那样,只要让IE用户安装Google Chrome Frame@tjameson,我就可以获得客户端的许可,发布应用程序的链接,所以我会对此进行调查。