想测试理论性能也测不出来呀。
另:鉴于Node.js也输出Date header,所以去掉这个benchmark就不公平了;但是如果想测量
time.Format的overhead的的话可以试试这样,很简单,只要w.Header()["Date"] = nil就可以了。
但是Go Header里面多的Content-Type是必须得改,同时加上Connection: keep-alive
web测试可不仅仅是大小数据量这么简单;没有测试到的东西多了去了。比如最高支持的并发数,
比如响应的lattency,要求更高可能还有jitter。
还有,这个benchmark的代码覆盖率有多少?我觉得net/http可以砍掉90%以上的代码然后依然
可以支持这个benchmark,请问这样的话,这个benchmark说明了什么实际情况?
实际上这个测试足够说明了go在复杂业务环境下的优势的优势了。
这个测试绝对不可能说明Go在复杂业务环境下的优势。这么外推性能数据是极端危险的。
(换句话说,如果这样就能评测Go在复杂业务环境下的优势的话,明天Go Team就修改编译器,
检测这段代码,然后针对它生成更优化的代码,稍微优化一点这个性能可以高得多,因为这个
至少可以优化成收到请求就直接发固定的一段响应过去,可以根本不理GET的URL,以及送过来
的Header等等)
另:为了某个benchmark改编译器的事情还真发生过。
因为hello world是nodejs的最佳应用场景。
这么定位Node.js,Ryan要被气死了。
不能因为是go的fans,就不顾一切的为之辩护,而丧失客观行。
我觉得数据量都不一致,很难得出任何有意义的结论。你要benchmark总要保证尽可能多的条件
是一致的,这样才有意义。另外,对于结果我没啥评论,我觉得更重要的是这个benchmark没意
义,具体是谁强谁弱得在benchmark有意义的情况下才有必要说。
还是那句话,如果我把net/http裁剪到只支持这样trivial的应用,那么你还觉得这个benchmark有意义么?
另外,你提到比较语言层面的性能,那用net/http就更不对了,因为这里还牵扯到io。
以及,Node.js的这个benchmark里面Javascript实现的部分有多少比例?
2012/8/13 lulu Lee
<qlee...@gmail.com>
首先,我做这个测试的主要目的不是要和nodejs比谁快谁慢,只是想要说明go的http模块在性能上已经有不俗的表现,大可以放心使用go来
你只测试了这么一个trivial的程序,然后把结论推广到整个net/http模块;这合适么?
我前面提过多次了,如果我裁剪net/http模块中没执行到的代码来提高性能,那么合适么?
我认为大部分这个很模糊的概念;是行数还是执行时间比例?从行数上说没任何意义,
因为可能大部分代码都根本没执行到;要是说实际执行的行数那倒是还稍微客观点;
我觉得更好的是执行时间占从时间的比例(而且这个还是跟benchmark的目的有关,
到底是比较V8和gc;还是比较http server?比较http server的话,首先你的测试覆盖
率得足够);