2010-06-10 61 views
8

我一直在使用JavaScript在http://projecteuler.net/上解決一些問題。我一直在使用一個簡單的html頁面並在腳本標記中運行我的代碼,以便我可以將結果記錄在瀏覽器的控制檯中。在試驗循環時,我有時會導致瀏覽器崩潰。如何測試潛在的「瀏覽器崩潰」JavaScript?

有沒有更好的環境讓我做這種發展?

+4

你想要一個神奇「崩潰我的瀏覽器,而不會崩潰我的瀏覽器」測試?那會有多酷?如果只有每個人都有這樣的測試,那麼瀏覽器可能不會崩潰。 – 2010-06-10 23:03:16

+0

認爲你的第一步可能不是編寫infinit循環! – griegs 2010-06-10 23:09:00

回答

5
  1. 具有對每個選項卡單獨的進程
  2. 調試斷點瀏覽器
  3. 的,如果打破,如果對於某個時間閾值被打環
0

沒有什麼可以做,以保持瀏覽器崩潰而不是導致瀏覽器崩潰的修復錯誤。

您至少可以通過使用像Chrome這樣的瀏覽器來減輕崩潰的影響,該瀏覽器通常會將一個選項卡中的崩潰與其他選項(所以您僅丟失自己的頁面)隔離開來,或者只是安裝專門用於測試的單獨瀏覽器。

在跟蹤可能已經記錄到日誌中的數據方面,您可能會使用像Firebug這樣的插件,該插件具有內置調試器,因此您可以在中途暫停腳本執行並檢查變量,大概在任何發生崩潰。

1

如果您在瀏覽器中運行昂貴的計算程序,您可能需要查看使用web workers。簡而言之,它們允許您在不會鎖定瀏覽器的其他線程中運行代碼。

1

如果您只是對運行JavaScript程序感興趣,爲什麼不使用類似node.js或Rhino的東西?這樣,如果遇到「麻煩」,您可以輕鬆地記錄輸出而不會丟失輸出。

1

所有現代瀏覽器(除了歌劇瀏覽器)應該打斷你的腳本,如果它運行超過5 10秒(Source)。

在Firefox中你甚至可以lower this threshold,如果10秒意味着太大的懲罰。另外請注意,甚至當你從Firebug控制檯運行代碼這個機制踢腿:

Stop Script on Firefox http://img819.imageshack.us/img819/9655/infloopsp.jpg

我覺得這個特性應該提供對這些糊塗的實驗中一個非常安全的環境:)

+0

當我得到上面的截圖並按下「停止腳本」時,firefox會顯示爲「無響應」並凍結。引用你「所有的現代瀏覽器(Opera除外)都應該打斷你的腳本」 - 「應該」在這裏很重要 - 如果他們**做了**,那麼我就沒有理由發佈這個問題。也許這是由於我的環境(插件,os等)或我的實驗的intracacies(對於瀏覽器/控制檯比'while(true)'更不明顯)。 – 2010-06-12 09:58:57

+0

@ yaya3:是的,這就是爲什麼我使用「應該」,因爲我猜這不是爲你發生的。默認情況下,只要腳本運行10秒鐘,機制就會啓動。沒有必要有一個無限循環。瀏覽器內部的JavaScript從來沒有用於長時間運行的處理,因爲它運行在單個UI線程中,並完全阻止UI更新...您可能需要檢查['about:config'](http://kb.mozillazine。 org/Dom.max_script_run_time)來查看你的Firefox是否被禁用。否則,您可能需要使用其他瀏覽器進行Project Euler實驗。 – 2010-06-12 10:41:14

+0

啊對,道歉,我誤解了你的答案。看看這些瀏覽器變量很有趣。我發現減少'dom.max_script_run_time'已經加速了我在FF測試中的測試。 – 2010-06-12 11:48:54