Pluginy kontra Skrypty - co lepsze?

Hejka!

Chciałbym tutaj rozpocząć dyskusję (dobrą dyskusję, używając słów, które składają się w sensowne argumenty) na temat tego co jest lepsze - Skrypt czy Plugin.
Na potrzeby tego wątku uznajmy, że osoba która miałaby do wyboru pisać skrypt lub plugin posiada wystarczającą wiedzę w obu tych sprawach, aby napisać optymalny i wydajny kod. Inaczej pomijamy argumenty na zasadzie “jak ktoś nie umie pisać plugin’ów to już lepiej niech napisze skrypt, bo jeszcze plugin serwer zawiesi”.

2lajki

Uważam, że taka dyskusja nie ma najmniejszego sensu xD
Oczywiste jest, że skript na serwerze nastawionym na graczy to :crab:.
Sam wykorzystuję skript ale na innym serwerze gdzie jest kilka osób od czasu do czasu, i to tylko w wyznaczonym celu. Wydajność na tym serwerze nie jest priorytetem, stąd moja decyzja o tym by Skript został.
Wracając (bo pewnie chodzi o serwery publiczne):
Można niby wykorzystywać Skript do prostych rzeczy, jednak sama wtyczka - nawet przy najprostszych skryptach - potrafi “zjeść” bardzo dużą ilość zasobów.
Sam mam doskonałe porównanie - od 2015 do 2018 pakowałem różne skrypty do serwera, timingi były nieraz koszmarne. Problemy z wydajnością były nawet na początku 2018 kiedy to miałem tylko 1 skrypt.

2lajki

@DoreK Ja miałem kiedyś pomysł, aby sprawdzić zachowanie serwer, który byłby napisany na samych skryptach i porównać to z pluginami, ale z braku zasobów na to zaprzestałem “rozwijanie projektu”.
i za te podśmiechy z mojego tematu @DoreK znajde Cie, mam już Twój adres, AJ PI :kappa:

1lajk

Ja kiedyś zrobiłem właśnie z ciekawości serwer oparty głównie na skriptach. Skutki były wręcz dramatyczne, co jakiś czas dochodziło do wyłączenia serwera z powodu za dużego zapotrzebowania na zasoby.

:man_facepalming:

1lajk

Jako że nie ma doprecyzowanego w wątku to zakładam, że mowa o minecrafcie.

to można uzyskać niezależnie od tego, czy pisze się skrypt, czy plugin.

Jako, że powinienem się uczyć, Postaram się opisać dlaczego skrypty to dramat i należy ich unikać.

Skript przede wszystkim charakteryzuje się tym, że jest wybrakowany - api bukkita samo z siebie pozwala na wiele ciekawych rzeczy, jak np tworzenie asynchronicznie wykonywanych operacji, co jest bardzo przydatne gdy np robimy jakieś operacje, które powinny dziać się w tle, aby nie obciążać bezsensownie serwera i nie zatrzymywać pracy jego głównego wątku (bo jak wiadomo, praktycznie cała logika serwera gry wykonuje się w jednym wątku, co jest okropne już samo z siebie). Takimi operacjami jest np pobieranie jakichś danych przez sieć, które potrafią same z siebie trwać paredziesiąt milisekund na odpowiedź serwera - wykonując takie operacje w skripcie, całe zapytanie jest wykonywane w trakcie ticku serwera, który jest przez ten czas blokowany, a więc marnuje się masa czasu. Takie zachowanie jest niedopuszczalne i nie powinno być akceptowane przez nikogo, kto chce prowadzić serwer na poważnie, a niestety wiele razy już się spotykałem z takimi sytuacjami, że takie rzeczy były wykonywane przez skrypt, do tego co kilka ticków, przez co cały serwer miał problemy z wydajnością, bo na odpowiedź od api oczekiwano ponad 100ms. Tick minecrafta w zdrowej sytuacji zajmuje 50ms, a więc tracili czas na dwa ticki tylko i wyłącznie na jakiś skrypt, a gdyby napisać takie rozwiązanie w pluginie, to wykonanie takiego zapytania asynchronicznie byłoby nieodczuwalne dla serwera.

