2012-05-23 14 views
8

Dostaję z serwera niektóre dane, które wyświetlam używając GWT na kliencie.Gdzie należy sortować dane? Serwer lub klient?

GWT nie jest tu problemem, można zastąpić GWT wywołaniami ajaxowymi lub przenieść je do prawdziwej aplikacji zamiast aplikacji internetowej.

Gdzie należy wykonać akcję sortowania? Na serwerze? lub na kliencie używającym javascript, po otrzymaniu danych i przed ich wyświetleniem?

+0

Lubię to zrobić z ajaxem i przeanalizować odpowiedź json na kliencie. –

Odpowiedz

8

Każde rozwiązanie ma swoje wady i zalety:

  • Jeśli potrzebujesz paginacji, i nie chce, aby pobrać wszystkie dane do klienta, wówczas należy wykonać sortowanie na serwerze (w przeciwnym razie klient może tylko sortować wiersze, które aktualnie posiada, co prowadzi do błędnych wyników, jeśli ponownie sortujesz według innej kolumny)
  • Sortowanie na serwerze jest szybsze (jak w: możesz sortować więcej wierszy/sekundę), ale jeśli musisz obsłużyć 10000 klientów jednocześnie, może to łatwo zostać odwrócone.
  • Podczas sortowania na kliencie można ponownie sortować bez ponownego pobierania danych.
+0

, więc możemy podsumować: jeśli nie ma potrzeby sortowania za pomocą akcji użytkownika (tylko javascript), to lepiej (przez większość czasu, słyszałem twój argument o wydajności), aby sortować na serwerze ? –

+2

Tak, jeśli użytkownik nie może ponownie sortować, zazwyczaj wysyłam go na serwer. –

1

Jeśli korzystasz z bazy danych SQL (dowolnej z nich: MySQL, MSSQL itp.), Sortowanie powinno być wykonywane podczas pobierania danych z bazy danych, a nie z kodu, a zwłaszcza nie z javascript.

SELECT * 
FROM databasename 
ORDER BY id DESC 

To przyzwoity odnośnik. Krótki prosty i rzeczowy: http://www.w3schools.com/sql/sql_orderby.asp

Bazy danych SQL są wysoce zoptymalizowane do wykonywania tego rodzaju funkcji i zapewniają najlepszą wydajność i najmniej problemów. Wykonywanie tych działań za pomocą skryptu po stronie serwera jest zbyt intensywne, a wykonywanie tych czynności po stronie klienta za pomocą JavaScriptu jest po prostu złe z wielu powodów.

+0

yeah its def. Odpowiednia sytuacja serwera: –

0

Myślę, że robisz to na kliencie, ponieważ myślę, że jeśli jest 10000 wymagań, to twoja usługa nie potrzebuje co najmniej 10000 razy sortowania.

1

Idealnie, porządek należy zrobić na serwerze, ponieważ: -

  1. Najlepiej jest zakładać, że klient będzie o niskich zasobów. Na przykład niektórzy użytkownicy uruchamiają aplikację GWT z pulpitu, ale inna może uruchomić aplikację GWT z iPada/telefonu, który ma mniej procesora/pamięci RAM

  2. Istnieją standardowe sposoby sortowania po stronie serwera, dla przy użyciu klauzuli SQL ORDER BY, ale być może trzeba będzie zaimplementować własną procedurę/procedurę do sortowania po stronie klienta.

+2

Cóż, sortowanie np. 100 wierszy na kliencie jest bardzo szybkie, nawet na najwolniejszym kliencie. Wykorzystanie zasobów podczas wysyłania kolejnego żądania jest * x * razy większe. –

+0

Zgadzam się, wydaje się, że najlepiej jest przeanalizować/sprawdzić, ile rzędów i ile razy sortowanie może być potrzebne, a następnie zdecydować, gdzie sortowanie powinno zostać wykonane. – Anuroop

0

To zależy ... :)

  1. Ile dane mają być sortowane? Jak szybko? "szybko jak to możliwe" ok ... co najwolniej możesz zaakceptować? Czy klient może to znieść? A co z serwerem? Jakie inne obowiązki mają te elementy i czy to powoduje konflikt?
  2. Jak niezawodnie należy posortować dane? Na przykład, jeśli dane nie zostały posortowane, czy byłoby to w porządku?
  3. W jaki sposób obowiązki przypisane są elementom w Twojej architekturze? Jeśli o to chodzi, jakie są elementy? Czy masz bazę danych? A co z warstwą biznesową? Świat może być bardziej skomplikowany niż "klient kontra serwer".
  4. W jaki sposób będą wykorzystywane dane? Czy trzeba wykonać wiele rodzajów? Na przykład A-> Z i Z-> A?
  5. Czy koszt przesyłania danych między klientem a serwerem jest uzasadniony? Czy istnieją inne sposoby, aby uczynić to rozsądnym?

Pod względem architektonicznym, aby odpowiedzieć na to pytanie, należy wybrać pożądane właściwości w swoim systemie i ocenić kompromisy między różnymi alternatywami projektowymi. Nie wiedząc więcej o systemie, trudno jest oferować porady poza tym.

Powiązane problemy