Build up textChunk.str more efficiently.

PartialEvaluator.getTextContent() builds up textChunk strings 1 char at a time,
creating many 100s of 1000s of intermediate strings along the way. This patch
make it instead push chars to an array and then join them at the end, as we
have done in numerous other places.
This commit is contained in:
Nicholas Nethercote 2014-06-18 06:59:52 -07:00
parent bab40caf7b
commit bce7601480

View File

@ -908,7 +908,9 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
};
}
return {
str: '',
// |str| is initially an array which we push individual chars to, and
// then runBidi() overwrites it with the final string.
str: [],
dir: null,
width: 0,
height: 0,
@ -918,7 +920,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}
function runBidi(textChunk) {
var bidiResult = PDFJS.bidi(textChunk.str, -1, textState.font.vertical);
var str = textChunk.str.join('');
var bidiResult = PDFJS.bidi(str, -1, textState.font.vertical);
textChunk.str = bidiResult.str;
textChunk.dir = bidiResult.dir;
return textChunk;
@ -1008,7 +1011,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}
textState.translateTextMatrix(tx, ty);
textChunk.str += glyphUnicode;
textChunk.str.push(glyphUnicode);
}
var a = textState.textLineMatrix[0];
@ -1103,10 +1106,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
if (fakeSpaces > MULTI_SPACE_FACTOR) {
fakeSpaces = Math.round(fakeSpaces);
while (fakeSpaces--) {
textChunk.str += ' ';
textChunk.str.push(' ');
}
} else if (fakeSpaces > SPACE_FACTOR) {
textChunk.str += ' ';
textChunk.str.push(' ');
}
}
}