2010-06-10 11 views
8

Mam problemy z niektórymi problemami w wersji http://projecteuler.net/ z JavaScript. Używam prostej strony html i uruchamiam mój kod w tagach skryptów, dzięki czemu mogę logować wyniki w konsoli przeglądarek. Eksperymentowanie z pętlami czasami powoduje awarię przeglądarki.Jak mogę przetestować potencjalnie "zawieszający przeglądarkę" JavaScript?

Czy jest dla mnie lepsze środowisko do tego typu rozwoju?

+4

chcesz magiczne "test awarii mojej przeglądarki bez awarii przeglądarki"? Jak fajnie by to było? Gdyby tylko każdy miał taki test, być może przeglądarki nie zawieszają się. –

+0

Uważam, że pierwszym krokiem może być nie pisanie pętli nieskończonych! – griegs

Odpowiedz

5
  1. przeglądarki, która posiada osobne procesy dla każdej karcie
  2. debugger breakpoints
  3. if że przerywa pętlę jeśli jakiś próg czasu jest trafiony
0

Nic nie można zrobić, aby zachować przeglądarka z powodu awarii innych niż poprawki błędów, które powodują awarię przeglądarki.

Możesz przynajmniej złagodzić wpływ awarii, używając przeglądarki takiej jak Chrome, która generalnie rozdziela awarie na jednej karcie od innych (możesz stracić tylko własną stronę) lub po prostu instalujesz oddzielną przeglądarkę specjalnie do testowania.

Jeśli chodzi o śledzenie danych, które mogły trafić do dziennika, można użyć wtyczki takiej jak Firebug z wbudowanym debuggerem, aby można było wstrzymać wykonywanie skryptu i sprawdzić zmienne, prawdopodobnie przed wystąpi awaria.

1

Jeśli korzystasz z kosztownych obliczeniowo programów w przeglądarce, możesz skorzystać z usługi web workers. Krótko mówiąc, pozwalają na uruchomienie kodu w innym wątku, który nie blokuje przeglądarki.

1

Jeśli interesuje Cię tylko używanie programów javascript jako takich, dlaczego nie używasz czegoś takiego jak node.js lub nawet Rhino? W ten sposób możesz łatwo rejestrować dane wyjściowe bez ich utraty, jeśli wpadną w "kłopoty".

1

wszystkich nowoczesnych przeglądarkach (z wyjątkiem Opery) należy przerwać skrypt jeśli przebiega przez więcej niż 5- 10 sekund (Source).

W przeglądarce Firefox można nawet lower this threshold, jeśli 10 sekund oznacza zbyt dużą karę. Należy również pamiętać, że ten mechanizm w rzutach nawet po uruchomieniu kodu z konsoli Firebug:

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

myślę funkcja ta sama powinna zapewnić całkiem bezpieczne środowisko dla tych Loopy eksperymentów :)

+0

Kiedy otrzymam zrzut ekranu powyżej i naciskam "stop script", firefox może wyświetlać jako "nie odpowiada" i zawiesza się.Cytując: "Wszystkie nowoczesne przeglądarki (z wyjątkiem Opery) powinny przerwać twój skrypt" - "powinno" jest tutaj ważne - jeśli ** to **, to nie byłoby powodu, dla któregobym umieszczał to pytanie. Być może jest to spowodowane moim środowiskiem (dodatki, os itp.) Lub intracacies moich eksperymentów (mniej oczywiste dla przeglądarki/konsoli niż 'while (true)'). –

+0

@ yaya3: Tak, dlatego użyłem "powinienem", jak się domyślałem, że tak się nie dzieje. Domyślnie mechanizm powinien być uruchamiany za każdym razem, gdy skrypt działa przez 10 sekund. Nie ma potrzeby posiadania nieskończonej pętli. JavaScript w przeglądarkach nigdy nie był przeznaczony do długotrwałego przetwarzania, ponieważ działa w jednym wątku UI i całkowicie blokuje aktualizacje UI ... Możesz chcieć sprawdzić ['about: config'] (http: //kb.mozillazine. org/Dom.max_script_run_time), aby sprawdzić, czy jest wyłączona w Firefoksie. W przeciwnym razie możesz użyć innej przeglądarki do eksperymentów Project Euler. –

+0

Ach racja, przepraszam, źle zrozumiałem twoją odpowiedź. To interesujące spojrzenie na te zmienne przeglądarki. Zauważyłem, że zmniejszenie "dom.max_script_run_time" przyspieszyło moje testowanie w FF - okrzyki. –

Powiązane problemy