string_decoder: fix performance regression
authorBrian White <mscdex@mscdex.net>
Thu, 11 Feb 2016 15:31:47 +0000 (10:31 -0500)
committerMyles Borins <mborins@us.ibm.com>
Mon, 21 Mar 2016 19:57:54 +0000 (12:57 -0700)
This commit reverts the const usage introduced by 68a6abc
because v8 currently cannot optimize functions that contain
these uses of const (unsupported phi use of const variable).
The performance difference in this case can be up to ~130%
for non-ascii/binary string encodings.

PR-URL: https://github.com/nodejs/node/pull/5134
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: James M Snell <jasnell@gmail.com>
lib/string_decoder.js

index ffb04ff..a0bfd53 100644 (file)
@@ -69,6 +69,7 @@ StringDecoder.prototype.write = function(buffer) {
   var charReceived = this.charReceived;
   var surrogateSize = this.surrogateSize;
   var encoding = this.encoding;
+  var charCode;
   // if our last write ended with an incomplete multibyte character
   while (charLength) {
     // determine how many remaining bytes this buffer has to offer for this char
@@ -96,7 +97,7 @@ StringDecoder.prototype.write = function(buffer) {
     charStr = charBuffer.toString(encoding, 0, charLength);
 
     // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
-    const charCode = charStr.charCodeAt(charStr.length - 1);
+    charCode = charStr.charCodeAt(charStr.length - 1);
     if (charCode >= 0xD800 && charCode <= 0xDBFF) {
       charLength += surrogateSize;
       charStr = '';
@@ -129,7 +130,7 @@ StringDecoder.prototype.write = function(buffer) {
   charStr += buffer.toString(encoding, 0, end);
 
   end = charStr.length - 1;
-  const charCode = charStr.charCodeAt(end);
+  charCode = charStr.charCodeAt(end);
   // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
   if (charCode >= 0xD800 && charCode <= 0xDBFF) {
     charLength += surrogateSize;