我有一个应用程序,是用纯JavaScript编写的(没有jQuery或任何东西)。它所做的是上传一张图像,当你点击它时,它会获取图像的主色,并选择你刚刚在图像中点击的颜色,并基于此生成一个配色方案。
我在这里实现了其中的一部分:https://github.com/cassidoo/color-detect(此版本只有颜色检测部分,没有颜色选择器/配色方案部分)
现在,我想弄清楚一些问题。应用程序通常工作。唯一不起作用的时候是浏览器崩溃的时候。我看了一下这里的线程:
How can I test potentially "browser-crashing" JavaScript?
我一直在使用我的调试器和所有东西,但当浏览器崩溃时,我实际上没有得到任何错误。它只是突然没有React,过了一会儿,我得到了“哦,捕捉”屏幕或什么。
我如何调试它?我的代码中有什么可能会出错(比如它是一个我没有关闭的无限循环,画布上的一些不正常的东西)?为什么只有50-60%的时间发生?这是缓存问题吗?
6条答案
按热度按时间4zcjmb1e1#
你有特别的测试图像,总是使它崩溃?如果是这样,你能把它们上传到某个地方,让我们用它们来测试吗?
我发现它总是崩溃时,试图处理一个动画GIF。使用Chrome的调试器,我可以看到它在
k_mean()
中的while (true)
循环中进入了一个无限循环。break
条件diff < min_diff
永远不会发生。代码中出现了错误,因为diff
始终是NaN
(不是数字)。调试它的一个好方法是在代码中的各个地方设置断点,每次触发断点时查看变量的状态等。Chrome中的分析器也很有用,可以显示执行时间花在哪里。
7xllpg7q2#
这可能是一个无限循环。您可以通过在循环中放置一个条件来测试这一点,该条件在100个循环(或其他循环)后抛出警报或控制台日志并停止执行。
有什么复杂的正则表达式吗?灾难性的回溯也会让你崩溃。http://www.regular-expressions.info/catastrophic.html
如上所述,太多的递归也会。是否有函数反复调用自己?
niknxzdl3#
你总是可以这样做:
rnmwe5a24#
以下是一些可能导致浏览器崩溃的因素,尽管我不确定它们是否导致了您的问题。
1.数据过多的变量(内存不足-如果存储大图像,则可能是这样)
1.尝试重新加载太多次(如realloads的无限循环)
可能是一个无限循环,或者只是一段奇怪的时间。希望你能修好它!
3wabscal5#
这可能会使浏览器立即崩溃。
p3rjfoxz6#
最简单的方法:
它的工作原理是创建一个无限循环,然后刷新页面,直到浏览器崩溃。注意:它会立即冻结,你看不到它的刷新。你自己试试看:https://send-as-mail.000webhostapp.com/