Kolejna sprawa to wydajność skripta sama z siebie, zużycie zasobów - język skript znajduje się na znacznie wyższym poziomie abstrakcji niż java, do tego plugin skript stanowi dodatkową warstwę oprogramowania, której przejście dodaje dodatkowy narzut - to składa się na obniżenie wydajności wszelkich rozwiązań - jeżeli przyjmujemy Twoje założenia, że twórca umie pisać wydajnie i w javie i w skripcie, to kod w skripcie nigdy nie przegoni wydajności javy.

Jeżeli ktoś naprawdę umie oba te języki, to jedyne do czego skript może mu się przydać, poza tym że ogólnie jest obiektywnie do niczego gdy w gre wchodzi dbanie o wydajność, to wizualizowanie na szybko jak będzie wyglądać jakieś rozwiązanie, które później mógłby zaimplementować w javie, ale i to jest bardzo naciągane.

6lajków

Moim zdaniem Skript nie powinien być w ogóle na serwerze z bardzo prostych powodów, które zostały wymienione już wyżej. Natomiast z pluginem też można przesadzić, dlatego ja osobiście zalecam tylko pluginy bez skryptów. Jeśli natomiast zdecydujesz się na skrypty to pamiętaj, żeby nie przydzielać im ważnych ról (np. nie rób skryptu na logowanie, bo jak Skript padnie to nie będzie logowania) używaj ich raczej do mało ważnych rzeczy, a najlepiej wcale.

1lajk

Dokładnie, najlepiej wcale - sama obecność wtyczki może zadławić w miarę niewydajny serwer :V

2lajki

Przepraszam, że tak wchodzę z butami w dyskusję na temat o którym nie mam pojęcia (typowy Janusz xD).
Nie umiem javy a 2-3 skrypty już napisałem bądź przerobiłem (proste, raczej nie zrobiłem tego w sposób wydajny) i było to 1-2 lata temu więc załóżmy, że ich też nie potrafię. Chcąc tworzyć własnie nieduży serwer, powiedzmy 5-10 regularnych graczy (głównie znajomych ale może się kogoś jeszcze podłapie do tych 10 :stuck_out_tongue_winking_eye:) to lepiej brać się za naukę tej javy i API bukkita?
A jeszcze kilka lat temu każdy był za skryptami i chwalono jakie to świetne rozwiązanie.

1lajk

Wiele osób jest za skryptami cały czas, bo ogólnie to skrypty są spoko, jako np wprowadzenie w programowanie, ale jednak nie powinny wychodzić poza sferę zabawki, a nie rozwiązania do stosowania w poważnych zastosowaniach.
Jeżeli nie będziesz robił rzeczy czasochłonnych w skryptach, to nie powinno nic złego się stać. Problem zaczyna się kiedy zaczyna brakować mocy :slight_smile:

2lajki

Przynajmniej coś przydatnego z tego będziesz miał :slight_smile:

2lajki

@bopke @DoreK
Nie jestem w stanie tego “udowodnić”, gdyż było to dawno, dawno temu, gdy młody ja uczył się jeszcze wielu rzeczy w robieniu serwerów, ale w tym czasie miałem serwer, oparty głównie na skryptach graczy w okolicach ~120 i przez cały czas działalności serwera (ok. 6 miesięcy) nie było nawet jednego spadku wydajności spowodowanego przez Skript. Dla precyzji był to serwer, który trybem mocno przypominał BF’a i to był mój taki pierwszy projekt, jako test skryptów i ogólne rozeznanie się w tym co to jest ten Skript.
Ale cały ten skrypt odpowiadał tak naprawdę za całość działania trybu, czyli wybieranie map, system expa, itd. przez co miał “ręce pełne roboty”, a mimo tego nie odnotowane były żadne spadki wydajności, czy “lagi”.

1lajk

Być może gdyby nie było skryptów wydajność serwera wzrosłaby o 70%.

2lajki