usercss: don't recalc widget height => spend 0 time in CM

300ms -> 100ms rendering time in updateInvisible() for "RU AdList CSS Fixes" style
This commit is contained in:
tophf 2017-11-27 01:33:16 +03:00
parent 05677d93b3
commit 3fd4343cfd

View File

@ -169,6 +169,7 @@ function createAppliesToLineWidget(cm) {
function *createWidgets(start, end, removed) { function *createWidgets(start, end, removed) {
let i = 0; let i = 0;
let itemHeight;
for (const section of findAppliesTo(start, end)) { for (const section of findAppliesTo(start, end)) {
while (removed[i] && removed[i].line.lineNo() < section.pos.line) { while (removed[i] && removed[i].line.lineNo() < section.pos.line) {
clearWidget(removed[i++]); clearWidget(removed[i++]);
@ -182,7 +183,9 @@ function createAppliesToLineWidget(cm) {
}); });
removed[i].section = section; removed[i].section = section;
const newNode = buildElement(section); const newNode = buildElement(section);
removed[i].node.parentNode.replaceChild(newNode, removed[i].node); if (removed[i].node.parentNode) {
removed[i].node.parentNode.replaceChild(newNode, removed[i].node);
}
removed[i].node = newNode; removed[i].node = newNode;
removed[i].changed(); removed[i].changed();
yield removed[i]; yield removed[i];
@ -193,9 +196,11 @@ function createAppliesToLineWidget(cm) {
const widget = cm.addLineWidget(section.pos.line, buildElement(section), { const widget = cm.addLineWidget(section.pos.line, buildElement(section), {
coverGutter: true, coverGutter: true,
noHScroll: true, noHScroll: true,
above: true above: true,
height: itemHeight ? section.applies.length * itemHeight : undefined,
}); });
widget.section = section; widget.section = section;
itemHeight = itemHeight || widget.node.offsetHeight;
yield widget; yield widget;
} }
removed.slice(i).forEach(clearWidget); removed.slice(i).forEach(clearWidget);