2010-09-10 41 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; 

當然,你可以讓你想把它當作複雜的,使用隨機元素等

相關問題