我一直在使用JavaScript在http://projecteuler.net/上解決一些問題。我一直在使用一個簡單的html頁面並在腳本標記中運行我的代碼,以便我可以將結果記錄在瀏覽器的控制檯中。在試驗循環時,我有時會導致瀏覽器崩潰。如何測試潛在的「瀏覽器崩潰」JavaScript?
有沒有更好的環境讓我做這種發展?
我一直在使用JavaScript在http://projecteuler.net/上解決一些問題。我一直在使用一個簡單的html頁面並在腳本標記中運行我的代碼,以便我可以將結果記錄在瀏覽器的控制檯中。在試驗循環時,我有時會導致瀏覽器崩潰。如何測試潛在的「瀏覽器崩潰」JavaScript?
有沒有更好的環境讓我做這種發展?
沒有什麼可以做,以保持瀏覽器崩潰而不是導致瀏覽器崩潰的修復錯誤。
您至少可以通過使用像Chrome這樣的瀏覽器來減輕崩潰的影響,該瀏覽器通常會將一個選項卡中的崩潰與其他選項(所以您僅丟失自己的頁面)隔離開來,或者只是安裝專門用於測試的單獨瀏覽器。
在跟蹤可能已經記錄到日誌中的數據方面,您可能會使用像Firebug這樣的插件,該插件具有內置調試器,因此您可以在中途暫停腳本執行並檢查變量,大概在任何發生崩潰。
如果您在瀏覽器中運行昂貴的計算程序,您可能需要查看使用web workers。簡而言之,它們允許您在不會鎖定瀏覽器的其他線程中運行代碼。
如果您只是對運行JavaScript程序感興趣,爲什麼不使用類似node.js或Rhino的東西?這樣,如果遇到「麻煩」,您可以輕鬆地記錄輸出而不會丟失輸出。
我可以想到兩種現成的可能性:
1)使用具有斷點的調試器。 Firebug是相當不錯的。 Safari和Chrome也有一些內置的調試工具。
2)你可以將你的測試出使用Mozilla Rhino和Env-JS(見http://groups.google.com/group/envjs和http://github.com/thatcher/env-js)
所有現代瀏覽器(除了歌劇瀏覽器)應該打斷你的腳本,如果它運行超過5 10秒(Source)。
在Firefox中你甚至可以lower this threshold,如果10秒意味着太大的懲罰。另外請注意,甚至當你從Firebug控制檯運行代碼這個機制踢腿:
Stop Script on Firefox http://img819.imageshack.us/img819/9655/infloopsp.jpg
我覺得這個特性應該提供對這些糊塗的實驗中一個非常安全的環境:)
當我得到上面的截圖並按下「停止腳本」時,firefox會顯示爲「無響應」並凍結。引用你「所有的現代瀏覽器(Opera除外)都應該打斷你的腳本」 - 「應該」在這裏很重要 - 如果他們**做了**,那麼我就沒有理由發佈這個問題。也許這是由於我的環境(插件,os等)或我的實驗的intracacies(對於瀏覽器/控制檯比'while(true)'更不明顯)。 – 2010-06-12 09:58:57
@ 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
啊對,道歉,我誤解了你的答案。看看這些瀏覽器變量很有趣。我發現減少'dom.max_script_run_time'已經加速了我在FF測試中的測試。 – 2010-06-12 11:48:54
你想要一個神奇「崩潰我的瀏覽器,而不會崩潰我的瀏覽器」測試?那會有多酷?如果只有每個人都有這樣的測試,那麼瀏覽器可能不會崩潰。 – 2010-06-10 23:03:16
認爲你的第一步可能不是編寫infinit循環! – griegs 2010-06-10 23:09:00