Skip to content

Commit e248dd2

Browse files
authoredMar 19, 2021
Performance problem when pageBreakBefore for large files used fixed (v0.1) (#2203)
* pageBreakBefore performance fix * array fix * tests fix * test fix
1 parent ecb9efe commit e248dd2

File tree

2 files changed

+20
-20
lines changed

2 files changed

+20
-20
lines changed
 

‎src/layoutBuilder.js

+14-14
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,7 @@ LayoutBuilder.prototype.layoutDocument = function (docStructure, fontProvider, s
8181
}
8282
});
8383
nodeInfo.startPosition = node.positions[0];
84-
nodeInfo.pageNumbers = node.positions.map(function (node) {
85-
return node.pageNumber;
86-
}).filter(function (element, position, array) {
87-
return array.indexOf(element) === position;
88-
});
84+
nodeInfo.pageNumbers = Array.from(new Set(node.positions.map(function (node) {return node.pageNumber;})));
8985
nodeInfo.pages = pages.length;
9086
nodeInfo.stack = isArray(node.stack);
9187

@@ -100,17 +96,21 @@ LayoutBuilder.prototype.layoutDocument = function (docStructure, fontProvider, s
10096
var followingNodesOnPage = [];
10197
var nodesOnNextPage = [];
10298
var previousNodesOnPage = [];
103-
for (var ii = index + 1, l = linearNodeList.length; ii < l; ii++) {
104-
if (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber) > -1) {
105-
followingNodesOnPage.push(linearNodeList[ii].nodeInfo);
106-
}
107-
if (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber + 1) > -1) {
108-
nodesOnNextPage.push(linearNodeList[ii].nodeInfo);
99+
if(pageBreakBeforeFct.length>1){
100+
for (var ii = index + 1, l = linearNodeList.length; ii < l; ii++) {
101+
if (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber) > -1) {
102+
followingNodesOnPage.push(linearNodeList[ii].nodeInfo);
103+
}
104+
if (pageBreakBeforeFct.length>2&&linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber + 1) > -1) {
105+
nodesOnNextPage.push(linearNodeList[ii].nodeInfo);
106+
}
109107
}
110108
}
111-
for (var ii = 0; ii < index; ii++) {
112-
if (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber) > -1) {
113-
previousNodesOnPage.push(linearNodeList[ii].nodeInfo);
109+
if(pageBreakBeforeFct.length>3){
110+
for (var ii = 0; ii < index; ii++) {
111+
if (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber) > -1) {
112+
previousNodesOnPage.push(linearNodeList[ii].nodeInfo);
113+
}
114114
}
115115
}
116116
if (pageBreakBeforeFct(node.nodeInfo, followingNodesOnPage, nodesOnNextPage, previousNodesOnPage)) {

‎tests/layoutBuilder.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -1832,8 +1832,8 @@ describe('LayoutBuilder', function () {
18321832
{ text: 'Text 4 (Page 2)', id: 'text4', pageBreak: 'before' }
18331833
];
18341834

1835-
pageBreakBeforeFunction = sinon.spy();
1836-
1835+
function functionOfLength2(a,b) {}
1836+
pageBreakBeforeFunction = sinon.spy(functionOfLength2);
18371837

18381838
builder.layoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFunction);
18391839

@@ -1851,8 +1851,8 @@ describe('LayoutBuilder', function () {
18511851
id: 'stack'
18521852
};
18531853

1854-
pageBreakBeforeFunction = sinon.spy();
1855-
1854+
function functionOfLength3(a,b,c) {}
1855+
pageBreakBeforeFunction = sinon.spy(functionOfLength3);
18561856

18571857
builder.layoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFunction);
18581858

@@ -1870,8 +1870,8 @@ describe('LayoutBuilder', function () {
18701870
id: 'stack'
18711871
};
18721872

1873-
pageBreakBeforeFunction = sinon.spy();
1874-
1873+
function functionOfLength4(a,b,c,d) {}
1874+
pageBreakBeforeFunction = sinon.spy(functionOfLength4);
18751875

18761876
builder.layoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFunction);
18771877

0 commit comments

Comments
 (0)
Please sign in to comment.