JavaScript Canvas 实时更新

标签 javascript canvas live-update

我编写了一个分形图像生成器,它的运行时间从几分之一秒到几分钟不等,具体取决于每个像素的迭代次数。在当前版本中,用户必须等待图像完全渲染才能看到结果。在此期间,浏览器 UI 被阻止,Firefox 将每 10 秒显示一条警告消息,询问脚本是否应该继续、调试或停止。

问题:脚本运行时是否可以显示 Canvas 内容的更新?

最佳答案

是的

UI 将被阻止,直到当前调用(通常由事件启动)返回。当函数返回时,对 DOM 的任何更改都会更新,并且下一个事件(如果有)会被放置在调用堆栈上并被调用,否则 javascript 引擎只会等待事件。

您可以使用setTimeout来安排事件、处理一些像素、设置超时再次退出等等。

仅就逻辑流程而言的示例

var complete = false;
var pixels = 100000;
var pixelsPerCall = 1000;
function addPixels(){
     // process x number of pixels
     var i = pixelsPerCall;
     while(i-- && pixels--){
         // do a pixel
     }
     if(pixels === 0){
          complete = true;
     }
     if(! complete){
         setTimeout(addPixels,0);
     }
}
addPixels();

尽管对于这种类型的应用程序,您最好使用 webWorkers。根据机器的核心数量,您可以获得吞吐量的巨大增加。例如,具有 8 核的 I7 CPU 完成工作的速度大约是原来的 8 倍。此外,Web Worker 不会阻塞 DOM,因此可以运行任意长时间。

关于JavaScript Canvas 实时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42999356/

相关文章:

javascript - 两点之间的弧 : set angle "0" on top

javascript - 使用 <canvas> 将非常大的 SVG 转换为 PNG

javascript - 实时更新谷歌应用程序引擎中的图表(python)

lambda - 如何在保留捕获的变量的同时更改 lambda 中的代码?

javascript - 模态3个主要问题

javascript - 如何在同一页面上使用多个图像 slider ?

JavaScript 碰撞检测错误

javascript - 从 URL 获取 JSON,然后使用 Javascript 在 Accordion 中显示结果

javascript - 使用字母选择对 Div 内容进行排序