Czy użycie AJAX znacznie poprawiłoby wydajność serwera?

10

Wyraźnie AJAX poprawia interfejs użytkownika, ale czy to również zmniejsza obciążenie serwera? Można by pomyśleć, że tak, ponieważ za każdym razem nie trzeba podawać całej strony, ale być może istnieją inne zmienne, których nie rozważam.

koder
źródło

Odpowiedzi:

14

To zależy od tego, co robisz i jak to robisz.

  • Jeśli zamieniasz pełne ładowanie strony na żądania AJAX (tzn. Wykonujesz wywołania AJAX tylko wtedy, gdy użytkownik kliknie to, co byłoby pełne ładowanie strony), AJAX zmniejszy obciążenie serwera, ponieważ (prawdopodobnie) robisz mniej przetwarzania i zwracasz mniej dane.

  • Z drugiej strony, jeśli dodajesz automatyczną aktualizację typu AJAX, która sonduje serwer co kilka sekund, może to zwiększyć obciążenie w zależności od użytkownika (może nie zwiększyć obciążenia serwera, jeśli użytkownik nadal naciska F5, aby odświeżyć ręcznie, ale większość ludzi na ogół nie robi tego przez wiele godzin)

  • Inną optymalizacją AJAX jest ładowanie większej ilości danych podczas przewijania. W takim przypadku, jeśli użytkownik nie przewinie do końca, marnuje się przetwarzanie.

Oczywiście w rzeczywistości implementacja może wypaczać wyniki w obu kierunkach, są to typowe wyniki przy założeniu dość dobrych implementacji.

Davy8
źródło
Prawdziwe pytanie brzmi: co zmienia się, kiedy przechodzisz na sposób AJAX? Czy jesteś w stanie wyeliminować marnowaną wcześniej pracę, przenosząc się do AJAX lub po prostu dzieląc ją na mniejsze części? (i dodając koszty ogólne w procesie)
SplinterReality
3

Oczywiście służy to zmniejszeniu obciążenia serwera. Spójrz na tę prezentację @ jsconf'09 - jak Facebook użył do tego ajax.

Ajax jest asynchroniczny. komunikacja z serwerem - i możesz z niej korzystać na wiele sposobów. Ludzie używają go do ładowania prostego JSON-a do sieci w czasie rzeczywistym i wszystkiego pomiędzy.

Pamiętaj - prawdziwym wyzwaniem jest równowaga między klientem a serwerem. Staraj się, aby każda ze stron wykonywała swoje zadania w taki sposób, aby system był zoptymalizowany, a otrzymasz oczywiste korzyści z dostrzegalnego czasu reakcji i prawdziwej prędkości.

treecoder
źródło
3

Są inne czynniki, których nie bierzesz pod uwagę - w większości przypadków AJAX zwiększy obciążenie serwera. W typowym scenariuszu innym niż ajax użytkownik ładuje jedną dużą stronę co kilka sekund lub kilku minut. Tak, ta pojedyncza strona to trochę więcej pracy dla serwera, ale ma dużo czasu między żądaniami do odzyskania i obsługi innych żądań. W scenariuszu AJAXified ładowanie pojedynczej strony jest teraz dziesiątkami małych trafień, ciągle wbijających serwer i czekających na odpowiedzi.

To trochę jak śmierć z 1000 cięć - żadna z tych próśb nie jest tak duża sama w sobie, ale całkowita waga jest zabójcza. Zwłaszcza, gdy zaczniesz rozważać, że te małe żądania są prawie tak samo drogie, aby służyć jako żądanie na całej stronie. W obu przypadkach prawdopodobnie biegniesz przez cały potok aplikacji WWW, trafiasz do bazy danych i czekasz na odpowiedź, siedząc na cennym połączeniu HTTP.

Oto przykład tego, jak ajax może naprawdę szybko stać się brzydki na serwerze. Weźmy typowy „pulpit wykonawczy”, który ma 4 miejsca na widżety. Powiedzmy, że CEO lubi pełny raport sprzedaży po prawej stronie, listę 10 najlepiej zarabiających po środku i raport cen akcji firmy po prawej stronie. Powiedzmy, że zrobimy to za pośrednictwem prostych, zdalnych żądań ajax. Bez uwzględnienia arkuszy stylów, obrazów i innych zasobów, twoja strona wymaga teraz 4 połączeń w obie strony HTTP (strona główna, każdy z raportów deski rozdzielczej) przeciwko serwerowi. Każdy z nich wymaga pełnego stosu internetowego do wykonania - będziesz uderzać w bazy danych i renderować HTML przy użyciu swojego frameworka, prawda? Teraz pomnóż jednego CEO przez 2000 zdalnych użytkowników, z których niektórzy mają nieregularne połączenia.

I odwrotnie, możesz mieć pojedynczą stronę po stronie serwera, która wykonuje i zwraca szkielet HTML, a także dane (zawarte w JSON na stronie) do renderowania raportów. Pojedyncze, większe połączenie, ale w sumie mniej bijące na serwerze internetowym, ponieważ nie obsługujesz 4 żądań i rozpędzasz 4 potoki itp.

