nodejs Schnelligkeit und nginx
Nur mit dem testen begonnen nodejs, und wollte um etwas Hilfe im Verständnis von folgendem Verhalten:
Beispiel #1:
var http = require('http');
http.createServer(function(req, res){
res.writeHeader(200, {'Content-Type': 'text/plain'});
res.end('foo');
}).listen(1001, '0.0.0.0');
Beispiel #2:
var http = require('http');
http.createServer(function(req, res){
res.writeHeader(200, {'Content-Type': 'text/plain'});
res.write('foo');
res.end('bar');
}).listen(1001, '0.0.0.0');
Beim testen der Reaktionszeit in Chrome:
Beispiel #1 - 6-10ms
Beispiel #2 - 200-220ms
Aber, wenn der test bei beiden Beispielen durch nginx proxy_pass
server{
listen 1011;
location / {
proxy_pass http://127.0.0.1:1001;
}
}
bekomme ich diese:
Beispiel #1 - 4-8ms
Beispiel #2 - 4-8ms
Ich bin kein Experte auf entweder nodejs oder nginx, und Fragen, ob jemand das erklären kann?
nodejs - v. 0.8.1
nginx - v. 1.2.2
update:
Dank Hippo, machte ich den test mit dem ab auf meinem server mit und ohne nginx,
und bekam entgegengesetzte Ergebnisse.
ebenfalls Hinzugefügt nginx config proxy_cache aus
server{
listen 1011;
location / {
proxy_pass http://127.0.0.1:1001;
proxy_cache off;
}
}
Beispiel #1 direct:
ab-n 1000 -c 50 http://127.0.0.1:1001/
Server-Software: Server-Hostname: 127.0.0.1 Server-Port: 1001 Dokument-Pfad: / Dokument-Länge: 65 bytes Concurrency-Level: 50 Zeit für tests: 1.018 Sekunden Complete requests: 1000 Fehlgeschlagene Anfragen: 0 Schreiben Fehler: 0 Insgesamt übertragen: 166000 bytes HTML übertragen: 65000 bytes Anforderungen pro Sekunde: 981.96 [#/sec] (mean) Zeit pro Anfrage: 50.919 [ms] (mean) Zeit pro Anfrage: 1.018 [ms] (mean, across all concurrent requests) Übertragungsrate: 159.18 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Verbindung: 0 0 0.6 0 3 Verarbeitung: 0 50 44.9 19 183 Wartezeit: 0 49 44.8 17 183 Gesamt: 1 50 44.7 19 183
Beispiel #1 nginx:
ab-n 1000 -c 50 http://127.0.0.1:1011/
Server Software: nginx/1.2.2 Server-Hostname: 127.0.0.1 Server-Port: 1011 Dokument-Pfad: / Dokument-Länge: 65 bytes Concurrency-Level: 50 Zeit für tests: 1.609 Sekunden Complete requests: 1000 Fehlgeschlagene Anfragen: 0 Schreiben Fehler: 0 Insgesamt übertragen: 187000 bytes HTML übertragen: 65000 bytes Anforderungen pro Sekunde: 621.40 [#/sec] (mean) Zeit pro Anfrage: 80.463 [ms] (mean) Zeit pro Anfrage: 1.609 [ms] (mean, across all concurrent requests) Übertragungsrate: 113.48 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Verbindung: 0 0 0.6 0 3 Verarbeitung: 2 77 44.9 96 288 Wartezeit: 2 77 44.8 96 288 Insgesamt: 3 44.7 78 96 288
Beispiel #2 direkte:
ab-n 1000 -c 50 http://127.0.0.1:1001/
Server-Software: Server-Hostname: 127.0.0.1 Server-Port: 1001 Dokument-Pfad: / Dokument-Länge: 76 bytes Concurrency-Level: 50 Zeit für tests: 1.257 Sekunden Complete requests: 1000 Fehlgeschlagene Anfragen: 0 Schreiben Fehler: 0 Insgesamt übertragen: 177000 bytes HTML übertragen: 76000 bytes Anforderungen pro Sekunde: 795.47 [#/sec] (mean) Zeit pro Anfrage: 62.856 [ms] (mean) Zeit pro Anfrage: 1.257 [ms] (mean, across all concurrent requests) Übertragungsrate: 137.50 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Verbindung: 0 0 0.3 0 2 Verarbeitung: 0 60 47.8 88 193 Wartezeit: 0 60 47.8 87 193 Gesamt: 0 61 47.7 88 193
Beispiel #2 nginx:
ab-n 1000 -c 50 http://127.0.0.1:1011/
Server Software: nginx/1.2.2 Server-Hostname: 127.0.0.1 Server-Port: 1011 Dokument-Pfad: / Dokument-Länge: 76 bytes Concurrency-Level: 50 Zeit für tests: 1.754 Sekunden Complete requests: 1000 Fehlgeschlagene Anfragen: 0 Schreiben Fehler: 0 Insgesamt übertragen: 198000 bytes HTML übertragen: 76000 bytes Anforderungen pro Sekunde: 570.03 [#/sec] (mean) Zeit pro Anfrage: 87.715 [ms] (mean) Zeit pro Anfrage: 1.754 [ms] (mean, across all concurrent requests) Übertragungsrate: 110.22 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Verbindung: 0 0 0.4 0 2 Verarbeitung: 1 87 42.1 98 222 Wartezeit: 1 42.3 86 98 222 Gesamt: 1 87 42.0 98 222
Führt jetzt sieht mehr Logik, aber es gibt noch eine seltsame Verzögerung beim aufrufen res.write()
Ich denke, es war (sieht wirklich nach) eine dumme Frage, aber ich bekomme immer noch riesige Unterschied in der Reaktionszeit im browser mit dieser server-Konfigurationsdatei (Centos 6) und dem konkreten server (vps).
Zuhause auf meinem Rechner (Ubuntu 12), aber mit älteren Versionen testen von localhost funktioniert alles einwandfrei.
- res.schreiben Sie die Schuldige ist völlig verständlich. Sie sind in der Regel die Verkettung von strings und js (oder v8) sind langsam mit Streichern. Kann mich nicht erinnern, wo ich gelesen habe, es aber.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Spähen in http.js zeigt, dass Fall #1 hat eine spezielle Handhabung in nodejs selbst, eine Art shortcut-Optimierung, denke ich.
Habe ich nahm Sie Beispiele, Dateien und verwendet
ab
(Apache Benchmark) als richtige tool für benchmarking, HTTP-server-Leistung:Beispiel 1:
Beispiel 2:
Hinweis:
Das zweite Beispiel ist so schnell wie der erste. Die kleinen Unterschiede sind wahrscheinlich durch die zusätzlichen Funktionsaufruf in den code und die Tatsache, dass das Dokument größer ist dann mit dem ersten.