2012-04-27 12 views
8

Kiedy używam funkcji ajax JQuery, a odpowiedź jest dość duża ~ 1mb, ui zostaje zamrożone tuż przed wywołaniem funkcji success. Doświadczyłem tego z funkcją JSON.parse i analizowaniem dużej ilości danych. Uważam, że ta funkcja jest używana po powrocie żądania sformatowania zawartości do JSON. Oto kod, którego używam.JQuery ajax zawiesza się gdy odpowiedź jest bardzo duża

$.ajax({ 
     url: "/sessions/" + this.get("session_id") + "/get_sample_data", 
     data: params, 
     dataType: 'json', 
     type: "GET", 
     success: function (response) { 
      success(response); 
     } 
    }); 

Czy mimo to zastąpić kod odpowiedzi, więc mogę rozłożyć na części i analizowania nadzieją zminimalizować blokowanie w interfejsie? lub czy istnieje inny sposób, aby to naprawić. Używam chromowanego i chromowanego kanarka i otrzymuję taki sam wynik w obu.

góry dzięki

+0

Skąd kłamstwo problem? w jQuery parsowanie JSON? lub Twój kod parsujący JSON? – Joseph

+0

1 MB JSON? 1 MB zwykłego tekstu ??? Co próbujesz wyświetlić na jednej stronie? Może powinieneś przemyśleć swoje zapytanie! – Amberlamps

+1

@Amberlamps może to, co miałeś na myśli, to "przemyśleć"? Zwykle widzę 1 MB lub więcej podczas ładowania map gry JSON lub mapowania sprite na podstawie base64. To rozsądne, ale tak, czasami są przesadne. – Joseph

Odpowiedz

8

przypuszczenie, że parsowania olbrzymi odpowiedź JSON jest to, co powoduje opóźnienia. W takim przypadku dostępne są następujące opcje:

  1. Podziel odpowiedź serwera na wiele żądań.
  2. Przerwij parsowanie na wiele części.
  3. Wyślij odpowiedź do pracownika serwisu WWW i przeanalizuj go w przeglądarce internetowej (nie działa w starszych przeglądarkach).

zerwać parsowania na wiele kawałków, trzeba by zmienić wywołanie ajax jQuery po prostu wrócić tekst surowy i trzeba by utworzyć własną parsera JSON, który może wykonywać pracę w kawałkach na setTimeout() aby interfejs mógł pozostać przy życiu podczas analizy. Byłaby to wymagana kwota do wykonania. Zakładam, że zaczynasz od istniejącego parsera JSON, a potem będziesz musiał go zmodyfikować, aby zapisać jego stan w taki sposób, aby mógł działać w porcjach.

Zmiana interfejsu na serwerze w celu pobrania fragmentów JSON jest prawdopodobnie łatwiejszym sposobem rozwiązania problemu, jeśli można odpowiednio zmodyfikować interfejs serwera.

Dla niektórych alternatywnych pomysłów na przetwarzanie dużych ilości danych w kawałki, widać Best way to iterate over an array without blocking the UI

Powiązane problemy