javascript - 解决 Google Chrome 29 中 Canvas 崩溃的问题

标签 javascript html google-chrome canvas

有人知道防止 HTML5 Canvas 在 Google Chrome 29 中崩溃的解决方法吗?

经过多次重绘后, Canvas 在 Windows Chrome 29(而不是 28 或 30)上始终崩溃。一种简单的重现方法: 1. 在 Microsoft Windows 机器上获取(在 Linux/MAC OS X 上不会出现此问题) 2.转到:http://www.html5canvastutorials.com/labs/html5-canvas-kineticjs-drag-and-drop-stress-test-with-1000-shapes/ 3.点击刷新

我已将此问题发布到 Google 的 Chromium 错误跟踪器: https://code.google.com/p/chromium/issues/detail?id=280153

但我正在寻找是否有人找到或能想到解决此问题的方法。

最佳答案

我无法使其在 Chrome 29 或 Canary 31 (Windows) 上崩溃。

但是要解决这个问题:

尝试通过将繁重且耗时的任务分成几个部分来分段浏览器上的负载。每个部分都可以通过setTimeout调用。

这会给浏览器一些时间“呼吸”并执行事件队列中的其他事件,这会让浏览器高兴。

function heavyTask(callback) {

     var dataForTask;

     function segment1() {
         /* execute one part of heavy task - do something with dataForTask */

         setTimeout(segment2, 11);
     }

     function segment2() {
         /* execute one part of heavy task - do something with dataForTask */

         setTimeout(segment3, 11);
     }

     function segmentN() {
         /* execute one part of heavy task - do something with dataForTask */

         /// DONE!
         callback();
     }
}

理论上,您可以使用 0 值通过 setTimeout 进行延迟,但这并不总是有效(取决于浏览器)。值 11 接近最短事件循环时间,因此这应该适用于大多数浏览器。

关于javascript - 解决 Google Chrome 29 中 Canvas 崩溃的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18473165/

相关文章:

html - 无法使菜单正常运行

c# - websocket 成功握手,但没有正确发送接收消息(C# 服务器)

javascript - '/=' 运算符在 JavaScript 中是什么意思?

javascript - 如何在 MEVN 堆栈应用程序中从 MongoDB 返回当前用户信息

javascript - 什么是切换 javascript 计时器的更优雅的方式

python - css 在除两个页面之外的所有页面上工作

javascript - 使用 Chrome 开发者工具编辑 Javascript

html - CSS:如何更改 HTML 复选框中 "check"的颜色?

javascript - 使用 javascript 重定向到 chrome 扩展

javascript - 如何设置永久禁用/启用 Chrome 扩展样式表的选项?