summaryrefslogtreecommitdiff
path: root/benchmark/http
diff options
context:
space:
mode:
authorTrevor Norris <trev.norris@gmail.com>2015-11-10 03:04:26 -0700
committerTrevor Norris <trev.norris@gmail.com>2015-12-17 17:28:53 -0700
commitd39ace16bacd57cce2fa2063fe0b5503c544e743 (patch)
tree5ea2c4893996752d7f4bcb51686d9fd29361bd00 /benchmark/http
parent83524b3c186e2e1ba2975e3b009ec81b10b641ff (diff)
downloadandroid-node-v8-d39ace16bacd57cce2fa2063fe0b5503c544e743.tar.gz
android-node-v8-d39ace16bacd57cce2fa2063fe0b5503c544e743.tar.bz2
android-node-v8-d39ace16bacd57cce2fa2063fe0b5503c544e743.zip
http_parser: use pushValueToArray for headers
For performance add headers to the headers Array by pushing them on from JS. Benchmark added to demonstrate this case. PR-URL: https://github.com/nodejs/node/pull/3780 Reviewed-By: Fedor Indutny <fedor@indutny.com>
Diffstat (limited to 'benchmark/http')
-rw-r--r--benchmark/http/bench-parser.js55
1 files changed, 55 insertions, 0 deletions
diff --git a/benchmark/http/bench-parser.js b/benchmark/http/bench-parser.js
new file mode 100644
index 0000000000..989d9a994f
--- /dev/null
+++ b/benchmark/http/bench-parser.js
@@ -0,0 +1,55 @@
+'use strict';
+
+const common = require('../common');
+const HTTPParser = process.binding('http_parser').HTTPParser;
+const REQUEST = HTTPParser.REQUEST;
+const kOnHeaders = HTTPParser.kOnHeaders | 0;
+const kOnHeadersComplete = HTTPParser.kOnHeadersComplete | 0;
+const kOnBody = HTTPParser.kOnBody | 0;
+const kOnMessageComplete = HTTPParser.kOnMessageComplete | 0;
+const CRLF = '\r\n';
+
+const bench = common.createBenchmark(main, {
+ fields: [4, 8, 16, 32],
+ n: [1e5],
+});
+
+
+function main(conf) {
+ const fields = conf.fields >>> 0;
+ const n = conf.n >>> 0;
+ var header = `GET /hello HTTP/1.1${CRLF}Content-Type: text/plain${CRLF}`;
+
+ for (var i = 0; i < fields; i++) {
+ header += `X-Filler${i}: ${Math.random().toString(36).substr(2)}${CRLF}`;
+ }
+ header += CRLF;
+
+ processHeader(new Buffer(header), n);
+}
+
+
+function processHeader(header, n) {
+ const parser = newParser(REQUEST);
+
+ bench.start();
+ for (var i = 0; i < n; i++) {
+ parser.execute(header, 0, header.length);
+ parser.reinitialize(REQUEST);
+ }
+ bench.end(n);
+}
+
+
+function newParser(type) {
+ const parser = new HTTPParser(type);
+
+ parser.headers = [];
+
+ parser[kOnHeaders] = function() { };
+ parser[kOnHeadersComplete] = function() { };
+ parser[kOnBody] = function() { };
+ parser[kOnMessageComplete] = function() { };
+
+ return parser;
+}