Avoid unnecessary buffer to string conversion.
authorBen Noordhuis <info@bnoordhuis.nl>
Sun, 8 Jan 2012 23:45:19 +0000 (00:45 +0100)
committerBen Noordhuis <info@bnoordhuis.nl>
Sun, 8 Jan 2012 23:50:26 +0000 (00:50 +0100)
Speeds up the benchmark below by about 680% (0.5s versus 3.4s on my Core 2 Duo).

    var crypto = require('crypto');
    var hash = crypto.createHash('sha1');
    var data = new Buffer(1024);
    for (var i = 0; i < 128 * 1024; ++i) hash.update(data);

Fixes #2494.

src/node.cc

index ba285aa..96b8373 100644 (file)
@@ -1046,6 +1046,10 @@ ssize_t DecodeBytes(v8::Handle<v8::Value> val, enum encoding encoding) {
     return -1;
   }
 
+  if (encoding == BINARY && Buffer::HasInstance(val)) {
+    return Buffer::Length(val->ToObject());
+  }
+
   Local<String> str = val->ToString();
 
   if (encoding == UTF8) return str->Utf8Length();