我正在进行的项目涉及一个“计划”屏幕,它完全由backbone.js制作(应用程序的其他页面不是)。
我的问题是,有时候,Chrome冻结并且网络视图停止响应任何互动。有时,我可以设法退出chrome本身,但通常控件也不会回答。
我非常确信这与js代码有关。在我看来,当脚本花费太多时间或无限循环时,Chrome可以检测到这一点并中断脚本。但是,由于情况并非如此,我认为有太多的js对象留在内存中。
无论原因是什么,我想知道哪些chrome dev工具可以帮助我。虽然我不是js的初学者,旁边设置断点并调用console.log
,但我不知道如何调试JS应用程序。如果dev工具更适合我,我不反对使用其他浏览器。
非常感谢你的时间!
FTR:这是一款rails 3.2.8 app,使用mongodb,& Backbone.js 0.9.2。 js代码用coffeescript编写。这个问题发生在我的macbook air 2012运行的山狮以及在Windows 7上运行的客户端机器上。问题至少出现在chrome 22& 23。
答案 0 :(得分:1)
使用Javascript CPU分析器,我能够找到似乎负责冻结的功能组。
我仍然愿意接受有关调试javascript代码的任何建议/资源。
答案 1 :(得分:0)
在循环中创建一个console.log,并检查它是否在所有chrome版本上冻结了相同的点。有一个限制,请参见Browser Javascript Stack size limit。
也许添加一些代码?因为可能存在一些内存泄漏,尤其是事件处理程序!
答案 2 :(得分:0)
我要做的是使用console.log来解决问题的漫长而疲惫的方法。 - - 在这种情况下。 在你的情况下,顺便提一下THX(用CPU分析器找到罪犯,下次我会尝试),我猜这些罪犯可能是某些功能“回调”自己......可能是通过某种形式事件处理/鼓泡/回调组合。
通常会发生的事情是它只是无法识别无限循环,因为回调堆栈有点“破碎”。因此,它永远不会抛出浏览器错误。
如果你有运气,它不会杀死浏览器足够快以杀死控制台。我确实有这个,控制台被杀死(保持沉默),coffeescript文件甚至没有加载到调试器中(我使用JS-MVC中的JIT-coffee-to-js-translator)...页面冻结或没做任何事......
所以,如果你确实很幸运并且调试器吐出你的console.logs,你就可以猜出你不想要的循环隐藏在哪里。只需查看输出语句的重复顺序即可。
答案 3 :(得分:0)
当然你知道你可以设置断点吗?甚至是条件断点
我目前正在努力解决一个类似的声音循环 - 我想在紧急情况下你的代码中的一些alert()
调用至少会减慢循环
或者可能是一些等待电话(bad idea)
我的循环运行得如此之快,我松开了我的控制台日志!