1. 程式人生 > >node.js protocol buffer與json

node.js protocol buffer與json

其實不太願意在部落格是寫這種太過於偏用的博文,更喜歡寫一些原始碼分析一類的。。。但是發現偏應用的看的人更多一些。。。於是就兩者結合一下吧。。。

因為做的東西需要用到protocol buffer,以前試著在github上面找過node.js的protocol buffer的庫,不過發現沒有好用的,因為現在馬上就要用到了,又上github上面去找了一下,發現原來那個不好用的現在還不錯了。。地址:

這裡就對比一下對於相同的內容,分別用protocol buffer的decode與node.js自己的JSON.parse,看看誰的表現更好吧,對比程式碼如下:

var http = require("http"),
    fs = require("fs"),
        ProtoBuf = require("protobufjs");

var Message = ProtoBuf.protoFromFile("example.proto").build("Message");

if (Message.encode) {
	console.log(1111111);
}


var before = new Date().getTime();
for (var i = 0; i < 10000; i++) {
	var data = fs.readFileSync("fjs.dat");
 	var msg = Message.decode(data);

 	//var data = fs.readFileSync("fjs.txt");
 	//var msg = JSON.parse(data);

 	//console.log(msg);
}
var after = new Date().getTime();
console.log((after - before) / 1000)

其中message的定義如下:

message Message {
    required string text = 1;
}

其實很簡單吧,他們最終要解析的資料如下:

{"text" : "aaa"}

最後結果。。。

像上面的程式碼那樣,迴圈1w次,

protocol buffer用了1.387秒,

JSON.parse用了0.74秒,

那麼在node.js中誰的效率更高應該一目瞭然了吧。。。。

畢竟json本來是javascript原生的東西,parse走的都是javascript引擎的流程,而protocol buffer畢竟還在上層寫了那麼多的javascript程式碼。。。

當然這種現象在node.js中適用,在別的語言中就不適用啦。。。以前做過java的對比,分別用protocol buffer與json,最後protocol buffer無論是在decode還是encode上面都有很大的優勢。。。