node.js protocol buffer與json
阿新 • • 發佈:2019-02-08
其實不太願意在部落格是寫這種太過於偏用的博文,更喜歡寫一些原始碼分析一類的。。。但是發現偏應用的看的人更多一些。。。於是就兩者結合一下吧。。。
因為做的東西需要用到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上面都有很大的優勢。。。