Wyatt Barnett
źródło
1
Czy możesz podać przykład małej prośby, która byłaby potrzebna w AJAX, której inaczej nie byłbyś potrzebny?
jhocking
1
Jasne - czy kiedykolwiek zauważyłeś, jak na tej stronie można powiedzieć, czy ktoś już odpowiedział na pytanie? Dokonuje się tego za pośrednictwem małego żądania ajax. . .
Wyatt Barnett
@WyattBarnett AJAX niekoniecznie oznacza odpytywanie. Możesz po prostu zastąpić pełne ładowanie strony częściowym ładowaniem strony. W wielu przypadkach może to zwiększyć obciążenie serwera, ale nie sądzę, że jest to prawdą w „większości przypadków”.
Davy8
hm, cóż, ten przykład wydaje mi się bardziej czymś, co możesz zrobić w AJAX, niż inaczej, niż czymś, co wymaga więcej żądań serwera niż inaczej. Podejrzewam, że OP był niejasny, czy miał na myśli „większą wydajność przy robieniu dokładnie tego samego”, czy też „większą wydajność przy pełnym wykorzystaniu AJAX”
jhocking 27.09.11
1
Zauważ, że odpytywanie / długie odpytywanie jest jedynie podzbiorem AJAX (jak wspomniano tutaj), zwanym także „kometą” . Websockets, które umożliwiają „prawdziwe” wypychanie bez odpytywania lub po stronie serwera (inicjowane przez serwer) AJAX znacznie zmniejszy marnotrawstwo zasobów wymagane dla tego rodzaju funkcji.
Alan H.
2

Jeśli używasz AJAX do zastąpienia pracy, którą w innym przypadku wykonałby serwer, to tak, poprawi to wydajność serwera. Być może jednak zaprojektowałeś rzeczy tak, aby serwer nadal działał tak samo, a teraz wszystko, co dzieje się z AJAX, jest nadrzędne w stosunku do tego, co serwer już robił.

W większości dotyczy to interfejsu użytkownika, ponieważ nie powinieneś robić nic innego po stronie klienta. Zasadniczo wszystko, co serwer robił w celu obsługi interfejsu użytkownika (np. Przeładowanie strony z innym układem w odpowiedzi na dane wprowadzone przez użytkownika), robi za pomocą JavaScript.

jhocking
źródło
0

Jeśli renderowanie HTML stanowi ogromną część profilu wydajności serwera aplikacji, wówczas przeniesienie renderowania HTML do klienta może przynieść poprawę wydajności na serwerze aplikacji.

Jeśli jednak renderowanie HTML stanowi niewielką część profilu wydajności serwera aplikacji, więcej żądań zwykle oznacza więcej podróży przez stos, więcej zapytań, więcej wszystkiego na serwerze aplikacji, utratę wydajności.

Oczywiście jedynym sposobem na poznanie w konkretnym przypadku jest wypróbowanie go.

yfeldblum
źródło
1
Mam problem z myśleniem o przykładach, w których użycie AJAX spowodowałoby więcej żądań niż robienie tego samego bez AJAX. Czy możesz podać przykład?
jhocking 27.09.11
1
HTML jest zawsze renderowany po stronie klienta.
Jonas
1
Przypuszczalnie popełnił błąd i miał na myśli „manipulację”, a nie „rendering”
jhocking
Zaczynając od widoku / szablonu, łącząc go ze zmiennymi i renderując z niego surowy HTML.
yfeldblum
AJAX spowodowałby więcej żądań niż robienie tego samego bez AJAX w przypadkach takich jak: twój główny układ ma „dziury”, ale jest dostarczany z tymi dziurami w przeglądarce, a te dziury są „wypełniane” za pomocą AJAX. Zobacz np. Facebook.
yfeldblum
0

Musisz rozważyć najlepszy sposób wdrożenia swojego rozwiązania. Prosta niedynamiczna forma nie wymaga ajax, a dodanie jej może faktycznie zaszkodzić wydajności. Jeśli twoim problemem są złe zapytania, cała optymalizacja ajax na świecie nie zapewni ci wzrostu wydajności, który będzie akceptowalny.

Jeśli twój serwer jest przepracowany, musisz dowiedzieć się, dlaczego.

Jeśli otrzymujesz dużo trafień, to ajax nie naprawi tego problemu, potrzebujesz większej pojemności. Dodanie ajax tylko zwiększy liczbę żądań, które serwer musi obsłużyć.

Jeśli masz skomplikowaną stronę, powinieneś sprawdzić, czy jest coś, co możesz zrobić po stronie klienta, aby zmniejszyć obciążenie serwera. Jeśli twoja strona jest dynamiczna, ale tak naprawdę ma ograniczony pakiet danych, buforowanie po stronie klienta może się lepiej opłacić.

A czasami Ajax pomoże. Gdy masz złożone formularze z danymi dynamicznymi, ajax wygrywa dzień. Ale jeśli twoje zapytania są skomplikowane i zajmują dużo czasu, to ajax wciąż nie rozwiąże twojego problemu.

SoylentGray
źródło