Wątek przeniesiony 2021-10-11 10:31 z Webmastering przez Adam Boduch.

Ilosc requestow API do stworzenia podstrony?

0

Witam!

Chce napisac podstrone, ktora wyswietla liste uzytkownikow z paginacja, drobne statystiki tj ilosc aktynych, nieaktywnych uzytniwkow, ilosc zamowien dla uzytkownika. Wszystkie dane beda pobierane przez API, sama strona napisana jest w PHP. Zastanawiam sie nad iloscia requestow API. Zazwyczaj tworze 1 API endpoin ktore zwraca jeden obiekt czy ich grupe. Np 1 endpoin dla listy, pozniej 1 endpoin na statystyki itd. Ostatnio zauwazylem, ze troche podstrony sa zamulone, poniewaz takich requestow zbiera sie nawet 5-6 na podstrone. I tak zastanawiam sie coraz bardziej czy by nie upchnac w jeden request listy userow ze statystykiami (co dla mnie nie ma sensu), ale ilosc tych request na podstrone powoli mnie przeraza :/

Wydaje mi sie, ze to ma sens, zeby miec kilka malych requestow i ladowac je asynchroniczne co powoli odblokowuje strone. Niz daj jeden wielki API call.

4

Niestety ale nie ma tu zasady. W niektórych przypadkach lepiej się sprawdzi jeden "duży" request, w niektórych kilka mniejszych. Wątpię, że jeśli storna zamula przy 5-6 requestach to jeden zbiorczy request na wszystkie te dane cokolwiek pomoże. Problem raczej leży gdzieś indziej - trzeba te requesty sprofilować i znaleźć miejsca, które można zoptymalizować.

Jeden duży request to też utrudnienie, bo:

  1. Więcej kodu do zarządzania
  2. Łatwiej cache'ować małe requesty, które odnoszą się do konkretnego zasobu - w przypadku jednego requesta co z tego, że wyciągniasz 5 na 6 obiektów z cache, skoro user i tak musi czekać na ten 6. obiekt?
  3. Jeśli jeden z 5-6 systemów/modułów użytych do sklejenia response padnie, to cała strona pada
2

Ja właśnie poprawiam Buga wydajnościowej którego stworzyłem. Zrobiłem jeden duży request bo danych było mało a baza była szybka. Teraz jakby baza zwolniła i zamieniłem na wiele małych requestów. Na testach działa wystarczająco szybko. Zobaczymy co będzie na produkcji

1

Tak, ja trzymam sie dalej malych request'ow. Wydaje mi sie, ze jest jak piszecie trzeba zoptymalizowac te male pojedyncze requesty. Dzieki.

1

Pierwsze co mi przychodzi na myśl to - włącz cache'owanie. Nie napisałeś nic o tym, wiec może część z tych statystyk da się cache'ować, np ilość zamówień dla użytkownika - to się chyba nie zmienia co sekundę prawda? A nawet jeśli to może nie dla wszystkich jednocześnie.

Tak jak pisał @iksde profiluj. Wg mnie lepsze jest też posiadanie takich odseparowanych żądań, bo możesz mieć nad nimi większą kontrolę:

  • mocno obciążające żądanie, możne być np przeniesione na inny szybszy serwer
  • łatwiej jest zoptymalizować 1 moduł (jak powyżej - profilując go)
  • łatwiej jest cache'owac
  • nawet kod takiego modułu może być bardziej przenośny
  • mozesz robic toggle-switche na takich modulach.

No i poza tym, to czesc danych mozesz nawet trzymac w samym storage w przegladarce /urzadzeniu (o ile pokrywa sie to z use-case'm samej applikacji - np bedzie z niej korzystac Pani Krysia na tej samej przegladarce/urzadzeniu)

1 użytkowników online, w tym zalogowanych: 0, gości: 1