1

我有一个有几个超时的脚本,使用 Raphael 绘制菜单并使用各种动态属性来完成此操作。您可以在 jsfiddle 上查看它:我的代码的 JSFiddle 版本

我的问题是 Firefox 偶尔会抛出“脚本运行缓慢等”。打开此页面时出现错误,可能在半分钟或更长时间后。通常我会将鼠标悬停在一个元素上,因此此时会打开一个子菜单。该错误通常不指向我的任何 js 文件,有时甚至不指向 Firefox 自己的文件。

我该如何调试,这可能吗?任何提示表示赞赏。(我现在使用 chronos 作为计时器,似乎没有帮助)

4

5 回答 5

2

分析您的代码

您可能想做Profiling,即对代码进行性能分析。正如其他人所指出的,Firebug 是 Firefox 中的一个很好的工具。更具体地说:在 Firebug 中,单击控制台选项卡中的配置文件。然后稍微调整一下导航,然后再次单击Profile以完成分析并获得结果。他们会告诉您调用哪些函数的频率和执行时间。这将帮助您识别代码中的性能瓶颈。

优化

快速浏览一下,我会说您可能仍然可以优化 DOM 查询。保存对昂贵查询结果的引用。并尽可能使用上下文,以提高查询效率。

此外,requestAnimationFrame()现在似乎是 javascript 动画的方式,而不是setTimeout().

于 2012-06-26T11:55:16.080 回答
1

大多数浏览器都有某种机制允许用户停止“长时间运行的脚本”。

脚本如何被视为“长时间运行”在浏览器之间略有不同,并且是在“执行上下文”中执行的指令数量或其经过的持续时间。

JavaScript 在浏览器中运行时主要是事件驱动的(除了在解析页面时立即执行 JavaScript)。浏览器会等到执行上下文完成后再做任何事情,并且在等待 JavaScript 执行时,可以阻止任何显示刷新等。

您基本上需要将您的指令分解为对事件的响应。如果你在任何地方都有一个巨大的循环(例如做一个动画),你真的需要使用一个间隔来打破执行周期。例如var interval = window.setInterval(refreshDisplay, 50);- 这将refreshDisplay每 50 毫秒调用一次函数(不带参数)(粗略的每秒 20 次调用)。

于 2012-06-26T11:55:25.177 回答
0

在此处输入图像描述

用于调试 javascript (Firefox 插件) 的firebug

在此处输入图像描述

用于F12显示萤火虫

这会帮助你!

使用 Firebug,您可以使用断点调试 javascript 并查看所有 ajax 调用!

在此处输入图像描述

于 2012-06-26T11:34:00.273 回答
0

尝试Firebug使用类似屏幕截图所示的东西——

截屏

下载firebug的链接——

http://getfirebug.com/downloads/

于 2012-06-26T11:37:06.540 回答
0

可能有一些操作运行缓慢,或者您的循环之一的复杂性很差。您可以使用二进制拆分:删除一半代码,查看时间是否有显着增加,并对运行最慢的一半代码执行相同操作。

于 2012-06-26T11:49:27.370 回答