From 501446ccc48e4c9923ef7611ab07bb0a678f4639 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Tue, 22 Jul 2014 22:09:54 -0700 Subject: [PATCH] Optimize common cases in hexToStr(). This avoids the creation of over two million array objects when viewing http://www.dynacw.co.jp/Portals/3/fontsamplepdf/sample_4942546800828.pdf, and reduces load time from 76 to 73 ms. --- src/core/cmap.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/core/cmap.js b/src/core/cmap.js index 792c679df..83c0d7224 100644 --- a/src/core/cmap.js +++ b/src/core/cmap.js @@ -313,6 +313,14 @@ var BinaryCMapReader = (function BinaryCMapReaderClosure() { } function hexToStr(a, size) { + // This code is hot. Special-case some common values to avoid creating an + // object with subarray(). + if (size == 1) { + return String.fromCharCode(a[0], a[1]); + } + if (size == 3) { + return String.fromCharCode(a[0], a[1], a[2], a[3]); + } return String.fromCharCode.apply(null, a.subarray(0, size + 1)); }