1

有谁知道防止 HTML5 画布在 Google Chrome 29 中崩溃的解决方法。

在 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

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

4

1 回答 1

0

我无法让它与 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 接近最小事件循环时间,因此这应该适用于大多数浏览器。

于 2013-08-27T18:58:29.407 回答