私はMemcached.Jsと呼ばれるこのプロジェクトを持っています。これはNode.jsへのMemcachedサーバーのポートです。バッファーと文字列の速度:なぜ文字列が高速になりますか?
私は、メモリフットプリントとパフォーマンスを比較して、文字列とバッファでarroundを再生しています。メモリの場合、バッファが正しい選択であるということは疑いありません。
私の驚きのために、同じことがパフォーマンスに関しては当てはまりません。バッファを使用するよりも文字列操作を実行する方が高速です。これは私が試したものです:
// 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
私はこのスクリプトを使用してパフォーマンスをチェックしています:https://github.com/dalssoft/memcached.js/blob/master/test/from_clients/perf_test.rb –