Jak zrobić porównanie frameworków

0

Witam wszystkich.

W ramach prezentacji i referatu szkolnego (na wyższą ocenę) chciałbym porównać kilka frameworków. Założenie jest by zrobić API zwracające JSON lub robiące czasochłonną operację np. odczyt z bazy danych. Nauczyciel mówił by przygotować środowisko testowe najlepiej na maszynie wirtualnej z linuxem, bo wtedy jest dużo prościej. Wstępnie wybrałem ASP.NET Core i Express ale mogę powiększyć listę o dowolne frameworki. Nie muszę robić dużego tylko dla 2 lub 3 maksymalnie, może maksymalnie podstawy 5 frameworków dam radę ogarnąć.

Znalazłem stronę techempower.com/benchmarks/ która prezentuje przykładowe porównanie, ale nie rozumiem o co w tym chodzi. Po prostu nie wiem jak zacząć, jakie potrzebuje narzędzia i miary. Jak zmierzyć, które API jest lepsze dla danych operacji?

Aktualnie potrafię zrobić API w ASP.NET Core, Express, sprawdzić działanie w Postman i mam gotowego linuxa Ubuntu na maszynie wirtualnej.

Jeśli napisałem w złym dziale to przepraszam, proszę o przeniesienie tematu i wyrozumiałość ponieważ nigdy wcześniej nie robiłem porównań frameworków oraz miałem dylemat czy napisać post w dziale edukacja czy inżynieria oprogramowania. Bardzo proszę również o sugestie.

1

Postaw sobie serwer i potem stestuj go za pomocą np. https://github.com/tsenart/vegeta

2
arrow1 napisał(a):

W ramach prezentacji i referatu szkolnego (na wyższą ocenę) chciałbym porównać kilka frameworków.

Ale co chcesz porównać? Szybkość działania? Prostotę pisania? Niezawodność?

Założenie jest by zrobić API zwracające JSON lub robiące czasochłonną operację np. odczyt z bazy danych.

Odczyt z bazy nie jest czasochłonną operacją (przynajmniej dla szukania po kluczu głównym). BTW jak chcesz tam dać czasochłonną operację to będziesz mierzyć głównie tą operację i różnice między frameworkami będą małe. A zgaduję że chcesz pokazać narzut samego frameworka.

Wstępnie wybrałem ASP.NET Core i Express ale mogę powiększyć listę o dowolne frameworki. Nie muszę robić dużego tylko dla 2 lub 3 maksymalnie, może maksymalnie podstawy 5 frameworków dam radę ogarnąć.

Ograniczasz się tylko do C# i JavaScripta? jeśli tak to powinieneś otagoweć te języki. Jeśli nie to jakie jeszcze języki programowania znasz?

Znalazłem stronę techempower.com/benchmarks/ która prezentuje przykładowe porównanie, ale nie rozumiem o co w tym chodzi. Po prostu nie wiem jak zacząć, jakie potrzebuje narzędzia i miary. Jak zmierzyć, które API jest lepsze dla danych operacji?

Twoje zadanie ociera się w zasadzie o microbenchmark. Potrzebujesz jeszcze jakiś kod zewnętrzny który X razy wywoła twoje api i policzy średnią. Najlepiej żeby odrzucił Y początkowych pomiarów bo języki używające JIT mają coś takiego jak czas rozgrzewania się więc pierwsze Y pomiarów nie jest gorsze niż dalsze pomiary

0

@KamilAdam:

Ale co chcesz porównać? Szybkość działania? Prostotę pisania? Niezawodność?

Nie mam jeszcze sprecyzowane co dokładnie porównywać. Myślę, że coś na wzór porównania z linku, że miałbym kilka endpointów:

  1. Zwracam mały JSON z obiektu
  2. Zwracam JSON odczytany z pliku?
  3. Robię odczyt 10 rekordów z bazy danych i zwracam JSON
  4. Robię request POST i zapis do bazy,
    5 Robię requesty PUT, DELETE.
    Myślę, że głównie wydajność, zużycie pamięci, nie wiem szybkość działania. W sumie prostota pisania też wydaje się ciekawe, ale nie wiem jak się za to zabrać, bo nigdy wcześniej nie robiłem porównania.

