From b29e74d1abe79c8ed66dc289bbe9f42dce356c49 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Tue, 31 Oct 2017 08:48:02 +0100 Subject: [PATCH] Measure height only once per font --- src/ol/render/canvas/textreplay.js | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/ol/render/canvas/textreplay.js b/src/ol/render/canvas/textreplay.js index e480dffe0f..43462563f9 100644 --- a/src/ol/render/canvas/textreplay.js +++ b/src/ol/render/canvas/textreplay.js @@ -135,18 +135,22 @@ ol.render.canvas.TextReplay.labelCache_ = new ol.structs.LRUCache(); */ ol.render.canvas.TextReplay.measureTextHeight = (function() { var span; - return function(font, lines, widths) { - if (!span) { - span = document.createElement('span'); - span.textContent = 'M'; - span.style.margin = span.style.padding = '0 !important'; - span.style.position = 'absolute !important'; - span.style.left = '-99999px !important'; + var heights = {}; + return function(font) { + var height = heights[font]; + if (height == undefined) { + if (!span) { + span = document.createElement('span'); + span.textContent = 'M'; + span.style.margin = span.style.padding = '0 !important'; + span.style.position = 'absolute !important'; + span.style.left = '-99999px !important'; + } + span.style.font = font; + document.body.appendChild(span); + height = heights[font] = span.offsetHeight; + document.body.removeChild(span); } - span.style.font = font; - document.body.appendChild(span); - var height = span.offsetHeight; - document.body.removeChild(span); return height; }; })();