2012-06-18 8 views
6

Pracuję nad jakimś interfejsem edytora/interfejsu wielosesyjnego online, który będzie wykonywać wiele (jak w tysiącach) żądań ajaxowych podczas jednego życia strony.Strona wymagająca intensywnego Ajax: użyj tego samego obiektu XMLHttpRequest lub utwórz nowy za każdym razem?

Jaki byłby najlepszy (kłopoty „najlepsze” pod względem stabilności, kompatybilności, unikając)

  1. Tworzenie jeden obiekt XMLHttpRequest i ponowne że dla każdego żądania HTTP

  2. Utwórz nowy XMLHttpRequest obiekt dla każdego żądania HTTP

  3. Zarządzaj dynamiczną "pulą" obiektów XMLHttpRequest, tworząc nową przy uruchamianiu żądania HTTP i nie udostępniaj żadnego istniejącego obiektu i oznaczaj poprzednio utworzone bject jako „dostępne”, gdy jego ostatnie żądanie zostało zakończone pomyślnie

Myślę 1 nie jest rozwiązaniem, bo niektóre wnioski mogą zawieść, I może być inicjowanie nowych żądań, podczas gdy poprzednia nie jest jeszcze zakończony, etc.

Co do 2, myślę, że jest to przeciek pamięci, lub może spowodować niepoczytalne zużycie pamięci/zasobów. Czy mogę jakoś zamknąć lub usunąć obiekt po zakończeniu jego żądania? (gdzie/jak?) Czy narzędzie do usuwania śmieci JS właściwie zajmuje się tym samym?

Nigdy wcześniej nie próbowałem 3, ale czuję się jak najlepszy z obu światów. Czy takie podejście jest niepotrzebne, czy nadal brakuje mi potencjalnych problemów? Dokładnie, kiedy mogę założyć, że żądanie do skończenia (tym samym obiekt jest dostępny dla nowego wniosku), czy jest to podczas odbierania statusu ReadyState 4 i http 200? (czy mogę mieć pewność, że po tym czasie nie będzie więcej aktualizacji ani wywołań zwrotnych?)

+0

Po prostu zastanawiam się, z jakiego serwera korzystasz i jaki masz dostęp do Internetu, ponieważ ten skrypt, jeśli masz rację z tysiącami zgłoszeń, jest wyjątkowo bogaty w zasoby, używając – gabeio

+0

Mam do tego dostęp do brutalnego serwera dedykowanego. Oczekuje się jednak, że tysiące zgłoszeń zostanie zrealizowanych w ciągu kilku godzin, a nie co sekundę. Bardziej jak kilka minut co minutę, ale może to robić przez wiele godzin. –

+0

ah well javascript zrobi się dobrze, jeśli potrzebujesz jeszcze szybciej tj. Żądanie na sekundę Proponuję użyć flasha lub apletu java – gabeio

Odpowiedz

3

Utwórz nowy, gdy go potrzebujesz. GC poradzi sobie ze starszymi, gdy nie będą już potrzebne.

Jednak w przypadku edytora współpracy warto rozważyć użycie WebSockets zamiast wysyłania żądań przez cały czas. Obciążenie małego żądania HTTP jest ogromne, podczas gdy prawie nie ma kosztów ogólnych związanych z połączeniem WebSocket.

+0

Dzięki, pójdę na łatwą drogę (po prostu tworząc nowy obiekt za każdym razem) na teraz i spójrz również do WebSockets. Dla pewności odnosisz się do nowego elementu webdita JavaScript javascript, prawda? –

+1

Tak, i ewentualnie biblioteka, taka jak 'socket.io', aby w razie potrzeby automatycznie obsługiwać awarię XHR. – ThiefMaster

+0

Ah, nigdy o tym nie słyszałem, dziękuję! Ale jedno, w przykładach kodu na http://socket.io/ wydaje się używać kodu JavaScript po stronie serwera? Kto lub co ma wykonać ten kod? –

Powiązane problemy