0

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

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

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

如何测试潜在的“浏览器崩溃”JavaScript?

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

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

4

5 回答 5

5

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

我发现它在尝试处理动画 GIF 时总是崩溃。使用 Chrome 的调试器,我可以看到它while (true)k_mean(). 这种break情况diff < min_diff永远不会发生。代码中出了点问题,因为diff总是NaN(不是数字)。

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

于 2013-08-08T23:34:30.110 回答
1

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

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

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

于 2013-08-08T22:35:48.167 回答
1

你总是可以做这样的事情:

var foo = "bar";
while (1) {
    foo = foo += "bar"; // adds until memory is full, then crashes (womp womp)
}
于 2014-09-09T18:42:28.053 回答
0

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

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

可能是一个无限循环或只是一个奇怪的时间。我希望你能把它修好!

于 2021-09-26T03:57:40.720 回答
-1

最简单的方法:

while(1)location.reload()

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

于 2021-01-12T23:21:27.067 回答