BTW jak chcesz tam dać czasochłonną operację to będziesz mierzyć głównie tą operację i różnice między frameworkami będą małe. A zgaduję że chcesz pokazać narzut samego frameworka.

Tak chciałbym różnice między frameworkami nie wiem np. zapis 10000 rekordów okaże się szybszy dla któregoś.

Ograniczasz się tylko do C# i JavaScripta? jeśli tak to powinieneś otagoweć te języki. Jeśli nie to jakie jeszcze języki programowania znasz?

Myślę, że te 2 będą wystarczające, ale mogę dodać jeszcze Django (Python), może PHP bo miałem w szkole. Raczej c# i JavaScript na 100%.

@iksde: dziękuję a w skrócie mógłbyś napisać jakie statystyki liczy ten program?

3

Myślę, że głównie wydajność, zużycie pamięci, nie wiem szybkość działania. W sumie prostota pisania też wydaje się ciekawe, ale nie wiem jak się za to zabrać, bo nigdy wcześniej nie robiłem porównania.

Tyle że tego nie da się tak prosto porównać. Np. Możesz mieć kod w C++ z jakimś superflagami dostosowanymi pod konkretny hardware i będzie 100 razy szybsze od Javy, ale będzie wymagało konkretnego sprzetu, OS etc.
Kod można napisać w różny sposób, np.:

Robię odczyt 10 rekordów z bazy danych i zwracam JSON

No możesz mieć baze danych gdzie masz 1:N jak np. zamówienia i produkty.
W Javie to ogarniesz przez odpowiednie selecty z joinem, a w C# się rypniesz i zrobisz N+1 (dla każdego zamówienia robisz osobny select z produktami). Wyjdzie Ci że Java jest szybsza, ale to nie będzie błąd frameworku .NET tylko tego że nie ogarnąłeś.

0

@Aleksander32: Raczej chciałbym zrobić prostsze rzeczy, nie musi być jak super profesjonaliści tylko ogólne porównanie różnych elementów frameworków ale żeby też ciekawe było. A zajętą pamięć albo czas wykonania funkcji która zwraca response i dane w JSONie należy przetestować bibliotekami dla języków osobno JavaScript i C#?

A to co @KamilAdam: zasugerował prostota kodu i niezawodność jak można porównać o ile się da porównać?

3

Jeśli testy mają być miarodajne, to trzeba je robić jednym narzędziem, np. Gatlingiem. Jak sobie zdefiniujesz, że ma wysyłać np. 100 równoległych żądań po 100 zapytań, to może nawet jakieś wyniki z tego wyjdą.
Bo jeśli chcesz zmierzyć czas jednokrotnego wywołania jakiegoś endpointu, to to sensu nie ma żadnego, lepiej pograć w Tomb Raider.

0

@somekind: dzięki za propozycje narzędzia Gatling ale chyba zostnę przy vegata lub wtk bo patrzyłem na internecie jest dużo tego, jeszcze jest jmeter niby spoko lecz będę musiał sam zobaczyć na komputerze bo nie instalowałem jeszcze. Pomału zacynam myśleć nad ciekawym web api a mogę spytać ciebie co myślisz na temat przykładowych testów endpointów jak poniżej

1 Zwracam mały JSON z obiektu, serializacja JSON
2 Zwracam JSON odczytany z pliku lub text/plain lub text/html
3 Robię odczyt 10 rekordów z bazy danych i zwracam JSON
4 Robię request POST i zapis do bazy,
5 Robię request PUT
6 Robię request DELETE.
6 Robię algorytm który coś długo liczy

czy te testy mają choć trochę sensu a może coś warto zmienić?

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