【发布时间】:2011-06-21 13:20:15
【问题描述】:
我有这个项目,名为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
测试表明字符串比缓冲区快。由于这不是我所期望的,我想我可能做错了什么,但我无法确切地找到它是什么。
有人可以帮我吗?
谢谢!
【问题讨论】:
-
你能用一个小测试用例重现速度行为吗?如果是这样,请发送错误报告。
标签: javascript node.js string performance optimization