使用JavaScript的Safari出现意外崩溃

使用JavaScript的Safari出现意外崩溃,javascript,html5-canvas,Javascript,Html5 Canvas,我正在HTML5画布上绘制一个可滚动的时间轴。 我已经开发了大部分功能,但我注意到Safari上出现了意外的崩溃(在chrome和firefox中没有崩溃),因此我删除了所有功能(只留下非常基本的时间线),以验证这不会改变这种情况 在这里,您可能会看到时间线的演示(简化为导致崩溃的基本构建块): 您可以单击并拖动滚动浏览日期,如果您取消注释某些代码行,您还将看到日期和月份数字 尝试从左向右滚动时间线,重复该操作,直到浏览器崩溃(可能需要强制退出) 这是我在崩溃前遇到的错误: TypeError:

我正在HTML5画布上绘制一个可滚动的时间轴。 我已经开发了大部分功能,但我注意到Safari上出现了意外的崩溃(在chrome和firefox中没有崩溃),因此我删除了所有功能(只留下非常基本的时间线),以验证这不会改变这种情况

在这里,您可能会看到时间线的演示(简化为导致崩溃的基本构建块):

您可以单击并拖动滚动浏览日期,如果您取消注释某些代码行,您还将看到日期和月份数字

尝试从左向右滚动时间线,重复该操作,直到浏览器崩溃(可能需要强制退出)

这是我在崩溃前遇到的错误:

TypeError: 'undefined' is not a function (evaluating 'g.ctx.lineTo(x, g.height / 1.4)')
它看起来总是像
g.ctx.lineTo
可以正常工作,但没有任何明显的原因,它会停止工作。您可以尝试记录
x
g.height/1.4
,但您会发现碰撞与这些值不一致

此外,如果取消注释打印年份和月份的行,浏览器报告的错误将不相同。这意味着显然,崩溃与渲染本身负责的功能无关

可能原因:需要的CPU太多

由于它的实现方式,时间线中屏幕之外的所有部分都会在循环中考虑(即使没有渲染){这只适用于时间线中从左侧进入屏幕之外的部分,而不是从右侧}。我无法避免它。因此,向右滚动的次数越多,完成循环的时间就越长(直到javascript停止)。这是绘制循环的超级简化伪代码版本:

start = 0;

function draw(){
    day = 0;

    for (x = start; x <= screen.width; x += 10, d += 1){

        // check if first day of the month
        if (d days from now is 1)
            draw long line at position x
        else
            draw short line at position x

    }
}

function mouseDragging(){

    // users dragging mouse cursor
    // start changes accordingly but always stays minor than 0

}
start=0;
函数绘图(){
日=0;

对于(x=start;x),我在Chrome(Linux上)中测试了它。这里没有崩溃。也滚动了很长时间。(CPU保持低位)谢谢你的报告!在Safari上再次测试,滚动10秒直到我看到加载的光标,我无法在浏览器中移动任何东西,除非我强制退出。在FireFox下没有崩溃-这越来越疯狂…我在Safari 6.0.2和OSX 10.7上测试,它没有崩溃(我滚动了很多次,并尝试取消对行的注释).你在使用哪个版本的Safari?OSX 10.6.8上的5.1.7-说真的,发生了什么事?!我正在准备一个视频。。。