Browse Source

string_decoder: fix performance regression

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>
process-exit-stdio-flushing
Brian White 9 years ago
parent
commit
ae244a26c1
  1. 5
      lib/string_decoder.js

5
lib/string_decoder.js

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

Loading…
Cancel
Save