Miałem wymóg zbudowania REST API w node.js i szukałem lżejszego frameworka niż express.js, który prawdopodobnie unika niechcianych funkcji i będzie działał jak niestandardowy framework do budowania API REST. W tym samym przypadku zalecana jest ponowna wersja z wprowadzenia.
Czytanie Po co używać restify a nie wyrażać? wydawało się, że restify to dobry wybór.
Ale niespodzianka przyszła, gdy wypróbowałem oba z obciążeniem.
Zrobiłem przykładowy REST API na Restify i zalałem go 1000 żądań na sekundę. Zaskoczyło mnie, że trasa po chwili zaczęła nie odpowiadać. Ta sama aplikacja oparta na express.js obsługuje wszystkie pliki.
Obecnie stosuję obciążenie do interfejsu API za pośrednictwem
var FnPush = setInterval(function() {
for(i=0;i<1000;i++)
SendMsg(makeMsg(i));
}, 1000);
function SendMsg(msg) {
var post_data = querystring.stringify(msg);
var post_options = {
host: target.host,
port: target.port,
path: target.path,
agent: false,
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': post_data.length,
"connection": "close"
}
};
var post_req = http.request(post_options, function(res) {});
post_req.write(post_data);
post_req.on('error', function(e) {
});
post_req.end();
}
Czy wyniki, które otrzymałem, wydają się rozsądne? A jeśli tak, to czy ekspres jest bardziej wydajny niż ponowna weryfikacja w tym scenariuszu? A może jest jakiś błąd w sposobie ich testowania?
zaktualizowane w odpowiedzi na komentarze
zachowanie restify
gdy był karmiony obciążeniem większym niż 1000 wymagań, przestał przetwarzać w ciągu zaledwie 1 sekundy, odbierając do 1015 wymagań, a następnie nic nie robiąc. to znaczy. licznik, który wdrożyłem do zliczania przychodzących żądań, zatrzymał przyrost po 1015.
przy obciążeniu nawet 100 razy. na sekundę otrzymywał do 1015 i potem przestał odpowiadać.
Odpowiedzi:
Sprostowanie : ta informacja jest teraz błędna, przewijaj dalej!
Jest rok 2015 i myślę, że od tego czasu sytuacja bardzo się zmieniła. Raygun.io opublikował ostatnio test porównujący hapi, express i restify .
To mówi:
Wygląda na to, że Restify jest tutaj zwycięzcą, jeśli chodzi o łatwiejsze wdrażanie usług. Zwłaszcza jeśli tworzysz usługę, która otrzymuje wiele zapytań od tych samych klientów i chcesz działać szybko. Oczywiście dostajesz o wiele więcej za dolara niż nagi Node, ponieważ masz wbudowane funkcje takie jak obsługa DTrace.
źródło
To rok 2017 i najnowszy test wydajnościowy Raygun.io porównujący hapi, express, restify i Koa.
Pokazuje, że Koa jest szybszy niż inne frameworki, ale ponieważ to pytanie dotyczy wyrażania i ponownego określania, Express jest szybszy niż restify.
I jest napisane w poście
źródło
Zgodnie z opisem Node Knockout :
Prawdopodobnie można naprawić problemy z wydajnością i błędy. Może ten opis będzie odpowiednią motywacją.
źródło
Natknąłem się na podobny problem podczas testowania wielu frameworków na OS X przez ab. Niektóre stosy padały konsekwentnie po około tysięcznym żądaniu.
Znacząco przekroczyłem limit i problem zniknął.
Możesz sprawdzić, czy Twoje maxfiles są na poziomie ulimit (lub launchctl limit <tylko OS X) i zobaczyć, jakie jest maksimum.
Mam nadzieję, że to pomoże.
źródło
mylono mnie z express, restify lub perfectAPI. próbowałem nawet stworzyć moduł we wszystkich z nich. głównym wymaganiem było wykonanie RESTapi. ale w końcu skończyło się na ekspresie, przetestowałem siebie z żądaniem na sekundę wykonanym na wszystkich frameworkach, ekspres dał lepszy wynik niż inne. Chociaż w niektórych przypadkach ponownie przyćmiewa wyraźne, ale ekspresowe szwy, aby wygrać wyścig. Kciuki w górę za ekspresją. I tak, natknąłem się również na lokomotywę js, jakiś framework MVC oparty na ekspresie. Jeśli ktoś szuka kompletnej aplikacji MVC wykorzystującej express i jade, wybierz lokomotywę.
źródło