Skip to content

Commit a46cc49

Browse files
committed
Removed as-function overload for Reader/Writer, profiler stub, optimized version of Reader#int32
1 parent 53a16bf commit a46cc49

17 files changed

+141
-180
lines changed

README.md

+15-15
Original file line numberDiff line numberDiff line change
@@ -368,33 +368,33 @@ The package includes a [benchmark](https://github.com/dcodeIO/protobuf.js/tree/m
368368
```
369369
benchmarking encoding performance ...
370370
371-
Type.encode to buffer x 469,818 ops/sec ±0.58% (89 runs sampled)
372-
JSON.stringify to string x 309,883 ops/sec ±0.81% (92 runs sampled)
373-
JSON.stringify to buffer x 174,440 ops/sec ±1.46% (87 runs sampled)
371+
Type.encode to buffer x 471,717 ops/sec ±1.30% (91 runs sampled)
372+
JSON.stringify to string x 310,406 ops/sec ±1.00% (90 runs sampled)
373+
JSON.stringify to buffer x 172,766 ops/sec ±1.20% (84 runs sampled)
374374
375375
Type.encode to buffer was fastest
376-
JSON.stringify to string was 34.2% slower
377-
JSON.stringify to buffer was 63.2% slower
376+
JSON.stringify to string was 34.0% slower
377+
JSON.stringify to buffer was 63.3% slower
378378
379379
benchmarking decoding performance ...
380380
381-
Type.decode from buffer x 1,127,271 ops/sec ±0.76% (90 runs sampled)
382-
JSON.parse from string x 295,445 ops/sec ±0.74% (92 runs sampled)
383-
JSON.parse from buffer x 265,703 ops/sec ±0.85% (92 runs sampled)
381+
Type.decode from buffer x 1,285,867 ops/sec ±0.70% (90 runs sampled)
382+
JSON.parse from string x 292,106 ops/sec ±1.00% (89 runs sampled)
383+
JSON.parse from buffer x 259,361 ops/sec ±0.92% (90 runs sampled)
384384
385385
Type.decode from buffer was fastest
386-
JSON.parse from string was 73.8% slower
387-
JSON.parse from buffer was 76.4% slower
386+
JSON.parse from string was 77.4% slower
387+
JSON.parse from buffer was 79.9% slower
388388
389389
benchmarking combined performance ...
390390
391-
Type to/from buffer x 232,255 ops/sec ±0.99% (87 runs sampled)
392-
JSON to/from string x 125,555 ops/sec ±1.01% (91 runs sampled)
393-
JSON to/from buffer x 91,243 ops/sec ±0.83% (91 runs sampled)
391+
Type to/from buffer x 238,382 ops/sec ±0.96% (89 runs sampled)
392+
JSON to/from string x 127,352 ops/sec ±0.73% (93 runs sampled)
393+
JSON to/from buffer x 89,593 ops/sec ±0.85% (87 runs sampled)
394394
395395
Type to/from buffer was fastest
396-
JSON to/from string was 46.0% slower
397-
JSON to/from buffer was 60.7% slower
396+
JSON to/from string was 46.5% slower
397+
JSON to/from buffer was 62.4% slower
398398
```
399399

400400
Note that JSON is a native binding nowadays and as such is *really* fast. So, how can protobuf.js be faster?

bench/prof.js

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
var fs = require("fs"),
2+
path = require("path");
3+
var protobuf = require("..");
4+
5+
// A profiling stub to measure just raw encoding / decoding performance using benchmark data.
6+
7+
var root = protobuf.parse(fs.readFileSync(require.resolve("../bench/bench.proto")).toString("utf8")).root;
8+
var Test = root.lookup("Test");
9+
var data = data = require("../bench/bench.json");
10+
11+
var count = process.argv.length > 3 && parseInt(process.argv[3]) || 10000000;
12+
13+
var r = protobuf.Reader.create(new Buffer(0));
14+
15+
switch (process.argv[2]) {
16+
default:
17+
console.log("usage: " + path.basename(process.argv[1]) + " <encode|decode> [iterations=10000000]");
18+
process.exit(1);
19+
return;
20+
case "encode":
21+
for (var i = 0; i < count; ++i)
22+
Test.encode(data).finish();
23+
break;
24+
case "decode":
25+
var buf = Test.encode(data).finish();
26+
for (var i = 0; i < count; ++i)
27+
Test.decode(buf);
28+
break;
29+
}

dist/protobuf.js

+39-29
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/protobuf.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/protobuf.min.js

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/protobuf.min.js.gz

8 Bytes
Binary file not shown.

dist/protobuf.min.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

scripts/prof.js

-84
This file was deleted.

src/decoder.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ var Enum = require("./enum"),
2121
decoder.fallback = function fallback(reader, length) {
2222
/* eslint-disable no-invalid-this, block-scoped-var, no-redeclare */
2323
var fields = this.getFieldsById(),
24-
reader = reader instanceof Reader ? reader : Reader(reader),
24+
reader = reader instanceof Reader ? reader : Reader.create(reader),
2525
limit = length === undefined ? reader.len : reader.pos + length,
2626
message = new (this.getCtor())();
2727
while (reader.pos < limit) {
@@ -92,7 +92,7 @@ decoder.generate = function generate(mtype) {
9292
var fields = mtype.getFieldsArray();
9393
var gen = util.codegen("r", "l")
9494

95-
("r instanceof Reader||(r=Reader(r))")
95+
("r instanceof Reader||(r=Reader.create(r))")
9696
("var c=l===undefined?r.len:r.pos+l,m=new(this.getCtor())")
9797
("while(r.pos<c){")
9898
("var t=r.tag()")

src/encoder.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ var Enum = require("./enum"),
2121
encoder.fallback = function fallback(message, writer) {
2222
/* eslint-disable block-scoped-var, no-redeclare */
2323
if (!writer)
24-
writer = Writer();
24+
writer = Writer.create();
2525
var fields = this.getFieldsArray(), fi = 0;
2626
while (fi < fields.length) {
2727
var field = fields[fi++].resolve(),
@@ -99,7 +99,7 @@ encoder.generate = function generate(mtype) {
9999
/* eslint-disable no-unexpected-multiline */
100100
var fields = mtype.getFieldsArray();
101101
var gen = util.codegen("m", "w")
102-
("w||(w=Writer())");
102+
("w||(w=Writer.create())");
103103

104104
for (var i = 0; i < fields.length; ++i) {
105105
var field = fields[i].resolve(),

0 commit comments

Comments
 (0)