Czy istnieje sposób na wyczyszczenie obiektu responseText obiektu XHR bez zniszczenia obiektu XHR?Kometa, użycie responseText i pamięci
muszę mieć otwarte stałe połączenie z serwerem WWW karmić dane dożyć przeglądarce. Problem polega na tym, że pojawia się stosunkowo duża ilość danych (kilkaset K na sekundę stale), więc użycie pamięci jest dużym problemem, ponieważ to połączenie musi pozostać otwarte przez co najmniej kilka minut. responseText bardzo szybko staje się bardzo duży, mimo że JSON, który wysyłam, został zmiażdżony tak mały, jak to tylko możliwe.
Ze względu na sposób działania aplikacji po stronie serwera, jeśli używam krótkiego sondowania w stylu AJAX i po prostu niszczę obiekt XHR, gdy go skończę, brakuje mi istotnych ilości ważnych danych nawet w ciągu kilku milisekund. trwa przetwarzanie odpowiedzi, tworzenie nowego XHR i wysyłanie go. Nie mam możliwości korzystania z nakładających się żądań, ponieważ serwer internetowy akceptuje tylko jedno połączenie naraz. (Nie pytaj.) Więc Comet jest dokładnie tym modelem, którego potrzebuję.
Co chcę zrobić, to przeanalizować każdą porcję JSON, gdy wraca z serwera, a następnie wyczyścić tekst responseText, aby móc nadal używać tego samego połączenia. Jednak responseText jest tylko do odczytu. Nie można go bezpośrednio opróżnić za pomocą jakiejkolwiek znalezionej metody.
Czy brakuje tu części obrazu? Czy ktoś wie jakieś sztuczki, które można użyć do zwolnienia responseText, gdy skończysz go czytając? Czy istnieje inne miejsce, w którym można uzyskać odpowiedzi serwera?
Nie uwzględniam kodu, ponieważ jest to właściwie pytanie niezastrzeżone przez kod. Procedury JavaScript, które odradzają XHR i obsługują zwrócone dane, są bardzo, bardzo proste.
Dzięki. Rozumiem model. Miałem tylko nadzieję, że istnieje sposób na utrzymanie połączenia bez zmuszania go do przechowywania wszystkiego, co kiedykolwiek zostało odebrane w tym połączeniu w ogromnym buforze. Long-polling to i tak hackowanie, więc myślę, że to bardzo dużo, aby chcieć, żeby działało dokładnie tak, jak tego potrzebuję :) – glomad
@ithcy: to właściwie wydaje się rozsądną prośbą. Nigdy nie myślałem o tym zbyt długo, dopóki nie zapytałeś. 'Xhr.flushResponseBuffer()' lub coś może być wartościowe dla długotrwałych połączeń i może zaoszczędzić na konieczności zapisywania odnośnika przekierowanego numeru linii przez cały czas. –