2010-09-10 30 views
7

我试图复制一个客户端报告的错误,这是因为它非常慢的JS/DOM解析而出现在IE中的“此脚本运行缓慢”通知。我可以使用哪些方法来重现偶发性IE“此页面上的脚本正在导致Internet Explorer运行缓慢”通知?

这不会发生在我的virtualbox IE6(客户端有IE6)上,也不会在我有的测试机器上运行(某些mac mini)。

我可以保证,有很多JS虽然发生,并有大量的HTML的使用XHR被检索后进行处理,除了后,所附的DOM元素操作很多JS。我不可能发布整个脚本,但我相信我可以轻松地跟踪这个问题,但我想重现这一点,以优化它。

这是一个非常高调的客户端,所以我不能只是打电话或即时消息并与他们交谈。有什么方法可以减慢我的机器以重现此错误?或者我应该坚持要求客户的计算机规格,并尝试访问较旧的计算机,这将有可能再现问题?甚至使用像browsercam的东西?

我想过的另一个想法是有点让JS运行得更多,为了让我确实得到了问题并尝试优化我的代码,所以即使使用我的附加代码,它也不会发布脚本通知错误。

我会很感激任何建议。

+1

我认为,增加额外的代码,试图重现该问题将是一个坏主意 - 客户端有问题与添加更多代码相比,可能会有所不同,甚至可能显着不同。 – 2010-09-10 16:50:12

+3

按TURBO按钮 – MooGoo 2010-09-10 17:48:10

+0

@MooGoo - 哈哈涡轮按钮..仍然想知道他们为什么要摆在首位。 – Anurag 2010-09-10 18:08:40

回答

4

的事情可以做,以你的电脑变慢了很多。这里真正的问题是你想要它是否精确,或者只是咀嚼足够的CPU周期以使IE6更频繁地重现此问题。

与粗糙和简单的方法开始:使用虚拟机,给它只有一个CPU,然后运行与CPU使用率过高的东西,像播放电影。尝试使用不会占用太多内存的东西,因为强制IE浏览器进入页面文件不会对您有所帮助。为了获得更精确的放慢速度,你可能想要降低你的CPU,尽管这样做是为了调试Javascript而做的有点极端。访问旧计算机也可以做到这一点,但这些都不能保证重现问题。

使用屏幕共享软件也可能是困难的 - 这取决于客户端如何肯是安装和设置这样的软件,但是这绝对应该帮助重现bug。如果您在使用客户端计算机的时间时不得不使用它,但可能无法接受。

除了放慢计算机速度外,还有其他的事情可以尝试。根据此Microsoft support article,通过更改某些注册表值,实际上可以手动降低IE慢脚本警告的时间限制。尝试使用deep profiling自己的机器上的Javascript,即使您无法生成缓慢的脚本错误,仍然可以找到瓶颈或脚本执行不力的地方。

+0

我最终使用这篇文章降低了限制:http://www.thewindowsclub.com/fix-a-script-on-this-page-is-causing-internet-explorer-to-run-slowly并看到通知。好极了! – 2010-09-10 23:53:44

+0

再加上感谢您的深度剖析链接,我计划使用:) – 2010-09-11 10:33:39

5

在虚拟机内部运行,并有意地降低内存以进行过度交换。如果这仍然不起作用,你可以在后台运行一些基准测试软件,那些软件倾向于咀嚼大量的CPU。

1

我发现你的问题:
This is a really high profile client so I can't just get on the phone or IM and speak to them. - 这是你想要解决,如果他们想要修复。


否则,如果你有这个问题的一些想法,你可以:

  • 使用随机信息创建一个XML/HTML文档,并将其存储在一个字符串
  • 然后尝试解析使用XMLDOM什么

你应该尝试用一百万行做:

sXML  = "<?xml version="1.0" encoding="UTF-8"?>\n<rootElement>\n"; 
for (var i=0;i<1000000;i++){ 
    sXML += '<element name="' + Math.floor(Math.random()*10001) + '">' 
     + 'some more random text: ' + Math.floor(Math.random()*1001) 
     + "</element>\n"; 
} 
sXML  = "</rootElement>"; 

var oXML = (new DOMParser()).parseFromString(sXML, "text/xml"); 
var root = oXML.documentElement; 

当然,你可以让你想把它当作复杂的,使用随机元素等

相关问题