From 00107c06b94e17375fd7ac571ff81b652709bde5 Mon Sep 17 00:00:00 2001 From: Christopher Chedeau Date: Sun, 6 Apr 2014 09:47:31 -0700 Subject: [PATCH] remove allocations --- src/Layout.js | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/Layout.js b/src/Layout.js index de54ae1d..c83eceb6 100755 --- a/src/Layout.js +++ b/src/Layout.js @@ -36,39 +36,40 @@ function computeLayout(node) { column: 'height' }; + var emptyArray = []; + function layoutNode(node) { var mainAxis = node.style.flexDirection === 'row' ? 'row' : 'column'; var crossAxis = mainAxis === 'row' ? 'column' : 'row'; + var children = node.children || emptyArray; var mainDimInStyle = dim[mainAxis] in node.style; if (mainDimInStyle) { node.layout[dim[mainAxis]] = node.style[dim[mainAxis]]; } - var fixedChildren = []; - var flexibleChildren = []; var mainContentDim = 0; - (node.children || []).forEach(function(child) { - if (child.style.flex) { - flexibleChildren.push(child); - } else { - fixedChildren.push(child); + var flexibleChildrenCount = 0; + children.forEach(function(child) { + if (!child.style.flex) { layoutNode(child); mainContentDim += child.layout[dim[mainAxis]]; + } else { + flexibleChildrenCount++; } }); var flexibleMainDim = - (node.layout[dim[mainAxis]] - mainContentDim) / flexibleChildren.length; - // optim: don't allocate a new array, re-traverse + filter the initial one - flexibleChildren.forEach(function(child) { - child.layout[dim[mainAxis]] = flexibleMainDim; - layoutNode(child); + (node.layout[dim[mainAxis]] - mainContentDim) / flexibleChildrenCount; + children.forEach(function(child) { + if (child.style.flex) { + child.layout[dim[mainAxis]] = flexibleMainDim; + layoutNode(child); + } }); var mainPos = 0; - var children = []; - (node.children || []).forEach(function(child) { + children.forEach(function(child) { child.layout[pos[mainAxis]] += mainPos; mainPos += child.layout[dim[mainAxis]] + 2 * getMargin(child); });