Chunk strings together on Stream buffer
authorRyan Dahl <ry@tinyclouds.org>
Thu, 29 Apr 2010 18:57:52 +0000 (11:57 -0700)
committerRyan Dahl <ry@tinyclouds.org>
Thu, 29 Apr 2010 19:00:37 +0000 (12:00 -0700)
lib/net.js
test/disabled/test-http-big-proxy-responses.js

index 04ca00f..74659cc 100644 (file)
@@ -504,8 +504,15 @@ Stream.prototype.write = function (data, encoding) {
     if (this._writeQueueLast() === END_OF_FILE) {
       throw new Error('Stream.close() called already; cannot write.');
     }
-    this._writeQueue.push(data); // TODO if string of the same encoding concat?
-    this._writeQueueEncoding.push(encoding);
+
+    if (typeof data == 'string' &&
+        this._writeQueueEncoding[this._writeQueueEncoding.length-1] === encoding) {
+      // optimization - concat onto last
+      this._writeQueue[this._writeQueue.length-1] += data;
+    } else {
+      this._writeQueue.push(data);
+      this._writeQueueEncoding.push(encoding);
+    }
     return false;
   } else {
     // Fast.
index a75ff87..9ddb966 100644 (file)
@@ -12,7 +12,7 @@ var chargen = http.createServer(function (req, res) {
   assert.ok(len > 0);
   res.writeHead(200, {"transfer-encoding":"chunked"});
   for (var i=0; i<len; i++) {
-    //print(',');
+    if (i % 1000 == 0) print(',');
     res.write(chunk);
   }
   res.end();
@@ -38,8 +38,10 @@ var proxy = http.createServer(function (req, res) {
   proxy_req.addListener('response', function(proxy_res) {
     res.writeHead(proxy_res.statusCode, proxy_res.headers);
 
+    var count = 0;
+
     proxy_res.addListener('data', function(d) {
-      //print('.');
+      if (count++ % 1000 == 0) print('.');
       res.write(d);
       sent += d.length;
       assert.ok(sent <= (len*chunk.length));