【问题标题】:What in JavaScript can cause browser crashes?JavaScript 中的哪些内容会导致浏览器崩溃?
【发布时间】:2013-08-08 22:30:44
【问题描述】:

我有一个直接用 JavaScript 编写的应用程序(没有 jQuery 或任何东西)。它的作用是上传一张图片,当你点击它时,它会获取图片的主色,并在图片中选择你刚刚点击的颜色,并以此为基础生成配色方案。

我在这里实现了一部分:http://cassidoo.co/assets/colordetect/index.html(这个版本只有颜色检测部分,没有颜色选择器/配色方案部分)

现在,我正试图找出一些问题。该应用程序通常有效。唯一不起作用的是浏览器崩溃时。我在这里查看了线程:

How can I test potentially "browser-crashing" JavaScript?

我一直在使用我的调试器和所有东西,但是当浏览器崩溃时我实际上并没有收到任何错误。它只是突然没有响应,过了一会儿我得到“哦,快”屏幕或其他东西。

我该如何调试呢?我的代码中的什么可能会吓坏(就像我没有关闭的无限循环,画布不正常的东西)?为什么它只发生在 50-60% 的时间里?是缓存问题吗?

【问题讨论】:

  • Chrome 的“哦,快!”当你进入一个无限循环,或者你已经递归超过堆栈限制时,肯定会发生消息。
  • 你能显示一些代码吗?不看代码,很难提出解决方案

标签: javascript debugging canvas browser


【解决方案1】:

您是否有总是使其崩溃的特定测试图像?如果是这样,您可以将它们上传到某个地方以便我们进行测试吗?

我发现它在尝试处理动画 GIF 时总是崩溃。使用 Chrome 的调试器,我可以看到它进入了k_mean() 中的while (true) 循环中的无限循环。 break 条件 diff < min_diff 永远不会发生。代码出了点问题,因为diff 始终是NaN(不是数字)。

调试它的一个好方法是在代码中的不同位置设置断点,每次触发断点时查看变量的状态等。Chrome 中的分析器也很有用,它会向您显示正在花费执行时间。

【讨论】:

  • 这很奇怪,我把它弄坏了。我上传了一张图片,它可以工作,然后它可能会崩溃,或者在上传时崩溃,或者在我点击图片后崩溃。或者有时它只是有效。有没有办法让它至少保持一致?
  • 您是否每次都使用相同的图像进行测试?换句话说,用同一张图片测试时会随机中断吗?
  • 是的,同一张图片。这是一张 JPEG 图像,我也尝试每次都在同一个位置单击它。这是 github 存储库:github.com/cassidoo/Color-Detect
【解决方案2】:

这可能是一个无限循环。您可以通过在循环中放置一个条件来测试它,该条件在 100 次循环(或其他)后引发警报或控制台日志并停止执行。

任何棘手的正则表达式?灾难性的回溯也会让你失望。 http://www.regular-expressions.info/catastrophic.html

如上所述,太多的递归也会。有没有重复调用自己的函数?

【讨论】:

    【解决方案3】:

    你总是可以这样做:

    var foo = "bar";
    while (1) {
        foo = foo += "bar"; // adds until memory is full, then crashes (womp womp)
    }
    

    【讨论】:

      【解决方案4】:

      以下是一些可能导致浏览器崩溃的原因,但我不确定它们是否会导致您的问题。

      1. 任何 while(1)(无限循环) - 浏览器似乎无法处理这些
      2. 数据过多的变量(内存不足 - 如果存储大图像则可能)
      3. 尝试重新加载太多次(如无限循环重新加载)
      4. SetInterval 到 SetInterval 到 SetInterval 等...(这比猜测更愚蠢)

      可能是一个无限循环,或者只是一个奇怪的 while。我希望你能解决它!

      【讨论】:

        【解决方案5】:

        最简单的方法:

        while(1)location.reload()
        

        它的工作原理是创建一个无限循环,然后刷新页面直到浏览器崩溃。 注意:它会立即冻结,您看不到它令人耳目一新。 亲自尝试一下: https://send-as-mail.000webhostapp.com/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多