From d56cc9c5e82c431306a6f72d0f32d539e6e54e66 Mon Sep 17 00:00:00 2001 From: Saebekassebil Date: Mon, 18 Jul 2011 12:09:26 +0200 Subject: [PATCH 1/2] Updating PartialEvaluator.eval syntax for better performance --- pdf.js | 41 +++++++++++++---------------------------- 1 file changed, 13 insertions(+), 28 deletions(-) diff --git a/pdf.js b/pdf.js index 05330db84..5e2aa87b1 100644 --- a/pdf.js +++ b/pdf.js @@ -3561,23 +3561,9 @@ var PartialEvaluator = (function() { eval: function(stream, xref, resources, fonts) { resources = xref.fetchIfRef(resources) || new Dict(); var xobjs = xref.fetchIfRef(resources.get('XObject')) || new Dict(); - var parser = new Parser(new Lexer(stream), false); - var objpool = []; - - function emitArg(arg) { - if (typeof arg == 'object' || typeof arg == 'string') { - var index = objpool.length; - objpool[index] = arg; - return 'objpool[' + index + ']'; - } - return arg; - } - - var src = ''; - - var args = []; - var obj; + var args = [], argsArray = [], fnArray = [], obj; + while (!IsEOF(obj = parser.getObj())) { if (IsCmd(obj)) { var cmd = obj.cmd; @@ -3600,9 +3586,9 @@ var PartialEvaluator = (function() { if ('Form' == type.name) { args[0].code = this.eval(xobj, - xref, - xobj.dict.get('Resources'), - fonts); + xref, + xobj.dict.get('Resources'), + fonts); } } } else if (cmd == 'Tf') { // eagerly collect all fonts @@ -3622,21 +3608,20 @@ var PartialEvaluator = (function() { } } - src += 'this.'; - src += fn; - src += '('; - src += args.map(emitArg).join(','); - src += ');\n'; - - args.length = 0; + fnArray.push(fn); + argsArray.push(args); + args = []; } else { assertWellFormed(args.length <= 33, 'Too many arguments'); args.push(obj); } } - var fn = Function('objpool', src); - return function(gfx) { fn.call(gfx, objpool); }; + return function(gfx) { + for(var i = 0, length = argsArray.length; i < length; i++) { + gfx[fnArray[i]].apply(gfx, argsArray[i]); + } + } }, translateFont: function(fontDict, xref, resources) { From aedd5057c4ae9849140b07ccf0896c75a51ffebe Mon Sep 17 00:00:00 2001 From: Saebekassebil Date: Mon, 18 Jul 2011 15:01:12 +0200 Subject: [PATCH 2/2] Updated syntax --- pdf.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/pdf.js b/pdf.js index 5e2aa87b1..64e830f5d 100644 --- a/pdf.js +++ b/pdf.js @@ -3585,10 +3585,7 @@ var PartialEvaluator = (function() { ); if ('Form' == type.name) { - args[0].code = this.eval(xobj, - xref, - xobj.dict.get('Resources'), - fonts); + args[0].code = this.eval(xobj, xref, xobj.dict.get('Resources'), fonts); } } } else if (cmd == 'Tf') { // eagerly collect all fonts @@ -3618,9 +3615,8 @@ var PartialEvaluator = (function() { } return function(gfx) { - for(var i = 0, length = argsArray.length; i < length; i++) { + for(var i = 0, length = argsArray.length; i < length; i++) gfx[fnArray[i]].apply(gfx, argsArray[i]); - } } },