我有一个项目,叫做Memcached.Js,这是将Memcached服务器移植到Node.js的版本。
我一直在比较字符串和缓冲区之间的内存占用和性能。对于内存来说,毫无疑问缓冲区是正确的选择。
但出乎我的意料,在性能方面并非如此。执行字符串操作要比使用缓冲区快。这是我尝试过的:
// Option 1: data.toString() - amazing, but it's the best one
var commandDataStr = mdata.data.toString().substr(startPos, bytes);
var commandData = new Buffer(commandDataStr);
// Option 2: data.slice().toString() - the same as above... What?
var commandDataStr = mdata.data.slice(startPos, startPos + bytes).toString();
var commandData = new Buffer(commandDataStr);
// Option 3: data.slice() - bad
var commandData = mdata.data.slice(startPos, startPos + bytes);
// Option 4: data.copy() - bad as well
var commandData = new Buffer(bytes);
mdata.data.copy(commandData, 0, startPos, startPos + bytes);
完整代码在这里:https://github.com/dalssoft/memcached.js/blob/master/lib/memcached.ascii.commands.js#L72。测试代码:
ruby test/from_clients/perf_test.rb
。测试表明,字符串比缓冲区要快。我并没有预料到这点,所以我认为我可能做错了什么,但我无法确定具体是哪里错了。
有人能帮我吗?
谢谢!