From d7db7af7225e597cf065422fecba03834516bf3d Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 13 Feb 2017 09:56:37 -0700 Subject: [PATCH] Remove closure allocations from DOMElementPool build methods --- src/dom-element-pool.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/dom-element-pool.js b/src/dom-element-pool.js index 7cd5dc53e..fa436451c 100644 --- a/src/dom-element-pool.js +++ b/src/dom-element-pool.js @@ -13,17 +13,9 @@ class DOMElementPool { } } - build (tagName, factory, reset) { - let element = this.freeElementsByTagName[tagName] ? this.freeElementsByTagName[tagName].pop() : null - if (!element) { element = factory() } - reset(element) - this.freedElements.delete(element) - return element - } - buildElement (tagName, className) { - const factory = () => document.createElement(tagName) - const reset = function (element) { + let element = this.freeElementsByTagName[tagName] ? this.freeElementsByTagName[tagName].pop() : null + if (element) { for (let dataId in element.dataset) { delete element.dataset[dataId] } element.removeAttribute('style') if (className != null) { @@ -31,14 +23,22 @@ class DOMElementPool { } else { element.removeAttribute('class') } + this.freedElements.delete(element) + } else { + element = document.createElement(tagName) } - return this.build(tagName, factory, reset) + return element } buildText (textContent) { - const factory = () => document.createTextNode(textContent) - const reset = element => { element.textContent = textContent } - return this.build('#text', factory, reset) + let element = this.freeElementsByTagName['#text'] ? this.freeElementsByTagName['#text'].pop() : null + if (element) { + element.textContent = textContent + this.freedElements.delete(element) + } else { + element = document.createTextNode(textContent) + } + return element } freeElementAndDescendants (element) {