Chciałbym być bardziej konkretny tutaj, ale niestety może to być trudne. Zasadniczo mam nadzieję, że jest to jakiś "dobrze" znany czas lub problem z konfiguracją.Witryna z uruchomionym JavaScript setInterval rozpoczyna się niepowodzeniem po ~ 1day
Mamy stronę internetową z przeglądem strony internetowej (JS/html - ASP.net) na ekranie w fabryce. Ten ekran nie ma klawiatury, więc powinien odświeżać stronę na zawsze - lata być może (chociaż 1 tydzień może być w porządku). (Jest używany przez pracowników fabryki do wyświetlania przychodzących transportów itp.)
Wszystko działa idealnie; strona stale się aktualizuje i otrzymuje nowe poprawne dane. Następnie, czasami rano na ekranie "Przegląd" nie ma danych, a pracownicy muszą ręcznie odświeżyć witrynę za pomocą prostego przycisku odświeżania lub F5 - który naprawia wszystko.
Próbowałem kilka rzeczy, próbując odtworzyć błąd się tym:
- cięcia połączenia internetowego i wiele innych sposobów, zarówno Timeout (wartości graniczne, zatrzymywanie usług itd.).
- Ustawienie czasu odświeżania setInterval na 100ms i pozwolenie stronie na uruchomienie 3-5 minut. (normalny czas to 1 minuta)
- setInterval POWINIEN działać na zawsze zgodnie z wyszukiwaniem w Internecie, które już zrobiłem.
- Sprawdź, czy "częstotliwość JavaScript" nie została wyłączona w ustawieniach oszczędzania energii.
Bez względu na wszystko; Witryna powraca do prawidłowego działania BEZ odświeżania, zaraz po ponownym podłączeniu kabla internetowego lub czegoś podobnego - nie mogę odtworzyć błędu.
Strona jest zależna od zaplecza usługi WCF i integracji projektu, ale ponieważ pracownicy naprawiają to za pomocą prostego odświeżania, zakładam, że to się nie zawiesiło.
EDYCJA: Przeglądarka, którą próbowałem odtworzyć błąd w IE/win7. Zapytam jutro o fabrykę, ale zgaduję, że IE/win? również.
Czy setInterval w rzeczywistości jest naprawdę nieskończony, czy jest tu coś jeszcze nie tak?
Cała pomoc doceniona.
AKTUALIZACJA: Przyszedłem dziś rano po opuszczeniu strony internetowej uruchomionej w trybie debugowania z punktem przerwania w klauzuli catch kodu aktualizującego witrynę. Było 2 min. Błąd limitu czasu (zajęty porządki serwer podczas prawdopodobnego nocy), a następnie zawsze po tym błąd null odniesienia w tej linii:
var showHistory = (bool)Session.Contents["ShowHistory"];
Naprawiłem go z odświeżaniem jak pracowników. Teraz myślę, że może to być limit czasu sesji, mimo że nadal pingujemy serwer .. Oczywiście mój limit czasu sesji mógł zostać spowodowany przez punkt przerwania, powodując zawieszenie go na zawsze przy pierwszym przekroczeniu czasu - mimo to zachowanie jest takie samo jak w fabryce. Dopilnuję, aby poinformować was o ostatecznym rozwiązaniu później.
UPDATE 2: Testowanie trwa.
AKTUALIZACJA 3: Fabryka jest IE 9, ich maszyna testowa to IE 7, a moja maszyna to IE 9. Błąd był widoczny na IE7, ale NIE mój IE9 po weekendzie. Próbowaliśmy wyłączyć pamięć podręczną ajax podczas naszego krytycznego kodu data_binding, ale nic nie zrobiliśmy. Przetestowałem pod kątem wycieków pamięci i udało mi się utworzyć przyzwoity wyciek, jeśli odświeżam 100 razy na minutę. Nie sądzę, że to był problem, ale odświeżenie wyczyściło pamięć.
Spróbujemy teraz odświeżania rzeczy.
+1, ponieważ mam podobny system i chciałbym wiedzieć, czy to rzeczywiście jest problem. – chead23
Jakiej przeglądarki/os/hardware ... może to być cały zestaw różnych rzeczy, aby być szczerym. – Dabloons
Nie ma nieodłącznego powodu, że powinien to być problem, jeśli odświeżasz całą stronę. Jeśli kod używa ajax do załadowania nowej treści, możliwe jest, że wyciek pamięci spowoduje, że skrypt się nie powiedzie. – Pointy