我有這個項目,名爲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
試驗表明,字符串是比緩衝區更快。由於這不是我所期待的,我認爲我可能做錯了什麼,但我找不到它究竟是什麼。
任何人都可以幫助我嗎?
Tks!
你能重現一個小的測試情況下,速度的行爲嗎?如果是這樣,那麼發送一個錯誤報告。 – btilly 2011-02-04 18:37:58